ソフトウェア基礎技術研修

アドレシング・モード
アドレシング・モードとは?
アクセスしたいオブジェクトに対するアドレスの指定方法
(定数,レジスタ,メモリ番地)
例えば,MIPSの加算命令の場合
レジスタ$s2の値と,レジスタ$s3の値を
加算して、レジスタ$s1に格納する
レジスタ・アドレシング
$s1
$s2
$s3
$s4
レジスタ
add $s1, $s2, $s3
プロセッサ
ALU
九州大学工学部電気情報工学科
MIPSのアドレシング・モード
 レジスタ・アドレシング
 レジスタをオペランドとする
 ベース相対アドレシング
 命令中に指定した定数とレジスタの和によって,オペランドが記憶され
ているデータのメモリ番地を表す
 即値アドレシング
 命令中に指定された定数をオペランドとする
 PC相対アドレシング
 PCと命令中に指定した定数との和によって,フェッチする命令のメモリ
番地を表す
 擬似直接アドレシング
 命令中の26ビットとPCの上位ビットを連結することによって,フェッチす
る命令のメモリ番地を表す
九州大学工学部電気情報工学科
レジスタ・アドレシング
レジスタをオペランドとする
例)add $s1, $s2, $s3
プロセッサ
op
rs
rt
rd
・・・ func
レジスタ
$s1
$s2
$s3
$s4
レジスタ
R形式命令
$s1
$s2
$s3
$s4
ALU
九州大学工学部電気情報工学科
ベース相対アドレシング
命令中に指定した定数とレジスタの和によって
オペランドが記憶されているデータのメモリ番地を表す
I形式命令
例) lw $t1, 8 ($s3)
op
$t1
rt
address
主記憶
プロセッサ
レジスタ
アドレス
オフセット
$s1 ベース
$s2
$s3 X
rs
オフセット
X
X+4
X+8
A[0]
A[1]
A[2]
A[99]
32ビットに符号拡張
ベース
レジスタ
+
メモリ番地
九州大学工学部電気情報工学科
即値アドレシング
命令中に指定された定数をオペランドとする
I形式命令
例)addi $s1, $s2, n
op
rs
rt
即値
32ビットに符号拡張
レジスタ
*)定数nは16bit の2の補数表現の符号つき整数
ALU
九州大学工学部電気情報工学科
PC相対アドレシング
PCと命令中に指定した定数との和によって
フェッチする命令のメモリ番地を表す
例) bne $s1, $s2, LableA
(分岐命令の次命令のPC)
PC
I形式
00
op
rs
rt
address
address を符号拡張
+
00
整列化制約: 命令の
番地は常に4の倍数.
分岐先(Label の番地)
00
九州大学工学部電気情報工学科
擬似直接アドレッシング
命令中の26ビットとPCの上位ビットを連結すること
によって,フェッチする命令のメモリ番地を表す
例) j LableA
(ジャンプ命令の次命令のPC)
PC
J形式
分岐先
b31~b28
op
b31~b28
b27~b2
00 整列化制約
address
address
00
九州大学工学部電気情報工学科
MIPSのまとめ
レジスタ
MIPS のレジスタ
レジスタ名
レジスタ番号
用途
$zero
0
$v0~$v1
2~3
関数の返り値
$a0~$a3
4~7
引数用
$t0~$t7
8~15
一時保存用
$s0~$s7
16~23
変数用
$t8~$t9
24~25
一時保存用
$sp
29
スタックポインタ(後述)
不可
$fp
30
フレームポインタ(後述)
不可
$ra
31
戻り番地
不可
定数値 0,不要な結果の破棄
関数呼出時のレジスタ破壊
(NA)
可
不可
可
不可
可
プログラムカウンタ PC: 次に実行する命令の番地を格納.非分岐命令実行ご
とに +4 され,また分岐命令実行時に更新される.
九州大学工学部電気情報工学科
命令形式
命令形式: 命令語のフィールド構成.
 MIPS は命令語を32bit 幅で統一している.
 MIPS の命令形式は,R形式,I形式,J形式の3種類がある.
 どの命令形式かは,op フィールド(命令操作コード)で判別できる.
R形式
I形式
J形式
op
rs
rt
rd
shamt
funct
6bit
5bit
5bit
5bit
5bit
6bit
op
rs
rt
address/immediate
6bit
5bit
5bit
16bit
op
address
6bit
26bit
九州大学工学部電気情報工学科
命令セット
 算術論理演算




