250 likes | 618 Views
コンピュータアーキテクチャ. 第 12 回. 各種メモリ・レジスタ間命令. COMETⅡ の命令の分類 ロード,ストア,ロードアドレス命令 : LD, ST, LAD 算術,論理演算命令: ADDA, ADDL, SUBA, SUBL, AND, OR, XOR 比較演算命令: CPA, CPL シフト演算命令 : SLA, SRA, SLL, SRL 分岐命令 : JPL, JMI, JNZ, JZE, JOV, JUMP スタック操作命令 : PUSH, POP コール,リターン命令 : CALL, RET 今回の内容 LAD 命令の実行制御
E N D
コンピュータアーキテクチャ 第 12 回
各種メモリ・レジスタ間命令 • COMETⅡの命令の分類 • ロード,ストア,ロードアドレス命令 :LD, ST, LAD • 算術,論理演算命令:ADDA, ADDL, SUBA, SUBL, AND, OR, XOR • 比較演算命令: CPA, CPL • シフト演算命令: SLA, SRA, SLL, SRL • 分岐命令: JPL, JMI, JNZ, JZE, JOV, JUMP • スタック操作命令: PUSH, POP • コール,リターン命令: CALL, RET • 今回の内容 • LAD命令の実行制御 • 共通の実効アドレス計算状態に推移しない • 実際にはメモリにアクセスしない • SLA命令の実行制御 • JPL命令の実行制御 • PUSH・POP命令の実行制御 • CALL・RET命令の実行制御... PUSH・POP命令に類似 * 実行制御の点で類似
ロードアドレス命令の実行制御状態 * ロードアドレス命令検出 * 共通の実効アドレス計算状態には推移しない
制御信号生成回路におけるロードアドレス命令の処理制御信号生成回路におけるロードアドレス命令の処理 デコードの開始 * デコードの完了: ロードアドレス命令の特定 * ロードアドレス命令 の制御信号生成へ *
ロードアドレス命令の制御 命令の例: LAD GR0,#****,GR1 bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Dec-Lad: ; 001 100000 00111000 000 1000000000 000 if Lad = 1 then GRA←MDR+GRB *
シフト命令の実行概念 SLA GR1,#****,GR2 実効アドレス値だけ1ビットシフトの繰り返し * ただし,現在の主流はバレルシフタ(1ステップで任意ビットシフト)
制御信号生成回路におけるSLA 命令の処理 デコードの開始 * デコードの完了: SLA命令の特定 * 実効アドレス計算の開始 * SLA命令の 実行ステップの 制御信号生成へ *
シフト演算命令の制御 命令の例: SLA GR1,#0003 (クロックサイクル Sla0) * #FFFD * #0003 * バス A の 値が 0 * #FFFD =-(MAR) bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Sla0: ; 000 001000 11111000 000 0000000000 000 SNC←-MAR *
シフト演算命令の制御信号生成回路 命令の例: SLA GR1,#0003 (クロックサイクル Sla0) * #FFFD #FFFD
シフト演算命令の制御 命令の例: SLA GR1,#0003 (クロックサイクル Sla1) * #FFFD →#FFFE →#FFFF →#0000 bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Sla1: ; * 値が 0 で なければ If SNC <> 0 then {GRA←Sla(GRA), SNC←SNC+1,Sla1} 010 000000 00100110 100 1000000000 000 *
シフト演算命令の制御信号生成回路 命令の例: SLA GR1,#0003 (クロックサイクル Sla1) * #FFFD →#FFFE →#FFFF →#0000
演習問題 12.1 前述のシフト演算命令 SLA GR1,#0003の実行 ステップのタイムチャートを示せ.
分岐命令の制御信号生成回路 命令の例: JPL #****,GRB (クロックサイクル Jpl0) bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Jpl0: ; if (SF=0)AND(ZE=0) then PR←MAR 000 001000 00010000 000 0010000000 000 *
演習問題 12.2 JPL命令の実行ステップのタイムチャートを示せ. ただし,実行時の SF および ZF の値はともに 0 で あるとする.
プッシュ命令の制御信号とデータの流れ(1)(実効アドレス計算のサイクル Dec-Ea は省略) bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Push0: ; SDR←MAR, SP←SP-1 000 001000 00010000 000 0000001101 000 *
プッシュ命令の制御信号とデータの流れ(2) bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Push1: ; mem(SP)←SDR 000 000000 00000000 000 0000000000 101 *
POP命令の実行制御状態 * POP命令検出 * 状態 F3 に推移(パイプラインを崩さない)
ポップ命令の制御信号とデータの流れ(1) bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Dec-Pop0: ; if POP = 1 then {SDR←mem(SP), SP←SP+1} 000 000010 10111000 000 0000000111 110 *
ポップ命令の制御信号とデータの流れ(2) bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Pop1: ; GRA←SDR, PR←PR+1 000 000001 00010000 000 1110000000 000 * レジスタ間命令と同様 *
ポップ命令の実行ステップのタイムチャート * bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Dec-Pop0:000 000010 10111000 000 0000000111 110; Pop1:000 000001 00010000 000 1110000000 000;
コール命令(CALL命令)の制御信号 bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Call0: ; SDR←PR, SP←SP-1 Call1: ; mem(SP)←SDR, PR←MAR プッシュ命令(PUSH命令)に類似 PUSH命令の制御信号 bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Push0: ; SDR←MAR, SP←SP-1 Push1: ; mem(SP)←SDR 000 001000 00010000 000 0000001101 000 000 000000 00000000 000 0000000000 101 CALL命令の制御信号 000 010000 00010000 000 0000001101 000 * 000 001000 00010000 000 0010000000 101 *
RET命令の実行制御状態 * RET命令検出 * 状態 F1 に推移(パイプラインが崩れる)
リターン命令(RET命令)の制御信号 ポップ命令(POP命令)に類似 POP命令の制御信号 bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Dec-Pop0: ; if POP = 1 then {SDR←mem(SP), SP←SP+1} Pop1: ; GRA←SDR, PR←PR+1 000 000010 10111000 000 0000000111 110 000 000001 00010000 000 1110000000 000 RET命令の制御信号 bA bB A/S_op F bC Mem IAa BPAbSD c0123aLR Fcn GiPAmDdSsD srw Dec-Ret0: ; if RET = 1 then {SDR←mem(SP), SP←SP+1} Ret1: ; PR←SDR 000 000010 10111000 000 0000000111 110 000 000001 00010000 000 0010000000 000 * *
演習問題 12.3 RET命令の実行ステップのタイムチャートを示せ.