際際滷

際際滷Share a Scribd company logo
|臼寄僥 垢僥何 C亠岑嬬?砂腎垢僥親
2015定業 5セメスタ`?クラスD
麻C垢僥
寄僥垪秤鷽苫а仂真
R 風令
http://www.ic.is.tohoku.ac.jp/~swk/lecture/
7. MIPSの凋綜と嘛 D 蛍瓷?ジャンプ?v方柵竃し
(縮親7嫗)
2R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
蛍瓷?ジャンプ凋綜
訳周猟やRり卦し猟などをgFするには凋綜のg佩の崙囮
が駅勣
(C冱Z)
(MIPSアセンブリ冱Z)
if (x == y) {
x = x + 1;
}
...
bne $s0, $s1, L1 # $s0 』 $s1 ならば L1 へ蛍瓷
addu $s0, $s0, 1
L1: ...
ただし篳 x, y の坪否がそれぞれレジスタ
s0, s1 に崔かれているとする
ラベル
3R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
Y創: 麼な蛍瓷凋綜曳^凋綜
凋綜 h苧
beq $a, $b, L $a = $b ならばラベル L へ蛍瓷 (branch on equal)
bne $a, $b, L $a 』$b ; (branch on not equal)
slt $c, $a, $b 憲催つきで $a < $b ならば $c ○ 1; さもなくば $c ○ 0
sltu $c, $a, $b 憲催oしで $a < $b ならば $c ○ 1; さもなくば $c ○ 0
sgt $c, $a, $b 憲催つきで $a > $b ; (set on greater than)
sgtu $c, $a, $b 憲催oしで $a > $b ; (set on greater than unsigned)
sle $c, $a, $b 憲催つきで $aQ$b ; (set on less than or equal)
sleu $c, $a, $b 憲催oしで $aQ$b ; (set on less than or equal unsigned)
sge $c, $a, $b 憲催つきで $aR$b ; (set on greater than or equal)
sgeu $c, $a, $b 憲催oしで $aR$b ; (set on greater than or equal unsigned)
?slt, sltu 參翌の曳^凋綜はマクロ凋綜
4R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
箭: if C else 猟
if (x < y) {
x = x + 1;
} else {
x = x + 2;
}
...
slt $t0, $s0, $s1
beq $t0, $zero, L1 # $s0 < $s1 でないならL1へ蛍瓷
addu $s0, $s0, 1
j L2 # o訳周に L2 へジャンプ
L1: addu $s0, $s0, 2
L2: ...
(C冱Z)
(MIPSアセンブリ冱Z)
ただし篳 x, y の坪否がそれぞれレジスタ
s0, s1 に崔かれているとする
5R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
箭: while猟
while (x < y) {
x = x + 1;
}
L1: slt $t0, $s0, $s1 # $t0 ○ (x < y) ? 1 : 0
beq $t0, $zero, L2 # 曳^Y惚が裡┘璽蹌なら L2 へ
addu $s0, $s0, 1 # x = x + 1
j L1
L2: ...
(C冱Z)
(MIPSアセンブリ冱Z)
ただし篳 x, y の坪否がそれぞれレジスタ
s0, s1 に崔かれているとする
6R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
v方柵竃し
int func(int a, int b) {
a = a + b;
return a;
}
int main() {
int x, y, z;
x = func(5, 1);
y = func(8, 2);
z = func(x, y);
...
}
(C冱Z)
ただしv方main坪の篳 x, y, z の坪
否がそれぞれレジスタ s0, s1, s2 に崔か
れているとする
v方柵竃しはgに j 凋綜でジャンプ
するだけではgFできない
圷の了崔にって栖る駅勣がある
7R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
v方柵竃しのg佩箭
func: addu $a0, $a0, $a1
move $v0, $a0 # り、砲 $v0, $v1 を聞う
jr $ra # $ra のアドレスへジャンプ
main: # 兜豚晒福待
li $a0, 5 # 哈方には $a0゛$a3 を聞う
li $a1, 1
jal func # func へジャンプしり枠アドレスを $ra へ
move $s0, $v0
li $a0, 8
li $a1, 2
jal func
move $s1, $v0
move $a0, $s0
move $a1, $s1
jal func
move $s2, $v0
(MIPSアセンブリ冱Z)
8R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
Y創: 麼なジャンプ凋綜
凋綜 h苧
j L ラベル L へジャンプ (jump)
jal L ラベル L へジャンプすると揖rに肝の凋綜アド
レスを $ra ($31) に隠贋
(jump and link)
jr $r レジスタ r に隠贋されたアドレスへジャンプ
(jump register)
9R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
蛍瓷?ジャンプ凋綜の嘛
メモリ
32ビットALU
32x32ビット
レジスタ
PC
凋綜デコ`ダ
アドレス32ビット
デ`タ8, 16, 32ビット
肝PC麻
崙囮指揃
mux
mux
(1) レジスタ
iみ竃し
(2) 蛍瓷登協
(3) 蛍瓷枠アドレス麻
10R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
歌深: 仝肝PC麻々のI尖
蛍瓷訳周が撹羨していないなら
? PC + 4
撹羨しているなら
? 訳周蛍瓷凋綜のとき:
PC + 4 〜 協方フィ`ルド
? ジャンプ凋綜のとき:
PC の和了28ビットを 4 〜 協方フィ`ルド で崔Q
☆ 凋綜Lは械に4バイトなので蛍瓷?ジャンプ枠のアドレスは駅ず
4の蔚方になる
☆ このvxでは仝W决蛍瓷々はoする
11R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
MIPS の凋綜フォ`マット
MIPSの凋綜は児云議に參和の3フォ`マットに蛍される
31 26 25 21 20 16 15 11 10 6 5 0
funcOP rs rt rd シフト楚
31 26 25 21 20 16 15 0
OP rs rt 協方┝ / アドレスオフセット
31 26 25 0
OP 協方┘献礇鵐從硲
R侘塀
I侘塀
J侘塀
レジスタg處麻シフト凋綜┝ー罎盧むなど
レジスタ-軸g處麻ロ`ド?ストア蛍瓷凋綜など
ジャンプ凋綜など
12R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
gHのv方柵竃
念のv方柵竃の箭はgにgむように派虫に恬られた箭で
あるgHには參和のようなことを深えなくてはならない
これらは仝スタック々と柵ばれるデ`タ夛をメモリ坪にBする
ことで函りQう
? 柵び竃されたv方はどのレジスタを聞えばよいのか? 蒙に
柵竃されたv方が柵竃し圷のレジスタを篤欧靴覆い燭瓩砲
どうすればよいのか?
?t0゛t9 は柵び竃し箸スタックに曜閲
?s0゛s8 は柵び竃された箸スタックに曜閲
? $ra は匯つしかないがv方を謹嶷で柵び竃す栽は?
?スタックに曜閲
? 4つを階える哈方の鞭け局しは?
?スタックで鞭け局す
13R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
スタックメモリ
0x8020
0x8010
0x8000
$sp 0x8020
0x8020
0x8010
0x800c
0x8000
$sp 0x800c $sp 0x8020
int f() {
g();
}
f() の
スタック
フレ`ム
g() の
スタック
フレ`ム
f() の
スタック
フレ`ム 0x8020
0x8010
0x8000
f() の
スタック
フレ`ム
push pop
addu $sp, $sp, -20 addu $sp, $sp, 20
14R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
灸侏議なメモリマップ
スタックポインタ
($sp)
スタック
┥嵋篳
詰了アドレス◎
互了アドレス●
プログラム
寄囃篳?床議篳吉
int global_var;
void func() {
int a, b;
static int static_var;
...
}
int main() {
int x, y;
int *p = (int *) malloc(256);
}
啜調_隠I囃
グロ`バルポインタ
($gp)
15R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
(歌深) バッファ?オ`バラン
int getnum() {
char buf[8];
gets(buf); /* 秘薦猟忖双を塘双 buf に隠贋 */
return atoi(buf); /* 猟忖双 ★ 屁方 */
}
buf
return
address
詰了アドレス◎
互了アドレス●
getNum() の
スタックフレ`ム
sp
このような}があるのでgets,
scanf のように塘双Lを峺協せ
ずに秘薦をiみzむv方は聞
喘が容Xされない
16R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
箭}(1)
參和に幣すプログラムはある、2 M方で燕したHにその嶄に
根まれる仝1々のビットの方を方えるものである
lw $s0, 0($s1)
move $t0, $zero
L1: and $t1, $s0, 1
addu $t0, $t0, $t1
srl $s0, $s0, 1
bne $s0, $zero, L1
sw $t0, 0($s1)
レジスタ $s1 の坪否が峺すアドレスに13 が鯉{されている彜
Bでこのプログラムをg佩した
(1) g佩K阻rのレジスタ $s0$t0$t1 の坪否を幣せ
(2) ラベルL1 で峺される凋綜は採指g佩されるか基えよ
17R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
盾基箭
lw $s0, 0($s1)
move $t0, $zero
L1:
and $t1, $s0, 1
addu $t0, $t0, $t1
srl $s0, $s0, 1
bne $s0, $zero, L1
sw $t0, 0($s1)
(1) $s0 は麻鵑韮1ビットずつシフトして佩き恷瘁は 0 になる
$t0 は恷KY惚でビット1の方になるよって 3
$t1 は麻余嶄で聞喘しル`プごとに $s0 の恷和了ビットを函
り竃すのに聞われる恷瘁は 1 になる
(2) 4指
$s0 = mem[$s1 + 0]; /* = 12 */
$t0 = 0;
do {
$t1 = $s0 & 1;
$t0 = $t0 + $t1;
$s0 = $s0 >> 1;
} while ($s0 != 0);
mem[$s1 + 0] = $t0;
18R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
箭}(2)
move $v0, $zero
L1: lw $t0, 0($s0) ´ (☆1)
sltu $t1, $v0, $t0
beq $t1, $zero, L2
move $v0, $t0 ´ (☆2)
L2: addu $s0, $s0, 4
addu $s1, $s1, -1
bne $s1, $zero, L1
參和に幣すプログラムは塘双の嶄から恷寄、鯡修垢發里任△襭
いま憲催なし屁方 (4バイト) がメモリ貧のアドレスがえる圭鬚
10, 20, 3, 22, 5
のにKんでおりこの塘双の枠^アドレスを $s0, 塘双L 5 を $s1 に嚥えて
このプログラムをg佩した
(1) プログラムのg佩がKわったr泣でのレジスタ $s1, $v0, $t0, $t1 の坪否を
幣せ
(2) ☆1 式び ☆2 の凋綜がそれぞれ採指g佩されるか基えよ
19R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
盾基箭
move $v0, $zero
L1: lw $t0, 0($s0)
sltu $t1, $v0, $t0
beq $t1, $zero, L2
move $v0, $t0
L2: addu $s0, $s0, 4
addu $s1, $s1, -1
bne $s1, $zero, L1
$v0 = 0;
do {
$t0 = mem[$s0 + 0];
if ($v0 < $t0) {
$v0 = $t0;
}
$s0 = $s0 + 4;
$s1 = $s1 C 1;
} while ($s1 != 0)
(1) $s1はI尖すべき塘双勣殆の火り方でK阻rは0になる$v0 はそのr
泣までの恷寄、魃3屬垢襯譽献好燭韮K阻rは畠悶の恷寄22になる
$t0 はiみ竃した塘双勣殆を鯉{するレジスタでK阻rは恷瘁の勣殆 5
になる$t1 はそれまでの恷寄、iみ竃した塘双勣殆より弌さければ
1になるレジスタで(これが0のときはL2に蛍瓷するため恷寄、慮仟が
スキップされる)恷瘁のル`プでは 0 になる
(2) ☆1 は塘双Lが5なので5指g佩される☆2 は恷寄、鮓仟するとき
のみg佩されるため3指g佩される
20R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
箭}(3)
move $s2, $zero
L1: lw $t0, 0($s0)
addu $s1, $s1, -1
addu $s2, $s2, $t0
addu $s0, $s0, 4
bne $s1, $zero, L1
參和に幣すプログラムは塘双の坪否のt才をレジスタ $s2 に卦すものである
いま屁方 (4バイト) の塘双の枠^アドレスをレジスタ $s0 に塘双L 1000 を
レジスタ $s1 に嚥えこのプログラムをg佩した
(1) プログラムのg佩がKわったr泣でのレジスタ $s1 の坪否を幣せ
(2) ラベル L1 で峺されるlw凋綜は採指g佩されるか基えよ
(3) このプログラム畠悶でいくつの凋綜がg佩されるか基えよ(揖じ凋綜が
2 指g佩される栽2 凋綜と方える)
21R 風令 (|臼寄僥): 麻C垢僥 2015 (7)
盾基箭
(1) $s1はI尖すべき塘双勣殆の火り方でK阻rは0になる
(2) 塘双勣殆をiみ竃す凋綜で塘双L蛍の1000指g佩される
(3) 恷兜の move 凋綜は1指だけ麿の5凋綜は1000指g佩され
るので栽5001凋綜がg佩される