加減算命令(R形式,I形式)
比較命令(R形式,I形式)
論理演算命令(R形式,I形式)
シフト命令(R形式)
 データ転送
 メモリロード命令(I形式)
 メモリストア命令(I形式)
 即値ロード命令(I形式)
 分岐
 条件分岐命令(I形式)
 無条件分岐命令(R形式,J形式)
九州大学工学部電気情報工学科
加減算命令(1)
レジスタ±レジスタ → レジスタ
add
sub
addu
subu
$○, $△,
$○, $△,
$○, $△,
$○, $△,
$□
$□
$□
$□
#
#
#
#
$△ +
$△ –
$△ +
$△ –
$□ → $○
$□ → $○
$□ → $○
$□ → $○
 add/sub 命令は,2の補数表現された符号つき整数の加減算
を行う.
 addu/subu 命令は,符号なし整数の加減算を行う.
 add/sub 命令と addu/subu 命令はオーバーフロー発生時の振
る舞いが違う.(計算については同じことを行う.)
九州大学工学部電気情報工学科
加減算命令(2)
R形式
op
rs
rt
rd
shamt
funct
6bit
5bit
5bit
5bit
5bit
6bit
op
rs
rt
rd
shamt
funct
add $○, $△, $□
000000
$△
$□
$○
00000
100000
addu $○, $△, $□
000000
$△
$□
$○
00000
100001
sub $○, $△, $□
000000
$△
$□
$○
00000
100010
subu $○, $△, $□
000000
$△
$□
$○
00000
100011
命令
九州大学工学部電気情報工学科
加減算命令(3)
レジスタ + 定数 → レジスタ
addi
addiu
$○, $△, n
$○, $△, n
# $△ + n → $○
# $△ + n → $○
即値オペランド
 addi/addiu 命令では,定数 n に 16bit の2の補数表現の符号
つき整数(–32768~32767)を指定できる.
 定数 n は 32bit に符号拡張されてから加算される.
 addi 命令と addiu 命令はオーバーフロー発生時の振る舞いが
違う.(計算については同じことを行う.)
 「subi」「subiu」は存在しない.(∵addi,addiu で代用すればよ
い.)
九州大学工学部電気情報工学科
加減算命令(4)
I形式
op
rs
rt
address/immediate
6bit
5bit
5bit
16bit
op
rs
rt
address/immediate
addi $○, $△, n
001000
$△
$○
n
addiu $○, $△, n
001001
$△
$○
n
命令
九州大学工学部電気情報工学科
加減算命令(5)
例) $s1 に 65539 が格納されているとき,
addi
$s0, $s1, 13
00000000 00000001
+) 00000000 00000000
00000000 00000001
addi
00000000 00000011
00000000 00001001
00000000 00001100
$s1: 65539(10)
13(10)
$s0: 65552(10)
00000000 00000011
11111111 11110111
11111111 11111010
$s1: 65539(10)
–13(10)
$s0: 65526(10)
$s0, $s1, –13
00000000 00000001
+) 11111111 11111111
00000000 00000000
九州大学工学部電気情報工学科
比較命令(1)
レジスタ < レジスタ → レジスタ
slt
sltu
$○, $△, $□
$○, $△, $□
# $△ < $□ → $○
# $△ < $□ → $○
レジスタ < 定数 → レジスタ(定数は 32bit に符号拡張)
slti
sltiu
$○, $△, n
$○, $△, n
# $△ < n → $○
# $△ < n → $○
 slt/slti 命令は,第二オペランドと第三オペランドを 2 の補数表現された符
号つき整数とみなして,比較結果を $○ に書き込む.
 sltu/sltiu 命令は,第二オペランドと第三オペランドを符号なし整数とみなし
て,比較結果を $○ に書き込む.
 slti/sltiu 命令では,定数 n は 32bit に符号拡張されてから比較される.
