Transcript パート04
コンピュータアーキテクチャ 第4回 1 SLA とオーバフロー オーバフロー: * 例:SLA GR5, 1 ・・・ (GR5) = (16384)10 ⇒ レジスタ GR5 の値 (16384)10 = #4000 を 2 倍する 16384 × 2 = 32768 は –32768 ~ 32767 の範囲外! ☆ SLA 命令でのオーバフローはいつも OF に反映されるとは限らない ☆ 最後のビットシフトで 1 が消失すれば OF に 1 2 SLA による負整数の 2 のべき乗倍 SLA GR3, 2 レジスタ GR3 の値 ・・・ (GR3) = -5 *を 4 倍(2 の 2 乗倍)して *とする ☆ SLA 命令では OF が 1 でもオーバフローが発生したとは限らない 3 算術右シフト演算命令 SRA GR0, 3 ・・・ (Shift Right Arithmetic) * 最上位の符号ビットはシフトしない レジスタの右側から送り出されたビットの値は消失する OF にはレジスタから最後に送り出されたビットの値を入れる レジスタの左側の空いたビット位置には符号ビットと同じ値 を入れる 4 SRA による 2 のべき乗割り SRA GR3, 2 レジスタ GR3 の値 ・・・ (GR3) = (16)10 *を 4 (2 の 2 乗倍)で割って *とする 5 SRA と端数切り捨て(切り上げ) SRA GR2, 2 ・・・ (GR2) = (9)10 * 9 ÷ 4 = 2.25 の 0.25 は整数ではない レジスタから 1 の値が消失するとき, 符号ビットの値が 0 なら結果の *が起こり, 符号ビットの値が 1 なら結果の端数切り上げが起こる. 6 論理左シフト演算命令 SLL GR0, 3 ・・・ (Shift Left Logical) 実効アドレス値だけ,レジスタの内容を * 最上位の符号ビットもシフトする レジスタの左側から送り出されたビットの値は消失する OF にはレジスタから最後に送り出されたビットの値を入れる レジスタの右側の空いたビット位置には 0 を入れる 7 論理右シフト演算命令 SRL GR0, 3 ・・・ (Shift Right Logical) 実効アドレス値だけ,レジスタの内容を符号ビットも含めて右へシフト 最上位の符号ビットもシフトする レジスタの右側から送り出されたビットの値は消失する OF にはレジスタから最後に送り出されたビットの値を入れる レジスタの左側の空いたビット位置には *を入れる 8 1 ワードのビット列に含 まれる 1 の数を調べる プログラム ← GR1 をカウンタとして初期化 ← 結果を累積保存 * * ← 終了判定 (GR1 = 16 ?) 演習問題 4.1 前出の <プログラム 8 > の開始から終了までに, GR1 およびフラグレジスタの値がどのように変化す るか順番に示せ.ただし,どちらかのレジスタが変 化するごとに示すこと. 10 演習問題 4.2 算術シフト演算命令実行時のオーバフローと フラグレジスタの OF の関係について述べよ. 11 演習問題 4.3 レジスタ GR1 が –21804 を格納しているとする.以下の各 命令を実行したあとの GR1 の値を,-32768 から 32767 の 10 進数と見なして示せ.またフラグレジスタ (OF, SF, ZF) の 値も示せ. SLA SRA SLL SRL GR1, GR1, GR1, GR1, 3 3 3 3 12 演習問題 4.4 連続する 1 の系列を“1 のラン”という.またその系 列の 1 の個数を“1 のランの長さ”という.前出の <プログラム 8 > を基にして,メモリの W 番地に 格納された値 #6A7E に含まれる 1 のランの長さ の最大値を調べて,メモリのN 番地に書き出すプロ グラム ROF1 を記述せよ. 13 論理加算命令・減算命令 ADDL GR2, #1000 ・・・ (ADD Logical) SUBL GR2, #1000 ・・・ (SUB Logical) 被演算データを * とみて加算・減算 演算結果が * に収まらなくなったとき OF が 1 14 論理比較命令 CPL GR2, #1000 ・・・ (ComPare Logical) 被演算データを 符号なし2進数 とみて比較 * にだけ結果が反映される * には結果が反映されない 第1オペランド値が第2オペランド値より 第1オペランド値と第2オペランド値が OF はつねに * * SF が 1, そうでなければ 0 * ZF が 1, そうでなければ 0 15 ノーオペレーション命令 NOP ・・・ (No OPeration) 1ワード命令 何もしない命令 コンピュータの動作の * を考慮するとき意味あり – コンピュータの動作はクロックを基準にした – 何もしないステップを挿入することあり * 16 プログラムの実行終了制御 プログラムの終了時 ・・・ RET 命令によって制御が分岐 どこへ? ⇒ そのアドレスはどこに記憶するのか? ⇒ その領域をどうやって知るのか? ⇒ * * * メモリ #1006 番地の RET 命令を実行 分岐先アドレスを スタックポインタが指示 17 最も簡単なシステム動作環境 プロセッサ外部から内部の値を直接制御可能 – プログラムレジスタ – スタックポインタ 任意のアドレスのメモリ領域を外部から直接読み書き可能 専用の * – ユーザとコンピュータ内部を媒介する機構 プログラム実行終了制御 – 例 (1) RET 命令での分岐先 #**** に ⇒ 無限の繰り返し命令 – 例 (2) RET 命令での分岐先 #**** に ⇒ 合図があるまでプロセッサを停止する命令 その間に実行結果を読み出し(レジスタやメモリの値) * * 18 OS によるシステム動作環境 OS (Operating System) : – コンピュータシステム全体を管理 – 外部とのデータのやり取りの機能などを提供 入出力装置の制御 – ユーザプログラムを適切なメモリ領域に自動的に割り付け ユーザプログラム : * – 実行時にユーザプログラムの先頭番地をプログラムレジスタに渡す プログラム実行終了制御 * – RET 命令での分岐先 #**** に ⇒ OS に制御を返す SVC 命令 (SuperVisor Call 命令): – ユーザプログラムから OS の機能を呼び出す命令 – マクロ命令 IN, OUT は SVC 命令を含む命令列に展開される 19 スタック 先入れ後出しの記憶機構 ・・・ メモリ上に設定 領域は自動的に確保される ⇒ * スタックポインタ SP がスタックの * を記憶する – アーキテクチャによっては最上位アドレスのひとつ上を記憶 データを格納するとスタックポインタは上位アドレスへ移動 データを取り出すとスタックポインタは下位アドレスへ移動 20 スタックの例 * * 21 スタック操作命令 PUSH POP adr, x r PUSH 命令: POP 命令: ・・・ (PUSH effective addess) ・・・ (POP up) * * 22 スタックによる逆ポーランド記法式の計算 * 23 演習問題 4.5 教科書の <プログラム 10 > の開始から終了まで に GR1 の値がどのように変化するか順番に示せ. ただし,AREA ではじまるメモリ領域には 53-2* の 文字列を入力するものとする. 24