More Related Content

What's hot (20)

PDF
雨壊沿嗔の氏茶膿氏、ジャクソン更夛蹐(念園)
umidori
?
PDF
遺冱囂讐楼氏3
odenhadengaku
?
PPT
5 Info Theory
melvincabatuan
?
PDF
Scala 兜伉宀が致弥のa}を Scala で深えてみた
Kazuyuki TAKASE
?
PDF
Scala 兜伉宀が Hom 痕返を Scala で深えてみた
Kazuyuki TAKASE
?
PDF
やさしく岑りたい遺冱囂
uru nru
?
PDF
Startprintf_2013May18
Shigekazu Takei
?
PDF
^Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
Masahiro Sakai
?
PDF
120919 kyushu
Hiroshi Sato
?
PDF
讐恙遺秘壇
Tokai University
?
PDF
C++ lecture-2
sunaemon
?
PDF
暴を SKI にBれてって
Susisu
?
PDF
2011定11埖11晩
nukaemon
?
PPTX
茶膿氏仁籾
寔疏 梳笥
?
PDF
VS茶氏 .NET Framework 秘T
kamukiriri
?
PDF
永霞岳鞄看稼茶膿氏2-方、販鍔崛
尖 弌爽
?
PDF
Implicit Explicit Scala
Kota Mizushima
?
PDF
Implicit Implicit Scala
Kota Mizushima
?
PDF
堰温恰艶について
Moriyoshi Koizumi
?
雨壊沿嗔の氏茶膿氏、ジャクソン更夛蹐(念園)
umidori
?
遺冱囂讐楼氏3
odenhadengaku
?
5 Info Theory
melvincabatuan
?
Scala 兜伉宀が致弥のa}を Scala で深えてみた
Kazuyuki TAKASE
?
Scala 兜伉宀が Hom 痕返を Scala で深えてみた
Kazuyuki TAKASE
?
やさしく岑りたい遺冱囂
uru nru
?
Startprintf_2013May18
Shigekazu Takei
?
^Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
Masahiro Sakai
?
120919 kyushu
Hiroshi Sato
?
讐恙遺秘壇
Tokai University
?
C++ lecture-2
sunaemon
?
暴を SKI にBれてって
Susisu
?
2011定11埖11晩
nukaemon
?
茶膿氏仁籾
寔疏 梳笥
?
VS茶氏 .NET Framework 秘T
kamukiriri
?
永霞岳鞄看稼茶膿氏2-方、販鍔崛
尖 弌爽
?
Implicit Explicit Scala
Kota Mizushima
?
Implicit Implicit Scala
Kota Mizushima
?
堰温恰艶について
Moriyoshi Koizumi
?

