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