九州大学工学部電気情報工学科
比較命令(2)
R形式
op
rs
rt
rd
shamt
funct
6bit
5bit
5bit
5bit
5bit
6bit
op
rs
rt
rd
shamt
funct
slt $○, $△, $□
000000
$△
$□
$○
00000
101010
sltu $○, $△, $□
000000
$△
$□
$○
00000
101011
命令
九州大学工学部電気情報工学科
比較命令(3)
I形式
op
rs
rt
address/immediate
6bit
5bit
5bit
16bit
op
rs
rt
address/immediate
slti $○, $△, n
001010
$△
$○
n
sltiu $○, $△, n
001011
$△
$○
n
命令
九州大学工学部電気情報工学科
論理演算命令(1)
レジスタ and/or レジスタ → レジスタ
and
or
xor
$○, $△, $□
$○, $△, $□
$○, $△, $□
# $△ & $□ → $○
# $△ | $□ → $○
# $△ ^ $□ → $○
レジスタ and/or 定数 → レジスタ(定数は 32bit にゼロ拡張)
andi
ori
xori
$○, $△, n
$○, $△, n
$○, $△, n
# $△ & n → $○
# $△ | n → $○
# $△ ^ n → $○
九州大学工学部電気情報工学科
論理演算命令(2)
ANDゲート: 入力が全て 1 のときのみ出力が 1.
A
Y
B
A
B
Y
0
0
0
0
1
0
1
0
0
1
1
1
AND演算(&): オペランドのビットごとに AND をとる.
1
1
0
1
1
1
1
0
0
1
0
1
1
0
0
0
1
0
1
0
0
0
0
0
九州大学工学部電気情報工学科
論理演算命令(3)
ORゲート: 入力のいずれかが 1 のときのみ出力が 1.
A
Y
B
A
B
Y
0
0
0
0
1
1
1
0
1
1
1
1
OR演算(|): オペランドのビットごとに OR をとる.
1
1
0
1
1
1
1
0
0
1
0
1
1
0
0
0
1
1
1
1
1
1
1
0
九州大学工学部電気情報工学科
論理演算命令(4)
XORゲート: 2つの入力が異なる値のときのみ出力が 1.
A
Y
B
A
B
Y
0
0
0
0
1
1
1
0
1
1
1
0
XOR演算(^): オペランドのビットごとに XOR をとる.
1
1
0
1
1
1
1
0
0
1
0
1
1
0
0
0
0
1
0
1
1
1
1
0
九州大学工学部電気情報工学科
論理演算命令(5)
R形式
op
rs
rt
rd
shamt
funct
6bit
5bit
5bit
5bit
5bit
6bit
op
rs
rt
rd
shamt
funct
and $○, $△, $□
000000
$△
$□
$○
00000
100100
or $○, $△, $□
000000
$△
$□
$○
00000
100101
xor $○, $△, $□
000000
$△
$□
$○
00000
100110
命令
九州大学工学部電気情報工学科
論理演算命令(6)
I形式
op
rs
rt
address/immediate
6bit
5bit
5bit
16bit
op
rs
rt
address/immediate
andi $○, $△, n
001100
$△
$○
n
ori $○, $△, n
001101
$△
$○
n
xori $○, $△, n
001110
$△
$○
n
命令
九州大学工学部電気情報工学科
シフト命令(1)
レジスタを n ビット論理左右シフト → レジスタ
sll
srl
$○, $△, n
$○, $△, n
# $△ を n ビット論理左シフト → $○
# $△ を n ビット論理右シフト → $○
レジスタを n ビット算術右シフト → レジスタ
sra
$○, $△, n
# $△ を n ビット算術右シフト → $○
九州大学工学部電気情報工学科
シフト命令(2)
n ビット論理シフト演算: n ビット分を左右にずらし,はみ出したビッ
トを捨てて,空いたビットに 0 を補填する.
n ビット左シフト:
0 1 1 1 0 1 1 0
n=2の場合
0 1 1 1 0 1 1 0 0 0
n ビット右シフト:
0 1 1 1 0 1 1 0
n=2の場合
0 0 0 1 1 1 0 1 1 0
九州大学工学部電気情報工学科
シフト命令(3)
n ビット算術右シフト演算: n ビット分を右にずらし,はみ出したビッ
トを捨てて,空いたビットに 最上位ビット(符号ビット) を補填する.
n ビット右シフト:
1 1 1 1 0 1 1 0
n=2の場合
1 1 1 1 1 1 0 1 1 0
九州大学工学部電気情報工学科
シフト命令(4)
R形式
op
rs
rt
rd
shamt
funct
6bit
5bit
5bit
5bit
5bit
6bit
op
rs
rt
rd
shamt
funct
sll $○, $△, n
000000
00000
$△
$○
n
000000
srl $○, $△, n
000000
00000
$△
$○
n
000010
sra $○, $△, n
000000
00000
$△
$○
n
000011
命令
九州大学工学部電気情報工学科
データ転送命令(1)
レジスタ/メモリ間(符号つき)
lw
lh
lhu
lb
lbu
sw
sh
sb
$○,
$○,
$○,
$○,
$○,
$○,
$○,
$○,
n($△)
n($△)
n($△)
n($△)
n($△)
n($△)
n($△)
n($△)
#
#
#
#
#
#
#
#
($△ +
($△ +
($△ +
($△ +
($△ +
$○ →
$○ →
$○ →
n)番地 → $○,1ワード(32bit)
n)番地 → $○,1ハーフワード(16bit)
n)番地 → $○,1ハーフワード(16bit)
n)番地 → $○,1バイト(8bit)
n)番地 → $○,1バイト(8bit)
($△ + n)番地,1ワード(32bit)
($△ + n)番地,1ハーフワード(16bit)
($△ + n)番地,1バイト(8bit)
 オフセット n には,16bit の2の補数表現の整数(–32768~32767)を指定できる.
 オフセット n は 32bit に符号拡張されてからベースレジスタに加算される.
 lw/sw 命令の対象番地は4の倍数,lh/sh 命令の対象番地は2の倍数でなければな