Viewers also liked (20)

PDF
CMSI麻親僥室g蒙A(3) OpenMPの児A
Computational Materials Science Initiative
?
PDF
Spanish_AdSenseOnlineOverview_121103_ps
Natura
?
PPTX
La vida
viviramicasta
?
PDF
A Visys └ especialista em solu??es para sua Empresa! Voc┷ quer fazer a difere...
Sonia Fernandes Bogo
?
PDF
kagami_comput2015_8
swkagami
?
PDF
kagami_comput2016_10
swkagami
?
PDF
CMSI麻親僥室g蒙A (2015) 及2指 MPIの児A
Computational Materials Science Initiative
?
PDF
kagami_comput2016_11
swkagami
?
PDF
kagami_comput2015_1
swkagami
?
PDF
kagami_comput2016_12
swkagami
?
PDF
kagami_comput2016_13
swkagami
?
PDF
kagami_comput2015_12
swkagami
?
PDF
kagami_comput2016_08
swkagami
?
PDF
kagami_comput2016_06
swkagami
?
PDF
kagami_comput2016_09
swkagami
?
PDF
kagami_comput2016_05
swkagami
?
PDF
kagami_comput2016_03
swkagami
?
PDF
kagami_comput2016_04
swkagami
?
PDF
kagami_comput2015_13
swkagami
?
PDF
kagami_comput2015_14
swkagami
?
CMSI麻親僥室g蒙A(3) OpenMPの児A
Computational Materials Science Initiative
?
Spanish_AdSenseOnlineOverview_121103_ps
Natura
?
A Visys └ especialista em solu??es para sua Empresa! Voc┷ quer fazer a difere...
Sonia Fernandes Bogo
?
kagami_comput2015_8
swkagami
?
kagami_comput2016_10
swkagami
?
CMSI麻親僥室g蒙A (2015) 及2指 MPIの児A
Computational Materials Science Initiative
?
kagami_comput2016_11
swkagami
?
kagami_comput2015_1
swkagami
?
kagami_comput2016_12
swkagami
?
kagami_comput2016_13
swkagami
?
kagami_comput2015_12
swkagami
?
kagami_comput2016_08
swkagami
?
kagami_comput2016_06
swkagami
?
kagami_comput2016_09
swkagami
?
kagami_comput2016_05
swkagami
?
kagami_comput2016_03
swkagami
?
kagami_comput2016_04
swkagami
?
kagami_comput2015_13
swkagami
?
kagami_comput2015_14
swkagami
?
Ad

