マイクロプロセッサ応用(3)

Download Report

Transcript マイクロプロセッサ応用(3)

工学部講義
マイクロプロセッサ応用(3)
坂井 修一
東京大学 大学院 情報理工学系研究科 電子情報学専攻
東京大学 工学部 電気工学科
• はじめに
• 講義概要
• アドレス指定方式
• サブルーチン
マイクロプロセッサ応用
東大・坂井
はじめに

本講義の目的
– マイクロプロセッサのハード・ソフトの基本を実践的に学習する
– 前半:講義
• 坂井 (ソフトの基本:機械語プログラミング)
• 三田先生(ハードの基本)
– 後半:実習


時間・場所:火曜日 8:30 - 10:00、3-31
ホームページ(坂井分:ダウンロード可能)
– url: http://www.mtl.t.u-tokyo.ac.jp/~sakai/micro/

教科書・参考書
– Patterson and Hennessy: Computer Organization and Design:The Hardware/Software
Interface 2nd Ed. (邦訳 「コンピュータの構成と設計」(第2版)日経BP)
マイクロプロセッサ応用
東大・坂井
講義の概要と予定(坂井分)
1.マイクロプロセッサのモデルと命令
2.命令とプログラム
3.アドレス指定方式
アドレス指定方式、サブルーチン
4.入出力、例外処理等
5.課題出題
2月15日: 坂井分課題レポート提出期限(仮)
マイクロプロセッサ応用
東大・坂井
3.アドレス指定方式

オペランド(operand)
– 命令の対象
• ソースオペランド: 被演算データ
• デスティネーションオペランド:結果データ

アドレス指定方式(addressing)
– オペランドを特定する方式のこと

アドレス指定方式の大別
– 即値: 「アドレス」でなく「値」でオペランドを指定
– アドレス指定
• レジスタアドレス指定:直接アドレッシング(のみ)
– rs, rt, rd:命令のフィールドがレジスタアドレスを表す
• メモリアドレス指定: 次のスライド
マイクロプロセッサ応用
東大・坂井
3.1 メモリアドレス指定

RISCとCISC
– RISC: メモリアドレス指定方式の種類は少ない
• load/store以外には、メモリの中身をオペランドとすることはない
• load/storeのアドレス指定
– ベース相対モード: address = rs + dpl
– インデクス相対モード: address = rs + rt (+dplはないのが普通)
– PC相対モード:address=pc+dpl (分岐命令で用いる)
– CISC: メモリアドレス指定方式の種類が多い
• 一般の演算命令がメモリの中身をオペランドとすることができる
• アドレス指定
– 直接モード: address = dpl
– レジスタ間接モード:address = rs
– ベース相対モード: address = rs + dpl
– インデクス相対モード: address = rs+rt+dpl
– スケールインデクスモード: address = rs+rt*scl+dpl
– メモリ間接モード:address= (rs)+dpl
– 自動インクリメントモード:address = rs++ + dpl
マイクロプロセッサ応用
– etc.
東大・坂井
アドレス指定方式の図解
OP rs rt
OP rs rt
dpl
dpl
+
PC
(a)直接モード
(d)PC相対モード
OP rs rt
dpl
OP rs rt
+
rs
* SCL
rs
(b)ベース相対モード
OP rs rt
rt
dpl
dpl
rt
rs
(e)スケールインデクスモード
OP rs rt
+
+
dpl
rs
+
(c)インデクス相対モード
マイクロプロセッサ応用
(b)メモリ間接モード
東大・坂井
3.2 各アドレス指定方式の使い方

ベース相対モード
– ベース相対モードの用途
• ある番地A以後に連続してデータが格納されているときの各
データへのアクセス
– Aをベースアドレスレジスタに入れておいて、各データはここか
らの変位(相対番地)でアクセスする
Base DW 6 DUP
#(アドレスBaseを定義する疑似命令)
add r2 r0 Base
lw r3 0(r2)
lw r4 4(r2)
add r3 r3 r4
sw r3 8(r2)
lw r3 12(r2)
lw r4 16(r2)
sub r3 r3 r4
sw r3 20(r2)
マイクロプロセッサ応用
; r2 <- Base
; r3 <- x
; r4 <- y
; r3 <- r3 + r4
; z <- r3
; r3 <- u
; r4 <- v
; r3 <- r3 - r4
; w <- r3
メモリ
ベース
アドレス
X
Y
Z
U
V
W
東大・坂井
(注)疑似命令

