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