計算機アーキテクチャ

計算機アーキテクチャ
第13回 命令セットとアドレッシング
2014年 7月7日
電気情報工学科
田島 孝治
第13回 計算機アーキテクチャ
1
授業スケジュール(前期)
回
日付
タイトル
回
日付
タイトル
1
4/7
コンピュータ技術の歴史と
コンピュータアーキテクチャ
10
6/16
主記憶装置とレジスタ
11
6/20
命令実行の流れ
12
6/30
命令形式とアセンブリ言語
13
7/7
命令セットとアドレッシング
14
7/14
サブルーチンの実現
15
7/28
PCSpimによるアセンブリ言語
プログラム
8/4?
期末試験(日程は仮)
9/29?
フォローアップ(日程は仮)
2
4/14
ノイマン型コンピュータ
3
4/21
コンピュータのハードウェア
4
4/28
数と文字の表現
5
5/12
固定小数点数と浮動小数点表現
6
5/19
計算アーキテクチャ(ARU)
7
5/26
計算装置のハードウェア実装
8
6/2
文字コード
9
6/11
中間試験(9:00-9:50)
16
※5/5はこどもの日、7/21は海の日のため休講
※授業変更:6/23 1時限→6/20 3時限
第13回 計算機アーキテクチャ
2
R形式の特殊命令

HIとLOのレジスタはどうやって読み込む?

専用の命令があります
第13回 計算機アーキテクチャ
3
64ビットを使った掛け算
main:
loop:

li
li
li
li
$t1,1024
# t1 = 0
$t2,4
# t2 = 0
$t3,1000000000
#
$t4,16
#
mul
mult
mfhi
mflo
mult
mfhi
mflo
$t0, $t1, $t2
$t1,$t2
$s0
$s1
$t3,$t4
$s2
$s3
#
#
#
#
#
#
#
t3 = (0x3B9ACA00)
t4 = (0x00000010)
t0 = t1 * t2
(HI,LO) = t1 * t2
s1 = HI
s0 = LO
(HI,LO) = t3 * t4
s2 = HI
s3 = LO
レジスタ上はきちんと保持されている

表示には工夫が必要
4
今日の授業の目的
メモリ操作命令の形式について理解する
メモリ番地を表す手法(アドレッシング)につ
いて理解を深める


メモリ操作命令のフォーマットを理解し、R形式と同
様に、バイナリの表現をできるようにする
メモリ番地を命令の中で表現する方法を学ぶ
第13回 計算機アーキテクチャ
5
6
メモリ操作命令

ロード命令


ストア命令


メモリ上の特定の番地からレジスタへ値を読み込む
メモリ上の特定の番地にレジスタの値を書き込む
命令の形式:I形式
メモリ操作
(load, store等)
op



レジスタ
rs
アドレス
rt
アドレス
R形式とは異なり、アドレスを指定可能な書式とする
ハードウェアの動作も異なる
ただし命令長は変わらない
第13回 計算機アーキテクチャ
具体的な命令の例(I形式)

I形式の命令
演算命令
命令コード
使用例
意味
メモリ読み込み
lw
lw $t0 C($s0)
t0 = Memory[$s+C]
メモリ書き込み
sw
sw $t0 C($s0)
Memory[$s + C] = t0
beq $s,$t,10
2つのレジスタの値が
等しい場合に指定した
アドレスに処理を移す
bne
bne $s
2つのレジスタの値が
等しくない場合に指定
アドレスに処理を移す
加算(即値)
addi
addi $t0,$a0,10
t0 = a0 + 10
比較
slti
slti $t0,$a0,10
t0 = (a0 < C)
条件分岐
beq
条件分岐
第13回 計算機アーキテクチャ
7
ビット列の作り方(I形式)
imm は immediate(即値)を表す
つまり、レジスタと直接指定した値を比較したり、直接値を代入したりできる
第13回 計算機アーキテクチャ
8
9
ビット列の作り方(I形式)2
Offsetとアドレスの関係は??
第13回 計算機アーキテクチャ
10
メモリアドレス

計算機上のメモリ

一意の長さを持つ:アドレス長と呼ぶ
メモリアドレス

メモリ番地
メモリの内容
0
プログラム1
1
プログラム2
・・・
・・・
65536
データN
アドレス長はいくつが適切か?


大きくするほどメモリも大きくできる
メモリアドレスはプログラムカウンタ(レジスタの一種)
に格納される → レジスタの大きさと同じにしたい
第13回 計算機アーキテクチャ
命令におけるアドレス問題

11
メモリアドレスが命令に入らない


レジスタ長=データ長
データ長が32bitのとき、メモリアドレスが32bit
メモリ番地を16ビット分
しか記述できない

どうやって16bitで32bit分のアドレスを表す?
第13回 計算機アーキテクチャ
12
4種類のアドレッシング
op