機械語の命令に対応する命令ではなく、メモリ番地
の定義を変数で表すため等に使う見かけ上の命令
– X DW
X番地に1語データがある
• DWは一語の領域の定義(Define Word)
– Y DW 10 DUP Y番地から10語データがある
• D UPはduplicate (重複)の略
マイクロプロセッサ応用
東大・坂井
各アドレス指定方式の使い方(続き)

インデクス相対モード
– インデクス相対モードの用途
• 配列データへのアクセスなど
– 領域の先頭番地Aaをベースアドレスレジスタ、配列の先頭番
地(Aからの相対番地)Amをインデクスレジスタに入れておいて、
配列要素はここからの変位でアクセスする
メモリ
ベース
アドレス
Base DW 2 DUP
A DW 10 DUP
B DW 10 DUP
X
Y
A[0]
A[1]
‥
add r2 r0 Base
mul r3 r1 4
lw r4 8(r2, r3)
lw r5 48(r2, r3)
add r4 r4 r5
;
;
;
;
;
r2 <- Base
r1 = Iとする
r4 <- A[I]
r5 <- B[I]
r4 <- A[I]+B[I]
A[9]
B[0]
B[1]
‥
B[9]
マイクロプロセッサ応用
東大・坂井
3.3 RISC型アドレス指定方式の拡張性

RISC型にないモードの実現
– 直接モード
• 0レジスタ:値が恒常的に0のレジスタ
– 例.MIPS: r0=0
• rs=0レジスタとすれば、直接モードになる
– インデクス相対モード
• ベース+インデクスの値を別のレジスタに入れておけばよい
– 潤沢なレジスタ資源を活用する!
– 他のモード
• 複数の命令に展開する
– スケール: アドレスの入っているレジスタの値を定数倍

RISC型は、アドレス指定方式の種類が少なく、複雑なア
ドレス指定は命令の組合せで実現する。
– よく使うアドレス指定だけを用意し、単純化の利点を活かして高
速化することで、全体の処理を高速化する
マイクロプロセッサ応用
東大・坂井
3.4 アドレス空間

セグメント化アドレス方式
– 語長16ビット以下の計算機
• 「語 = アドレス」では、アドレス空間が狭い(64KB)
→ セグメントレジスタを用意し、その中身と16ビットアドレスと足
しあわせる
• 8086:論理空間 1MB
• 80286: 仮想記憶 → 論理空間 1 GB
– 80386: 32ビット化 → 論理空間 64TB
• セグメント 4GB
– 32ビット全空間をセグメントを切り替えずにアクセスできる (リニ
アアドレス)

仮想記憶、記憶保護
(田中英彦先生講義)
マイクロプロセッサ応用
東大・坂井
4.サブルーチン

サブルーチン
–
プログラムの中であるまとまった処理をする部分
•
•

Cの関数、Pascalのprocedure、FORTRANのsubroutine
引数と返値をもつ
一般的な手順(機械語レベル)
1. レジスタ値の待避
2. 戻り番地(次の命令番地)の待避
3. サブルーチンの先頭番地へのジャンプ
4. サブルーチン本体の実行
5. 戻り番地へのジャンプ
6. レジスタ値の復帰
7. もとの命令列の実行再開
本方式は、レジスタ値を呼び出し側が待避するので、
Caller Save方式と呼ばれる
マイクロプロセッサ応用
東大・坂井
4.1 サブルーチンの実現

スタックを用いる
– スタック(Stack): Last In First Out (LIFO)型のデータ構造
• 通常はメモリの領域を使う
– スタックポインタ(SP): スタックの一番上を指すレジスタ
• サブルーチンを呼び出すときは、待避するデータをスタックに積み
上げる(PUSH)
• サブルーチンから復帰するときは、待避したデータをスタックから
読み出す(POP)
New SP
P → Q → Rの順で
サブルーチンが呼ばれた
とき
PUSH
POP
Q
Old SP
P
SP: Stack Pointer
スタック
マイクロプロセッサ応用
東大・坂井
4.2 サブルーチンのプログラム
sw r1 0(sp)
;
sw r2 4(sp)
.......
sw rk 4k(sp)
;
add sp 4k+4
call address
sub sp 4k+4
lw r1 0(sp)
;
lw r2 4(sp)
.....
lw rk 4k(sp)
;
もとの仕事の続き
.............
address:
body of subroutine
......
......
ret
マイクロプロセッサ応用
レジスタ値の待避(必要なだけ)始め
レジスタ値の待避終わり
レジスタ値の復帰始め
レジスタ値の復帰終わり
call: 戻り番地をスタックに積んで、addressへ
ジャンプ
ret: スタックから戻り番地をPCに戻す
注. 戻り番地の待避は特定のレジスタ上にしてもよい。
この場合、ひとつ前の戻り番地をスタックに積む
東大・坂井