Similar to kagami_comput2015_7 (20)

PDF
kagamicomput201707
swkagami
?
PDF
kagami_comput2015_6
swkagami
?
PDF
kagamicomput201701
swkagami
?
PDF
kagamicomput201710
swkagami
?
PDF
kagami_comput2016_01
swkagami
?
PDF
kagamicomput201712
swkagami
?
PDF
V6 unix in okinawa
magoroku Yamamoto
?
PDF
鉛鉛厩馨秘壇
MITSUNARI Shigeo
?
PDF
kagamicomput201711
swkagami
?
PDF
kagami_comput2015_11
swkagami
?
PDF
kagamicomput201801
swkagami
?
PDF
プログラミングロボットを喘いたオンライン穩弛佑緑距僥楼g樹
秤I尖僥氏 秤鵐轡好謄狃毛溜T氏
?
PDF
kagamicomput201714
swkagami
?
PDF
kagami_comput2016_14
swkagami
?
PDF
kagamicomput201811
swkagami
?
PDF
閣6で干鴛意?何蛍癖喘?@A
7shi
?
PDF
kagamicomput201812
swkagami
?
PDF
[xDNCL] 塘下Y創
Ryota Nakamura
?
PPTX
20巓Wれ
ryos36
?
PDF
d-kami x86-1
Daisuke Kamikawa
?
kagamicomput201707
swkagami
?
kagami_comput2015_6
swkagami
?
kagamicomput201701
swkagami
?
kagamicomput201710
swkagami
?
kagami_comput2016_01
swkagami
?
kagamicomput201712
swkagami
?
V6 unix in okinawa
magoroku Yamamoto
?
鉛鉛厩馨秘壇
MITSUNARI Shigeo
?
kagamicomput201711
swkagami
?
kagami_comput2015_11
swkagami
?
kagamicomput201801
swkagami
?
プログラミングロボットを喘いたオンライン穩弛佑緑距僥楼g樹
秤I尖僥氏 秤鵐轡好謄狃毛溜T氏
?
kagamicomput201714
swkagami
?
kagami_comput2016_14
swkagami
?
kagamicomput201811
swkagami
?
閣6で干鴛意?何蛍癖喘?@A
7shi
?
kagamicomput201812
swkagami
?
[xDNCL] 塘下Y創
Ryota Nakamura
?
20巓Wれ
ryos36
?
d-kami x86-1
Daisuke Kamikawa
?
Ad