らない.(整列化制約)
 lb/lh 命令では読み込むデータの符号拡張,lbu/lhu 命令ではゼロ拡張が行われる.
九州大学工学部電気情報工学科
データ転送命令(2)
lw/lh/lb/lhu/lbu/sw/sh/sb $○, n($△)
$○
–32768
$△
zzzz
+n
32767
a
b
c
d
lw/sw
a b c d
lh/sh
X X a b
lhu
0 0 a b
lb/sb
X X X a
lbu
0 0 0 a
九州大学工学部電気情報工学科
データ転送命令(3)
I形式
op
rs
rt
address/immediate
6bit
5bit
5bit
16bit
命令
op
rs
rt
address/immediate
lw $○, n($△)
100011
$△
$○
n
sw $○, n($△)
101011
$△
$○
n
lh $○, n($△)
100001
$△
$○
n
lhu $○, n($△)
100101
$△
$○
n
sh $○, n($△)
101001
$△
$○
n
lb $○, n($△)
100000
$△
$○
n
lbu $○, n($△)
100100
$△
$○
n
sb $○, n($△)
101000
$△
$○
n
九州大学工学部電気情報工学科
データ転送命令(4)
即値→レジスタ
lui
$○, n
# $○の上位 16bit に n を格納
# $○の下位 16bit に 0 を格納
$○
n
0000…00
32bit 即値(nm)の転送
lui
$○, n
addi $○, m
lui
ori
$○, n
$○, m
# $○の上位 16bit に n を格納
# $○の下位 16bit に m を格納(符号拡張あり)
# $○の上位 16bit に n を格納
# $○の下位 16bit に m を格納(符号拡張なし)
九州大学工学部電気情報工学科
データ転送命令(5)
I形式
命令
lui $○, n
op
rs
rt
address/immediate
6bit
5bit
5bit
16bit
op
rs
rt
address/immediate
001100
00000
$○
n
九州大学工学部電気情報工学科
分岐命令(1)
j
jal
jr
beq
bne
Label
#
Label
#
$○
#
$△, $□, Label #
$△, $□, Label #
Label に無条件分岐
Label に無条件分岐(関数呼出用)
$○の番地に無条件分岐
$△ = $□ ならば Label に分岐
$△  $□ ならば Label に分岐
 命令によってジャンプできる範囲に違いがある.
