Transcript パート03

コンピュータアーキテクチャ
第3回
1
オブジェクトプログラムの略記
ソースプログラム
ラベル
ニモニック
PLUS
START
LD
ADDA
ST
RET
DATA1
DC
DATA2
DC
RESULT DS
END
オペランド
GR5,DATA1
GR5,DATA2
GR5,RESULT
20
12
1
オブジェクトプログラム
アドレス:機械語:第2語
↓
↓
↓
#1000: #1050 #1007
#1002: #2050 #1008
#1004: #1150 #1009
#1006: #8100
#1007: #0014
#1008: #000C
#1009: #0000
ソースプログラムとオブジェクトプログラムを対比し易くするため,
2ワード命令の第2語を第1語のあとに付けアドレスを省略
•
比較演算命令
•
レジスタ間命令
メモリ・レジスタ間命令
の両方あり
CPA GR2, #1000 ・・・ (ComPare Arithmetic)
CPL GR2, #1000 ・・・ (ComPare Logical)
第1オペランドの値と
第2オペランドの値を
比較
*
比較演算命令
実行時は
常に OF は 0
#000A < #0014
3
分岐命令
*
正分岐
負分岐
非零分岐
零分岐
JPL adr[,X] ・・・ (Jump on PLus)
JMI adr[,X] ・・・ (Jump on MInus)
JNZ adr[,X] ・・・ (Jump on Non Zero)
JZE adr[,X] ・・・ (Jump on ZEro)
オーバフロー分岐 JOV adr[,X] ・・・ (Jump on OVerflow)
無条件分岐 JUMP adr[,X] ・・・ (Unconditional JUMP)

分岐命令によってフラグレジスタは変化しない
4
分岐条件(フラグレジスタ)
OF
JPL
JMI
JNZ
JZE
JOV
SF
ZF
0 & 0
1
0
1
1
5
1 から 10 の整数の総和を計算し
GR0 へ格納する
6
CASLⅡ のエミュレーションソフト
CaslBuilder ・・・ フリーウェア

–
Windows7, xp 等で動作

–
http://www.vector.co.jp/soft/win95/prog/se059919.html
Mac OS でもインストール可能

http://mikuinstaller.sourceforge.jp/
CASL2000 ・・・ フリーウェア

–
–
Windows98, 2000, xp 等のうえで CASLⅡ の動作環境をエミュレーション
http://www5a.biglobe.ne.jp/~teamcasl/ 等で入手可能
CASLⅡシミュレータ ・・・ フリーウェア

–
–
情報処理技術者試験センター提供
Windows7 未対応
7
JIS 情報交換用符号(JIS X 0201)
例:
*
‘&’ =
‘3’ =
‘A’ =
# 2 6
# 3 3
# 4 1
↑↑
列行
*
‘&’ =
‘3’ =
‘A’ =
# 0 0 2 6
# 0 0 3 3
# 0 0 4 1
8
二つの数字を二つの数値に変換して
それらの積を求める.
9
単語の中の特定文字数を数える
=
=
=
=
=
=
=
=
#0063
#006F
#006D
#0070
#0075
#0074
#0065
#0072
10
文字データの入出力

マクロ命令 IN, OUT を使用

パラメータ

*
–
入力領域: 1 レコード =
–
入力文字長領域:
–
出力領域: 1 レコードの出力データ格納領域
–
出力文字長領域:
*
*
の入力データ格納領域
を格納
を格納
命令書式
IN 入力領域,入力文字長領域
OUT 出力領域,出力文字長領域
11
大文字と小文字の変換
標準入出力装置から
英字をひとつ読み,
大文字は小文字に,
小文字は大文字に
変換する
12
論理積・論理和・排他的論理和命令
AND GR2, #1000 ・・・ (AND)
OR
GR2, #1000 ・・・ (OR)
*
• レジスタ間命令
• メモリ・レジスタ間命令
の両方あり
AND, OR, XOR 命令
では OF は常に 0
13
演習問題 3.1
テキストの<プログラム 2>開始から終了までに,GR0 お
よび GR1 の値がどのように変化するか順番に示せ.ただし,
どちらかのレジスタが変化するごとにその直後の値を16進
数で示すこと.
14
演習問題 3.2
テキスト pp.55-56 の演習問題 (8), (9), (10) のプログラム
それぞれの機能を説明せよ.
15
演習問題 3.3
名前 A でラベル付けされたメモリ領域の値から,名前 B で
ラベル付けされたメモリ領域の値をひいた値の絶対値を,
名前 C でラベル付けされたメモリ領域に格納するプログラ
ムを書きなさい.ただし,領域 A, B には適当な数値を入れ
ておくこと.
16
演習問題 3.4
標準入出力装置から 4 個の数字を読み込み,4 桁の 10 進
数とみなして汎用レジスタ GR2 へ格納するプログラムを示せ.
ただし,数字の読み込みには,マクロ命 IN を使うこと.
17
演習問題 3.5
テキストの<プログラム 3>をアセンブルせよ.
18
演習問題 3.6
テキストの<プログラム 4>をアセンブルせよ.
19
シフト演算命令

算術シフト演算命令
*
算術左シフト演算命令
算術右シフト演算命令

論理シフト演算命令
論理左シフト演算命令
論理右シフト演算命令
*
算術左シフト演算命令
SLA GR0, 3 ・・・ (Shift Left Arithmetic)
*
だけ,レジスタの内容を 左へシフト




最上位の
*はシフトしない
レジスタの左側から送り出されたビットの値は
*する
OF にはレジスタから
*送り出されたビットの値を入れる
レジスタの右側の空いたビット位置には
*を入れる
SLA による 2 のべき乗倍
SLA GR1, 2
レジスタ GR1 の値
・・・ (GR1) = 5
*を 4 倍(2 の 2 乗倍)して
*とする
2 進数で値 4 を 5 倍する方法
4 * 5 = 4 * (4 + 1) = 4 * (22 + 20) = 4 * 22 + 4 * 20
4 = #0004 = (0000 0000 0000 0100)2
4 * 22 = (0000 0000 0001 0000)2
4 * 22 + 4 * 20 =
=
*
(0000 0000 0001 0000)2
+ (0000 0000 0000 0100)2
(0000 0000 0001 0100)2
*
A の値を 5 倍して B へ格納するプログラム
*
*
正整数 A, B の積を計算する方法
A = a14 * 214 + a13 * 213 + ・・・ + a2 * 22 + a1 * 21 + a0 * 20
B = b14 * 214 + b13 * 213 + ・・・ + b2 * 22 + b1 * 21 + b0 * 20
A * B = A * (b14 * 214 + b13 * 213 + ・・・ + b2 * 22 + b1 * 21 + b0 * 20)
= b14 * A * 214 + b13 * A * 213
+ ・・・ + b2 * A * 22 + b1 * A * 21 + b0 * A * 20
=
b14 * A の 14 ビット左シフト
+ b13 * A の 13 ビット左シフト
・
・
・
+ b2 * A の 2 ビット左シフト
+ b1 * A の 1 ビット左シフト
+ b0 * A の シフトなし
*
A の値を B 倍する
プログラム
← GR1 をカウンタとして初期化
← 結果を累積保存
*
*
← 終了判定 (GR1 = 15 ?)
*
← GR6 を 2 倍
演習問題 3.7
前出の <プログラム 7 > の開始から終了までに
GR7 の値がどのように変化するか順番に示せ.