More from swkagami (16)

PDF
kagamicomput201814
swkagami
?
PDF
kagamicomput201813
swkagami
?
PDF
kagamicomput201810
swkagami
?
PDF
kagamicomput201809
swkagami
?
PDF
kagamicomput201808
swkagami
?
PDF
kagamicomput201805
swkagami
?
PDF
kagamicomput201804
swkagami
?
PDF
kagamicomput201803
swkagami
?
PDF
kagamicomput201802
swkagami
?
PDF
kagamicomput201713
swkagami
?
PDF
kagamicomput201709
swkagami
?
PDF
kagamicomput201708
swkagami
?
PDF
kagamicomput201705
swkagami
?
PDF
kagamicomput201704
swkagami
?
PDF
kagamicomput201703
swkagami
?
PDF
kagamicomput201702
swkagami
?
kagamicomput201814
swkagami
?
kagamicomput201813
swkagami
?
kagamicomput201810
swkagami
?
kagamicomput201809
swkagami
?
kagamicomput201808
swkagami
?
kagamicomput201805
swkagami
?
kagamicomput201804
swkagami
?
kagamicomput201803
swkagami
?
kagamicomput201802
swkagami
?
kagamicomput201713
swkagami
?
kagamicomput201709
swkagami
?
kagamicomput201708
swkagami
?
kagamicomput201705
swkagami
?
kagamicomput201704
swkagami
?
kagamicomput201703
swkagami
?
kagamicomput201702
swkagami
?

