パート02

コンピュータアーキテクチャ
第2回
1
COMET II の機械語(マシン語,命令語)
命令語長: 1ワードまたは2ワード *
 命令数: 38 個
 種類: 8 種類

(1)ロード,ストア,ロードアドレス命令
(2)算術,論理演算命令
(3)比較演算命令
(4)シフト演算命令
(5)分岐命令
(6)スタック操作命令
(7)コール,リターン命令
(8)その他(ノーオペレーション命令,スーパバイザコール命令)
下線付き命令: 基本的命令としてはじめに解説
2
ロード命令 (LoaD) … レジスタ間
LD
GR2, GR5
*
3
ロード命令 (LoaD) … メモリ・レジスタ間
LD GR0, #1000
4
アドレス修飾
LD GR0, #1000, GR2
*
*
インデックスレジスタ
アドレス #1000 に
GR2 の #000A を加えた
#100A が
実効アドレス *
(effective address)
注意: GR0 はインデックスレジスタとして使えない
5
ロード命令
ニモニック
LD
(メモリ・レジスタ間)
に対する機械語
第1オペランド 第2オペランド
*
GR,
adr [,XR]
第1ワード
0001 0000 **** ****
第2ワード
++++ ++++ ++++ ++++
*
**** には *
レジスタ番号
アドレス修飾なし
なら 0000
<例> LD GR5, #1007
第1ワード
第2ワード
0001 0000 0101 0000
0001 0000 0000 0111
(#1050)
(#1007)
・・・ 逐次制御方式の実行例参照
6
フラグレジスタ (Flag Register)

演算命令の実行結果によって値を設定

3ビット構成
OF(Overflow Flag): 演算命令毎に設定が異なる
SF(Sign Flag): 演算結果の符号が 負のとき 1 *が原則
ZF(Zero Flag): 演算結果が 0 のとき 1 が原則

SF, ZF の原則から外れる命令もあり
7
ロード命令とフラグレジスタ
LD
GR3, #1000
・・・ (LoaD)
LD 命令では
OF は常に 0 *
#8000 = -32768 < 0
8
ストア命令(STore)
ST
GR1, #530B
ST 命令では
フラグレジスタは変化しない
*
9
ストア命令に対する機械語
ニモニック
ST
第1オペランド 第2オペランド
GR,
adr [,XR]
第1ワード
0001 0001 **** ****
**** には
レジスタ番号
第2ワード
++++ ++++ ++++ ++++
アドレス修飾なし
なら 0000
<例> ST GR5, #1009
第1ワード
第2ワード
・・・ 逐次制御方式の実行例参照
0001 0001 0101 0000
0001 0000 0000 1001
(#1150)
(#1009)
・・・ 逐次制御方式の実行例参照
10
ロードアドレス命令(Load ADdress)…(1)
LAD GR0, #1000
*
アドレス値(実効アドレス値)を直接レジスタに転送
*
LAD 命令では
フラグレジスタは変化しない
11
ロードアドレス命令(Load ADdress)…(2)
LAD GR0, #1000, GR2
12
ロードアドレス命令(Load ADdress)…(3)
LAD GR2, 1, GR2
* レジスタの値を1増やすのに使用
13
比較 (前項と似て非なる命令)
LD GR2, 1, GR2
14
演習問題 2.1
COMETⅡに,次の一連の動作を実行させる命令列
を示せ.
(1) メモリの #0100 番地の内容を汎用レジスタ
GR1 に転送する.
(2) 汎用レジスタ GR1 の格納する値を汎用レジスタ
GR0 およびメモリの #0101 番地にコピーする.
(3) 汎用レジスタ GR1 の格納する値を 0 にする.
(4) 汎用レジスタ GR1 の格納する値を 1 増やす.
(5) 汎用レジスタ GR1 の格納する値を 2 減らす.
15
演習問題 2.2
GR1 から GR0 へのデータ転送は, LAD命令でアドレス修飾を
使えば
LAD GR0, 0, GR1
で実現できる.しかし,GR0 から GR1 へデータ転送では,
LAD GR1, 0, GR0
とすることはできない.その理由を説明せよ.また,どのように
COMETⅡの機械語の仕様を変えればこれが可能になるのか
述べよ.
16
算術加算命令・減算命令
ADDA GR2, #1000 ・・・ (ADD Arithmetic)
SUBA GR2, #1000 ・・・ (SUB Arithmetic)
被演算データを
符号つき2進数 *
とみて加算・減算
• レジスタ間命令
• メモリ・レジスタ間命令
の両方あり
演算結果が –32768 ~ 32767 に収まらなくなったとき OF が 1
17
算術加算命令
ニモニック
(メモリ・レジスタ間)
に対する機械語
第1オペランド 第2オペランド
ADDA
GR,
adr [,XR]
第1ワード
0010 0000 **** ****
**** には
レジスタ番号
第2ワード
++++ ++++ ++++ ++++
アドレス修飾なし
なら 0000
<例> ADDA GR5, #1008
第1ワード
第2ワード
0010 0000 0101 0000
0001 0000 0000 1000
(#2050)
(#1008)
・・・ 逐次制御方式の実行例参照
18
演習問題 2.3
次の(1)~(2)について,ふたつの命令の違いを説明せよ.
(1) LAD GR1, 1, GR1
ADDA GR1, 1, GR1
(2) LD
LAD
GR3, -1, GR3
GR3, -1, GR3
19
リターン命令
RET
・・・ (RETurn from subroutine)

プログラムの実行終了を制御 *

プログラムの実行前の PR(プログラムレジスタ) の内容
⇒ メモリの他の保管場所へ退避

プログラム終了時に PR(プログラムレジスタ)へ書き戻す

第1ワード
1000 0001 0000 0000
(#8100)
・・・ 逐次制御方式の実行例参照
20
ニモニックレベルの命令
前回の機械語プログラム例
ニモニックレベルの
命令列
*
LD
GR5,#1007
ADDA GR5,#1008 *
ST
GR5,#1009 *
RET *
機械語プログラムの決定手順
アセンブリプログラムから
機械語プログラムへ
アセンブリ言語 CASLⅡ
命令書式
ラベル ニモニック 第1オペランド,第2オペランド ;コメント
命令の種類


機械語命令: COMETⅡ の命令(ニモニックレベル)
アセンブラ命令: START, END, DS, DC
– プログラム範囲の宣言 *
– データ,メモリ領域の設定を指示 *

マクロ命令: IN, OUT, RPUSH, RPOP
– 機械語の命令系列を集約
アセンブリプログラム記述例
プログラム名*
始まりの定義 *
メモリ領域を確保して RESULT でラベル付け *
終わりの定義 *
DATA1 でラベル付けされたメモリ領域にデータを格納 *
2 パスアセンブラ
2回の走査(2パス)で機械語に変換
START
↓
1 パス目: ラベルーアドレス対応表作成
↓
2 パス目: ビットパターン作成 *
↓
END
*
アセンブラ実行例(実行前)
ソースプログラム
ラベル
ニモニック
PLUS
START
LD
ADDA
ST
RET
DATA1
DC
DATA2
DC
RESULT DS
END
オペランド
GR5,DATA1
GR5,DATA2
GR5,RESULT
20
12
1
PLUS
ラベル-アドレス DATA1
DATA2
対応表
RESULT
:
:
:
:
オブジェクトプログラム
アドレス:機械語
↓
↓
アセンブラ実行例(1パス目)
ソースプログラム
ラベル
ニモニック オペランド
PLUS
START
LD
GR5,DATA1
DATA1
DATA2
RESULT
ADDA
GR5,DATA2
ST
GR5,RESULT
RET
DC
DC
DS
END
20
12
1
PLUS
ラベル-アドレス DATA1
DATA2
対応表
RESULT
オブジェクトプログラム
アドレス:機械語
↓
↓
#1000:
#1001:
#1002:
#1003:
#1004:
#1005:
#1006:
#1007:
#1008:
#1009:
*
:
:
:
:
#1000
#1007
#1008
#1009
*
*
*
*
アセンブラ実行例(2パス目)
ソースプログラム
ラベル
ニモニック オペランド
PLUS
START
LD
GR5,DATA1
DATA1
DATA2
RESULT
ADDA
GR5,DATA2
ST
GR5,RESULT
RET
DC
DC
DS
END
20
12
1
PLUS
ラベル-アドレス DATA1
DATA2
対応表
RESULT
オブジェクトプログラム
アドレス:機械語
↓
↓
#1000: #1050
#1001: #1007
#1002: #2050
#1003: #1008
#1004: #1150
#1005: #1009
#1006: #8100
#1007: #0014
#1008: #000C
#1009: #0000
*
:
:
:
:
#1000
#1007
#1008
#1009
☆機械語の構成は
テキスト p26 参照
演習問題 2.4
次のプログラムは,VALUE1 でラベル付けされたメモリ領域の格納
する値から,VALUE2 でラベル付けされたメモリ領域の格納する値
を引いた結果を ANSWER でラベル付けされたメモリ領域に格納
するアセンブリプログラムである.これを 2 パスアセンブルせよ.
SUBTRA
VALUE1
VALUE2
ANSWER
START
LD
SUBA
ST
RET
DC
DC
DS
END
GR3,VALUE1
GR3,VALUE2
GR3,ANSWER
18
24
1
30