rs
rt
imm
op
即値アドレッシング
値を直接記入

rs

rs
rt
rt
address
レジスタアドレッシング
アドレスの入ったレジスタを指定

op
rs
offset
op
rs
rt
offset
+
rs
address
=
指定したaddress
指定したaddress
ベース相対アドレッシング

PC
=

address
+
レジスタの値+相対位置
第13回
で指定

PC相対アドレッシング

PCからの相対位置を指定
計算機アーキテクチャ
直接アドレッシングの命令語

immには直接値が入る


もちろん2進数に変換される
例題;次の命令をバイナリ列に直せ

addi $t3, $s1, 36
op
rs
rt
第13回 計算機アーキテクチャ
Imm
13
14
レジスタ番号対応表
レジスタ名
レジスタ番号
使用用途
zero
0
常に0を保持するレジスタ
at
1
アセンブラ用一時レジスタ(利用不可)
v0,v1
2,3
関数の戻り値を格納
a0, a1, a2, a3
4,5,6,7
関数の引数を格納
t0,…,t7, t8, t9
8,…,15,24,25
一次変数(関数呼び出し時に破棄)
s0,..., s7, s8
16,…,23,30
自由な変数(関数呼び出し時に保持)
k0, k1
26, 27
OSカーネルの戻り値を格納
gp
28
グローバルポインタを格納
sp
29
スタックポインタを格納
ra
31
関数から戻る際のアドレスを格納
第13回 計算機アーキテクチャ
15
ベース相対アドレッシングの命令語



rsにベースアドレスを保存したレジスタを指定
Offset で指定した値からの変化量を指定
例題;次の命令をバイナリ列に直せ

sw $t1, 4($sp)
op
rs
rt
第13回 計算機アーキテクチャ
Offset
PC相対アドレッシングの命令語



rsとrtは計算処理に使われる
Offset でPCからの変化量を指定
例題;次の命令をバイナリ列に直せ
(ただしラベル”loop”はこの命令の6行前にある)
 beq $t1, $t2, loop
op
rs
rt
第13回 計算機アーキテクチャ
Offset
16
例題のプログラム(全体図)

Data segment中に保存用のメモリを定義


lwやswでメモリを読み書きする際には必要
「***:」でアドレスにラベルを付けて領域を確保できる
# Data segment
.data
lb0:
.word 1
# Text segment
.text
.globl main
main:
li
$t1,0
#
t1 = 0
(続く)
第13回 計算機アーキテクチャ
17
例題のプログラム(全体図)
main:
li
$t1,0
#
t1 = 0
li
$t2,0
#
t2 = 0
li
$t3,10
#
t3 = 10
li
$t4,0
#
t4 = 1
li
$s0,0
#
s0 = 0
# Data segment
.data
lb0: .word 1
loop:
add
$s0,$s0,$t2
#
s0 = s0 + t2
la
$t5, lb0
#
t5 = Address of lb0
sw
$s0, 0($t5)
#
Store $s to Memory[t5 + 0]
addi
$t2,$t2,1
#
t2++
slt
$t4,$t3,$t2
#
if(t3 < t2) then t4 = 1
beq
$t1,$t4, loop
#
if(t1 == t4) goto loop
add
$t0,$t3,$zero
#
t0 = t3
jr
$ra
#
end of program
18
19
例題

次のC言語のプログラムをMIPS形式に変換せよ
int a,b;
a = 10;
b = 3 + a * 2;
a,bはメモリ上の領域
レジスタは何を使っても構わない
変数に値が代入される=メモリに書き込まれると考えること
第13回 計算機アーキテクチャ
20
回答欄
# Data segment
.data
a:
.word 1
b:
.word 1
# Text segment
.text
.globl main
main:
第13回 計算機アーキテクチャ
21
演習問題1

次のC言語のプログラムをMIPS形式に変換せよ
int a,b,c;
a = 10;
b = 20;
c = (a - 5) + b * 3;
a,b,cはメモリ上の領域
レジスタは何を使っても構わない
変数に値が代入される=メモリに書き込まれると考えること
第13回 計算機アーキテクチャ
22
回答欄
# Data segment
.data
a:
.word 1
b:
.word 1
c:
.word 1
# Text segment
.text
.globl main
main:
第13回 計算機アーキテクチャ
23
演習問題2

次のC言語のプログラムをMIPS形式に変換せよ
int a,b,t;
a = 10;
b = 0;
for(t = 0;t< 5; t++){
b = b + a * t;
}
a,bはメモリ上の領域とする
変数に値が代入される=メモリに書き込まれると考えること
変数tはレジスタt0に対応させる
他のレジスタは何を使っても構わない
第13回 計算機アーキテクチャ
24
回答欄
# Data segment
.data
a:
.word 1
b:
.word 1
# Text segment
.text
.globl main
main:
第13回 計算機アーキテクチャ