kagami_comput2015_7

  • 1. |臼寄僥 垢僥何 C亠岑嬬?砂腎垢僥親 2015定業 5セメスタ`?クラスD 麻C垢僥 寄僥垪秤鷽苫а仂真 R 風令 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ 7. MIPSの凋綜と嘛 D 蛍瓷?ジャンプ?v方柵竃し (縮親7嫗)
  • 2. 2R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 蛍瓷?ジャンプ凋綜 訳周猟やRり卦し猟などをgFするには凋綜のg佩の崙囮 が駅勣 (C冱Z) (MIPSアセンブリ冱Z) if (x == y) { x = x + 1; } ... bne $s0, $s1, L1 # $s0 』 $s1 ならば L1 へ蛍瓷 addu $s0, $s0, 1 L1: ... ただし篳 x, y の坪否がそれぞれレジスタ s0, s1 に崔かれているとする ラベル
  • 3. 3R 風令 (|臼寄僥): 麻C垢僥 2015 (7) Y創: 麼な蛍瓷凋綜曳^凋綜 凋綜 h苧 beq $a, $b, L $a = $b ならばラベル L へ蛍瓷 (branch on equal) bne $a, $b, L $a 』$b ; (branch on not equal) slt $c, $a, $b 憲催つきで $a < $b ならば $c ○ 1; さもなくば $c ○ 0 sltu $c, $a, $b 憲催oしで $a < $b ならば $c ○ 1; さもなくば $c ○ 0 sgt $c, $a, $b 憲催つきで $a > $b ; (set on greater than) sgtu $c, $a, $b 憲催oしで $a > $b ; (set on greater than unsigned) sle $c, $a, $b 憲催つきで $aQ$b ; (set on less than or equal) sleu $c, $a, $b 憲催oしで $aQ$b ; (set on less than or equal unsigned) sge $c, $a, $b 憲催つきで $aR$b ; (set on greater than or equal) sgeu $c, $a, $b 憲催oしで $aR$b ; (set on greater than or equal unsigned) ?slt, sltu 參翌の曳^凋綜はマクロ凋綜
  • 4. 4R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 箭: if C else 猟 if (x < y) { x = x + 1; } else { x = x + 2; } ... slt $t0, $s0, $s1 beq $t0, $zero, L1 # $s0 < $s1 でないならL1へ蛍瓷 addu $s0, $s0, 1 j L2 # o訳周に L2 へジャンプ L1: addu $s0, $s0, 2 L2: ... (C冱Z) (MIPSアセンブリ冱Z) ただし篳 x, y の坪否がそれぞれレジスタ s0, s1 に崔かれているとする
  • 5. 5R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 箭: while猟 while (x < y) { x = x + 1; } L1: slt $t0, $s0, $s1 # $t0 ○ (x < y) ? 1 : 0 beq $t0, $zero, L2 # 曳^Y惚が裡┘璽蹌なら L2 へ addu $s0, $s0, 1 # x = x + 1 j L1 L2: ... (C冱Z) (MIPSアセンブリ冱Z) ただし篳 x, y の坪否がそれぞれレジスタ s0, s1 に崔かれているとする
  • 6. 6R 風令 (|臼寄僥): 麻C垢僥 2015 (7) v方柵竃し int func(int a, int b) { a = a + b; return a; } int main() { int x, y, z; x = func(5, 1); y = func(8, 2); z = func(x, y); ... } (C冱Z) ただしv方main坪の篳 x, y, z の坪 否がそれぞれレジスタ s0, s1, s2 に崔か れているとする v方柵竃しはgに j 凋綜でジャンプ するだけではgFできない 圷の了崔にって栖る駅勣がある
  • 7. 7R 風令 (|臼寄僥): 麻C垢僥 2015 (7) v方柵竃しのg佩箭 func: addu $a0, $a0, $a1 move $v0, $a0 # り、砲 $v0, $v1 を聞う jr $ra # $ra のアドレスへジャンプ main: # 兜豚晒福待 li $a0, 5 # 哈方には $a0゛$a3 を聞う li $a1, 1 jal func # func へジャンプしり枠アドレスを $ra へ move $s0, $v0 li $a0, 8 li $a1, 2 jal func move $s1, $v0 move $a0, $s0 move $a1, $s1 jal func move $s2, $v0 (MIPSアセンブリ冱Z)
  • 8. 8R 風令 (|臼寄僥): 麻C垢僥 2015 (7) Y創: 麼なジャンプ凋綜 凋綜 h苧 j L ラベル L へジャンプ (jump) jal L ラベル L へジャンプすると揖rに肝の凋綜アド レスを $ra ($31) に隠贋 (jump and link) jr $r レジスタ r に隠贋されたアドレスへジャンプ (jump register)
  • 9. 9R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 蛍瓷?ジャンプ凋綜の嘛 メモリ 32ビットALU 32x32ビット レジスタ PC 凋綜デコ`ダ アドレス32ビット デ`タ8, 16, 32ビット 肝PC麻 崙囮指揃 mux mux (1) レジスタ iみ竃し (2) 蛍瓷登協 (3) 蛍瓷枠アドレス麻
  • 10. 10R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 歌深: 仝肝PC麻々のI尖 蛍瓷訳周が撹羨していないなら ? PC + 4 撹羨しているなら ? 訳周蛍瓷凋綜のとき: PC + 4 〜 協方フィ`ルド ? ジャンプ凋綜のとき: PC の和了28ビットを 4 〜 協方フィ`ルド で崔Q ☆ 凋綜Lは械に4バイトなので蛍瓷?ジャンプ枠のアドレスは駅ず 4の蔚方になる ☆ このvxでは仝W决蛍瓷々はoする
  • 11. 11R 風令 (|臼寄僥): 麻C垢僥 2015 (7) MIPS の凋綜フォ`マット MIPSの凋綜は児云議に參和の3フォ`マットに蛍される 31 26 25 21 20 16 15 11 10 6 5 0 funcOP rs rt rd シフト楚 31 26 25 21 20 16 15 0 OP rs rt 協方┝ / アドレスオフセット 31 26 25 0 OP 協方┘献礇鵐從硲 R侘塀 I侘塀 J侘塀 レジスタg處麻シフト凋綜┝ー罎盧むなど レジスタ-軸g處麻ロ`ド?ストア蛍瓷凋綜など ジャンプ凋綜など
  • 12. 12R 風令 (|臼寄僥): 麻C垢僥 2015 (7) gHのv方柵竃 念のv方柵竃の箭はgにgむように派虫に恬られた箭で あるgHには參和のようなことを深えなくてはならない これらは仝スタック々と柵ばれるデ`タ夛をメモリ坪にBする ことで函りQう ? 柵び竃されたv方はどのレジスタを聞えばよいのか? 蒙に 柵竃されたv方が柵竃し圷のレジスタを篤欧靴覆い燭瓩砲 どうすればよいのか? ?t0゛t9 は柵び竃し箸スタックに曜閲 ?s0゛s8 は柵び竃された箸スタックに曜閲 ? $ra は匯つしかないがv方を謹嶷で柵び竃す栽は? ?スタックに曜閲 ? 4つを階える哈方の鞭け局しは? ?スタックで鞭け局す
  • 13. 13R 風令 (|臼寄僥): 麻C垢僥 2015 (7) スタックメモリ 0x8020 0x8010 0x8000 $sp 0x8020 0x8020 0x8010 0x800c 0x8000 $sp 0x800c $sp 0x8020 int f() { g(); } f() の スタック フレ`ム g() の スタック フレ`ム f() の スタック フレ`ム 0x8020 0x8010 0x8000 f() の スタック フレ`ム push pop addu $sp, $sp, -20 addu $sp, $sp, 20
  • 14. 14R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 灸侏議なメモリマップ スタックポインタ ($sp) スタック ┥嵋篳 詰了アドレス◎ 互了アドレス● プログラム 寄囃篳?床議篳吉 int global_var; void func() { int a, b; static int static_var; ... } int main() { int x, y; int *p = (int *) malloc(256); } 啜調_隠I囃 グロ`バルポインタ ($gp)
  • 15. 15R 風令 (|臼寄僥): 麻C垢僥 2015 (7) (歌深) バッファ?オ`バラン int getnum() { char buf[8]; gets(buf); /* 秘薦猟忖双を塘双 buf に隠贋 */ return atoi(buf); /* 猟忖双 ★ 屁方 */ } buf return address 詰了アドレス◎ 互了アドレス● getNum() の スタックフレ`ム sp このような}があるのでgets, scanf のように塘双Lを峺協せ ずに秘薦をiみzむv方は聞 喘が容Xされない
  • 16. 16R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 箭}(1) 參和に幣すプログラムはある、2 M方で燕したHにその嶄に 根まれる仝1々のビットの方を方えるものである lw $s0, 0($s1) move $t0, $zero L1: and $t1, $s0, 1 addu $t0, $t0, $t1 srl $s0, $s0, 1 bne $s0, $zero, L1 sw $t0, 0($s1) レジスタ $s1 の坪否が峺すアドレスに13 が鯉{されている彜 Bでこのプログラムをg佩した (1) g佩K阻rのレジスタ $s0$t0$t1 の坪否を幣せ (2) ラベルL1 で峺される凋綜は採指g佩されるか基えよ
  • 17. 17R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 盾基箭 lw $s0, 0($s1) move $t0, $zero L1: and $t1, $s0, 1 addu $t0, $t0, $t1 srl $s0, $s0, 1 bne $s0, $zero, L1 sw $t0, 0($s1) (1) $s0 は麻鵑韮1ビットずつシフトして佩き恷瘁は 0 になる $t0 は恷KY惚でビット1の方になるよって 3 $t1 は麻余嶄で聞喘しル`プごとに $s0 の恷和了ビットを函 り竃すのに聞われる恷瘁は 1 になる (2) 4指 $s0 = mem[$s1 + 0]; /* = 12 */ $t0 = 0; do { $t1 = $s0 & 1; $t0 = $t0 + $t1; $s0 = $s0 >> 1; } while ($s0 != 0); mem[$s1 + 0] = $t0;
  • 18. 18R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 箭}(2) move $v0, $zero L1: lw $t0, 0($s0) ´ (☆1) sltu $t1, $v0, $t0 beq $t1, $zero, L2 move $v0, $t0 ´ (☆2) L2: addu $s0, $s0, 4 addu $s1, $s1, -1 bne $s1, $zero, L1 參和に幣すプログラムは塘双の嶄から恷寄、鯡修垢發里任△襭 いま憲催なし屁方 (4バイト) がメモリ貧のアドレスがえる圭鬚 10, 20, 3, 22, 5 のにKんでおりこの塘双の枠^アドレスを $s0, 塘双L 5 を $s1 に嚥えて このプログラムをg佩した (1) プログラムのg佩がKわったr泣でのレジスタ $s1, $v0, $t0, $t1 の坪否を 幣せ (2) ☆1 式び ☆2 の凋綜がそれぞれ採指g佩されるか基えよ
  • 19. 19R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 盾基箭 move $v0, $zero L1: lw $t0, 0($s0) sltu $t1, $v0, $t0 beq $t1, $zero, L2 move $v0, $t0 L2: addu $s0, $s0, 4 addu $s1, $s1, -1 bne $s1, $zero, L1 $v0 = 0; do { $t0 = mem[$s0 + 0]; if ($v0 < $t0) { $v0 = $t0; } $s0 = $s0 + 4; $s1 = $s1 C 1; } while ($s1 != 0) (1) $s1はI尖すべき塘双勣殆の火り方でK阻rは0になる$v0 はそのr 泣までの恷寄、魃3屬垢襯譽献好燭韮K阻rは畠悶の恷寄22になる $t0 はiみ竃した塘双勣殆を鯉{するレジスタでK阻rは恷瘁の勣殆 5 になる$t1 はそれまでの恷寄、iみ竃した塘双勣殆より弌さければ 1になるレジスタで(これが0のときはL2に蛍瓷するため恷寄、慮仟が スキップされる)恷瘁のル`プでは 0 になる (2) ☆1 は塘双Lが5なので5指g佩される☆2 は恷寄、鮓仟するとき のみg佩されるため3指g佩される
  • 20. 20R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 箭}(3) move $s2, $zero L1: lw $t0, 0($s0) addu $s1, $s1, -1 addu $s2, $s2, $t0 addu $s0, $s0, 4 bne $s1, $zero, L1 參和に幣すプログラムは塘双の坪否のt才をレジスタ $s2 に卦すものである いま屁方 (4バイト) の塘双の枠^アドレスをレジスタ $s0 に塘双L 1000 を レジスタ $s1 に嚥えこのプログラムをg佩した (1) プログラムのg佩がKわったr泣でのレジスタ $s1 の坪否を幣せ (2) ラベル L1 で峺されるlw凋綜は採指g佩されるか基えよ (3) このプログラム畠悶でいくつの凋綜がg佩されるか基えよ(揖じ凋綜が 2 指g佩される栽2 凋綜と方える)
  • 21. 21R 風令 (|臼寄僥): 麻C垢僥 2015 (7) 盾基箭 (1) $s1はI尖すべき塘双勣殆の火り方でK阻rは0になる (2) 塘双勣殆をiみ竃す凋綜で塘双L蛍の1000指g佩される (3) 恷兜の move 凋綜は1指だけ麿の5凋綜は1000指g佩され るので栽5001凋綜がg佩される