j, jal(J形式):擬似直接アドレシング
jr(R形式):レジスタ値をそのままPCに設定
beq, bne(I形式):PC相対アドレシング
九州大学工学部電気情報工学科
分岐命令の守備範囲
00000000
10000000
PC相対アドレシング
(PCを中心に 218 番地の範囲)
20000000
30000000
40000000
50000000
PC
JR命令は全域
60000000
70000000
擬似直接アドレシング
(PCを含むに 228 番地分のページ)
D0000000
E0000000
F0000000
九州大学工学部電気情報工学科
分岐命令(2)
R形式
op
rs
rt
rd
shamt
funct
6bit
5bit
5bit
5bit
5bit
6bit
op
rs
rt
rd
shamt
funct
000000
$○
00000
00000
00000
001000
命令
jr $○
I形式
op
rs
rt
address/immediate
6bit
5bit
5bit
16bit
op
rs
rt
address/immediate
beq $△, $□, Label
000100
$△
$□
d
bne $△, $□, Label
000101
$△
$□
d
命令
九州大学工学部電気情報工学科
分岐命令(3)
J形式
op
address
6bit
26bit
命令
op
immediate
j Label
000010
ラベル Label の番地のビット27~2
jal Label
000011
ラベル Label の番地のビット27~2
擬似直接アドレッシング: j, jal 命令の分岐先番地
PC
J形式
分岐先
b31~b28
j/jal
b31~b28
整列化制約
b27~b0
address
address
00
九州大学工学部電気情報工学科
アドレシングモード
アドレシングモード: 機械語における番地指定,さらにはオペラン
ドの表現方法.
アドレシングモード
形式
説明
レジスタアドレシング
R
「$○」と直接レジスタを指定する形式. add, sub,
and, or 命令など.
ベース相対アドレシング
I
「n($○)」とベースレジスタとオフセットで主記憶の
番地を指定する形式.lw, sw 命令など.
即値アドレシング
I
「n」と定数を指定する形式.addi, subi, andi, ori 命
令など.
擬似直接アドレシング
J
命令の番地を指定する形式.アセンブリ言語では
ラベル名として表される.j, jal 命令など.
PC相対アドレシング
I
命令の番地を指定する形式.アセンブリ言語では,
擬似直接アドレシングと同様にラベル名として表さ
れるが,命令表現の形式と意味は異なる. beq,
bne 命令など.
九州大学工学部電気情報工学科
R形式(1)
R形式
op
rs
rt
rd
shamt
funct
6bit
5bit
5bit
5bit
5bit
6bit
命令
op
rs
rt
rd
shamt
funct
add $○, $△, $□
000000
$△
$□
$○
00000
100000
addu $○, $△, $□
000000
$△
$□
$○
00000
100001
sub $○, $△, $□
000000
$△
$□
$○
00000
100010
subu $○, $△, $□
000000
$△
$□
$○
00000
100011
slt $○, $△, $□
000000
$△
$□
$○
00000
101010
sltu $○, $△, $□
000000
$△
$□
$○
00000
101011
and $○, $△, $□
000000
$△
$□
$○
00000
100100
or $○, $△, $□
000000
$△
$□
$○
00000
100101
xor $○, $△, $□
000000
$△
$□
$○
00000
100110
九州大学工学部電気情報工学科
R形式(2)
R形式
op
rs
rt
rd
shamt
funct
6bit
5bit
5bit
5bit
5bit
6bit
命令
op
rs
rt
rd
shamt
funct
sll $○, $△, n
000000
00000
$△
$○
n
000000
srl $○, $△, n
000000
00000
$△
$○
n
000010
sra $○, $△, n
000000
00000
$△
$○
n
000011
jr $○
000000
$○
00000
00000
00000
001000
九州大学工学部電気情報工学科
I形式(1)
I形式
op
rs
rt
immediate
6bit
5bit
5bit
16bit
命令
op
rs
rt
immediate
addi $○, $△, n
001000
$△
$○
n
addiu $○, $△, n
001001
$△
$○
n
slti $○, $△, n
001010
$△
$○
n
sltiu $○, $△, n
001011
$△
$○
n
lui $○, $△, n
001111
$△
$○
n
andi $○, $△, n
001100
$△
$○
n
ori $○, $△, n
001101
$△
$○
n
xori $○, $△, n
001110
$△
$○
n
九州大学工学部電気情報工学科
I形式(2)
I形式
op
rs
rt
address
6bit
5bit
5bit
16bit
命令
op
rs
rt
immediate
lw $○, n($△)
100011
$△
$○
n
sw $○, n($△)
101011
$△
$○
n
lh $○, n($△)
100001
$△
$○
n
lhu $○, n($△)
100101
$△
$○
n
sh $○, n($△)
101001
$△
$○
n
lb $○, n($△)
100000
$△
$○
n
lbu $○, n($△)
100100
$△
$○
n
sb $○, n($△)
101000
$△
$○
n
九州大学工学部電気情報工学科
I形式(3)
op
rs
rt
address
6bit
5bit
5bit
16bit
I形式
命令
op
rs
rt
address
beq $△, $□, Label
000100
$△
$□
d
bne $△, $□, Label
000101
$△
$□
d
九州大学工学部電気情報工学科
 Created by Tsuneo Nakanishi, 2002-2004 (R1.00)
 Updated by Koji Inoue, 2005 (R1.01)
 Updated by Koji Inoue, 2007 (R1.02)
九州大学工学部電気情報工学科