SlideShare a Scribd company logo
東北大学 工学部 機械知能・航空工学科
2016年度 5セメスター・クラスC3 D1 D2 D3
計算機工学
大学院情報科学研究科
鏡 慎吾
http://www.ic.is.tohoku.ac.jp/~swk/lecture/
7. MIPSの命令と動作 ― 分岐・ジャンプ・関数呼出し
(教科書7章
命令一覧は p.113)
2鏡 慎吾 (東北大学): 計算機工学 2016 (7)
分岐・ジャンプ命令
条件文や繰り返し文などを実現するには,命令の実行順の制御
が必要
(C言語)
(MIPSアセンブリ言語)
if (x == y) {
x = x + 1;
}
...
bne $s0, $s1, L1 # $s0 ≠ $s1 ならば L1 へ分岐
addu $s0, $s0, 1
L1: ...
ただし,変数 x, y の内容がそれぞれレジスタ
s0, s1 に置かれているとする
ラベル
3鏡 慎吾 (東北大学): 計算機工学 2016 (7)
資料: 主な分岐命令,比較命令
命令 説明
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 符号無しで $a < $b ならば $c ← 1; さもなくば $c ← 0
sgt $c, $a, $b 符号つきで $a > $b 〃 (set on greater than)
sgtu $c, $a, $b 符号無しで $a > $b 〃 (set on greater than unsigned)
sle $c, $a, $b 符号つきで $a≦$b 〃 (set on less than or equal)
sleu $c, $a, $b 符号無しで $a≦$b 〃 (set on less than or equal unsigned)
sge $c, $a, $b 符号つきで $a≧$b 〃 (set on greater than or equal)
sgeu $c, $a, $b 符号無しで $a≧$b 〃 (set on greater than or equal unsigned)
•slt, sltu 以外の比較命令はマクロ命令
4鏡 慎吾 (東北大学): 計算機工学 2016 (7)
例: if – 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 # 無条件に L2 へジャンプ
L1: addu $s0, $s0, 2
L2: ...
(C言語)
(MIPSアセンブリ言語)
ただし,変数 x, y の内容がそれぞれレジスタ
s0, s1 に置かれているとする
5鏡 慎吾 (東北大学): 計算機工学 2016 (7)
例: while文
while (x < y) {
x = x + 1;
}
L1: slt $t0, $s0, $s1 # x < y なら $t0 ← 1; さもなくば $t0 ← 0
beq $t0, $zero, L2 # 比較結果が偽(ゼロ)なら L2 へ
addu $s0, $s0, 1 # x ← x + 1
j L1
L2: ...
(C言語)
(MIPSアセンブリ言語)
ただし,変数 x, y の内容がそれぞれレジスタ
s0, s1 に置かれているとする
6鏡 慎吾 (東北大学): 計算機工学 2016 (7)
関数呼出し
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言語)
ただし,関数main内の変数 x, y, z の内
容がそれぞれレジスタ s0, s1, s2 に置か
れているとする
関数呼出しは単に j 命令でジャンプ
するだけでは実現できない
(元の位置に戻って来る必要がある)
7鏡 慎吾 (東北大学): 計算機工学 2016 (7)
関数呼出しの実行例
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アセンブリ言語)
8鏡 慎吾 (東北大学): 計算機工学 2016 (7)
資料: 主なジャンプ命令
命令 説明
j L ラベル L へジャンプ (jump)
jal L ラベル L へジャンプすると同時に,次の命令アドレ
スを $ra ($31) に保存
(jump and link)
jr $r レジスタ r に保存されたアドレスへジャンプ
(jump register)
9鏡 慎吾 (東北大学): 計算機工学 2016 (7)
分岐・ジャンプ命令の動作
メモリ
32ビットALU
32x32ビット
レジスタ
PC
命令デコーダ
アドレス(32ビット)
データ(8, 16, 32ビット)
次PC計算
制御回路
mux
mux
(1) レジスタ
読み出し
(2) 分岐判定
(3) 分岐先アドレス計算
10鏡 慎吾 (東北大学): 計算機工学 2016 (7)
参考: 「次PC計算」の処理
分岐条件が成立していないなら,
• PC + 4
成立しているなら,
• 条件分岐命令のとき:
PC + 4 £ 定数フィールド値
• ジャンプ命令のとき:
PC の下位28ビットを 4 £ 定数フィールド値 で置換
※ 命令長は常に4バイトなので,分岐・ジャンプ先のアドレスは必ず
4の倍数になる
※ この講義では「遅延分岐」は無視する
11鏡 慎吾 (東北大学): 計算機工学 2016 (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形式
レジスタ間演算,シフト命令(即値版も含む)など
レジスタ-即値間演算,ロード・ストア,分岐命令など
ジャンプ命令など
12鏡 慎吾 (東北大学): 計算機工学 2016 (7)
実際の関数呼出
前の関数呼出の例は,簡単に済むように巧妙に作られた例で
ある.実際には以下のようなことを考えなくてはならない.
これらは「スタック」と呼ばれるデータ構造をメモリ内に構築する
ことで取り扱う.
• 呼び出された関数はどのレジスタを使えばよいのか? 特に,
呼出された関数が呼出し元のレジスタを破壊しないためには
どうすればよいのか?
• t0~t9 は呼び出し側がスタックに退避
• s0~s8 は呼び出された側がスタックに退避
• ra は一つしかないが,関数を多重で呼び出す場合は?
• スタックに退避
• 4つを超える引数の受け渡しは?
• スタックで受け渡す
13鏡 慎吾 (東北大学): 計算機工学 2016 (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鏡 慎吾 (東北大学): 計算機工学 2016 (7)
典型的なメモリマップ
スタックポインタ
($sp)
スタック
(局所変数)
低位アドレス↓
高位アドレス↑
プログラム
大域変数・静的変数等
int global_var;
void func() {
int a, b;
static int static_var;
...
}
int main() {
int x, y;
int *p = (int *) malloc(256);
}
動的確保領域
グローバルポインタ
($gp)
例: ポケットモンスター 「5かい」バグ
15鏡 慎吾 (東北大学): 計算機工学 2016 (7)
ゲームボーイ用ゲーム「ポケットモンスター 赤」「ポケットモンスター
緑」 (任天堂, 1996) には,プレイヤが保有している道具やポケモ
ン(ゲーム世界内の架空生物)などを並べ替える機能があったが,
この機能の実装に不具合があり,特定の操作によって本来は存在
しないはずの道具(俗に「バグアイテム」)を入手することができた.
道具を使ったときに生じる効果は,道具ごとに定められているアド
レスに対する呼出しによって実現されており,バグアイテムを使用
すると想定外のアドレスへの呼出しが生じた.特に「5かい」という
名称で表示されるバグアイテムの場合は,呼出されるアドレス以
降がポケモンの種類やその状態等を保持するメモリ領域となって
おり,プレイヤがある程度自由に設定することができた.結果とし
て,任意のプログラムを作成し実行することが可能となっていた.
https://www.youtube.com/watch?v=IJ7mRJISeO0
https://www.youtube.com/watch?v=baXxP6b7ANQ
18鏡 慎吾 (東北大学): 計算機工学 2016 (7)
例: バッファ・オーバラン攻撃
int getnum() {
char buf[8];
gets(buf); /* 入力文字列を配列 buf に保存 */
return atoi(buf); /* 文字列 → 整数 */
}
buf
return
address
低位アドレス↓
高位アドレス↑
getNum() の
スタックフレーム
sp
このような問題があるので,gets,
scanf のように配列長を指定せ
ずに入力を読み込む関数は,使
用が推奨されない
19鏡 慎吾 (東北大学): 計算機工学 2016 (7)
例題(1)
以下に示すプログラムは,ある値を2 進数で表した際に,その中に
含まれる「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 が格納されている状
態でこのプログラムを実行した.
(1) 実行終了時の,レジスタ $s0,$t0,$t1 の内容を示せ.
(2) ラベルL1 で指される命令は,何回実行されるか答えよ.
20鏡 慎吾 (東北大学): 計算機工学 2016 (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 は最終結果で,ビット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;
21鏡 慎吾 (東北大学): 計算機工学 2016 (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
の順に並んでおり,この配列の先頭アドレスを $s0, 配列長 5 を $s1 に与えて
このプログラムを実行した.
(1) プログラムの実行が終わった時点でのレジスタ $s1, $v0, $t0, $t1 の内容を
示せ.
(2) ※1 及び ※2 の命令がそれぞれ何回実行されるか答えよ.
22鏡 慎吾 (東北大学): 計算機工学 2016 (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 – 1;
} while ($s1 != 0)
(1) $s1は処理すべき配列要素の残り数で,終了時は0になる.$v0 はその時
点までの最大値を保持するレジスタで,終了時は全体の最大値22になる.
$t0 は読み出した配列要素を格納するレジスタで,終了時は最後の要素 5
になる.$t1 は,それまでの最大値が読み出した配列要素より小さければ
1になるレジスタで(これが0のときはL2に分岐するため,最大値の更新が
スキップされる),最後のループでは 0 になる.
(2) ※1 は,配列長が5なので5回実行される.※2 は,最大値を更新するとき
のみ実行されるため3回実行される.
23鏡 慎吾 (東北大学): 計算機工学 2016 (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
以下に示すプログラムは配列の内容の総和をレジスタ $s2 に返すものである.
いま,整数 (4バイト) の配列の先頭アドレスをレジスタ $s0 に,配列長 1000 を
レジスタ $s1 に与え,このプログラムを実行した.
(1) プログラムの実行が終わった時点でのレジスタ $s1 の内容を示せ.
(2) ラベル L1 で指されるlw命令は,何回実行されるか答えよ.
(3) このプログラム全体で,いくつの命令が実行されるか答えよ.(同じ命令が
2 回実行される場合,2 命令と数える)
24鏡 慎吾 (東北大学): 計算機工学 2016 (7)
解答例
(1) $s1は処理すべき配列要素の残り数で,終了時は0になる.
(2) 配列要素を読み出す命令で,配列長分の1000回実行される.
(3) 最初の move 命令は1回だけ,他の5命令は1000回実行され
るので,合計5001命令が実行される.

More Related Content

What's hot

kagami_comput2016_05
kagami_comput2016_05kagami_comput2016_05
kagami_comput2016_05
swkagami
 
kagamicomput201704
kagamicomput201704kagamicomput201704
kagamicomput201704
swkagami
 
kagami_comput2016_08
kagami_comput2016_08kagami_comput2016_08
kagami_comput2016_08
swkagami
 
kagamicomput201806
kagamicomput201806kagamicomput201806
kagamicomput201806
swkagami
 
kagami_comput2016_11
kagami_comput2016_11kagami_comput2016_11
kagami_comput2016_11
swkagami
 
kagami_comput2016_09
kagami_comput2016_09kagami_comput2016_09
kagami_comput2016_09
swkagami
 
kagami_comput2016_12
kagami_comput2016_12kagami_comput2016_12
kagami_comput2016_12
swkagami
 
kagami_comput2015_7
kagami_comput2015_7kagami_comput2015_7
kagami_comput2015_7swkagami
 
kagami_comput2016_04
kagami_comput2016_04kagami_comput2016_04
kagami_comput2016_04
swkagami
 
kagamicomput201712
kagamicomput201712kagamicomput201712
kagamicomput201712
swkagami
 
kagamicomput201711
kagamicomput201711kagamicomput201711
kagamicomput201711
swkagami
 
kagamicomput201701
kagamicomput201701kagamicomput201701
kagamicomput201701
swkagami
 
kagamicomput201702
kagamicomput201702kagamicomput201702
kagamicomput201702
swkagami
 
kagamicomput201710
kagamicomput201710kagamicomput201710
kagamicomput201710
swkagami
 
kagami_comput2015_10
kagami_comput2015_10kagami_comput2015_10
kagami_comput2015_10swkagami
 
kagamicomput201709
kagamicomput201709kagamicomput201709
kagamicomput201709
swkagami
 
kagami_comput2015_2
kagami_comput2015_2kagami_comput2015_2
kagami_comput2015_2swkagami
 
kagamicomput201703
kagamicomput201703kagamicomput201703
kagamicomput201703
swkagami
 
kagamicomput201708
kagamicomput201708kagamicomput201708
kagamicomput201708
swkagami
 
kagamicomput201810
kagamicomput201810kagamicomput201810
kagamicomput201810
swkagami
 

What's hot (20)

kagami_comput2016_05
kagami_comput2016_05kagami_comput2016_05
kagami_comput2016_05
 
kagamicomput201704
kagamicomput201704kagamicomput201704
kagamicomput201704
 
kagami_comput2016_08
kagami_comput2016_08kagami_comput2016_08
kagami_comput2016_08
 
kagamicomput201806
kagamicomput201806kagamicomput201806
kagamicomput201806
 
kagami_comput2016_11
kagami_comput2016_11kagami_comput2016_11
kagami_comput2016_11
 
kagami_comput2016_09
kagami_comput2016_09kagami_comput2016_09
kagami_comput2016_09
 
kagami_comput2016_12
kagami_comput2016_12kagami_comput2016_12
kagami_comput2016_12
 
kagami_comput2015_7
kagami_comput2015_7kagami_comput2015_7
kagami_comput2015_7
 
kagami_comput2016_04
kagami_comput2016_04kagami_comput2016_04
kagami_comput2016_04
 
kagamicomput201712
kagamicomput201712kagamicomput201712
kagamicomput201712
 
kagamicomput201711
kagamicomput201711kagamicomput201711
kagamicomput201711
 
kagamicomput201701
kagamicomput201701kagamicomput201701
kagamicomput201701
 
kagamicomput201702
kagamicomput201702kagamicomput201702
kagamicomput201702
 
kagamicomput201710
kagamicomput201710kagamicomput201710
kagamicomput201710
 
kagami_comput2015_10
kagami_comput2015_10kagami_comput2015_10
kagami_comput2015_10
 
kagamicomput201709
kagamicomput201709kagamicomput201709
kagamicomput201709
 
kagami_comput2015_2
kagami_comput2015_2kagami_comput2015_2
kagami_comput2015_2
 
kagamicomput201703
kagamicomput201703kagamicomput201703
kagamicomput201703
 
kagamicomput201708
kagamicomput201708kagamicomput201708
kagamicomput201708
 
kagamicomput201810
kagamicomput201810kagamicomput201810
kagamicomput201810
 

Viewers also liked

kagami_comput2016_14
kagami_comput2016_14kagami_comput2016_14
kagami_comput2016_14
swkagami
 
kagami_comput2015_11
kagami_comput2015_11kagami_comput2015_11
kagami_comput2015_11swkagami
 
kagami_comput2016_13
kagami_comput2016_13kagami_comput2016_13
kagami_comput2016_13
swkagami
 
kagami_comput2015_12
kagami_comput2015_12kagami_comput2015_12
kagami_comput2015_12swkagami
 
kagami_comput2015_13
kagami_comput2015_13kagami_comput2015_13
kagami_comput2015_13swkagami
 
kagami_comput2015_14
kagami_comput2015_14kagami_comput2015_14
kagami_comput2015_14swkagami
 
kagami_comput2015_9
kagami_comput2015_9kagami_comput2015_9
kagami_comput2015_9swkagami
 
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
Kiyoshi Ogawa
 
フレッシュマンセミナー20060614
フレッシュマンセミナー20060614フレッシュマンセミナー20060614
フレッシュマンセミナー20060614
Takeo Kunishima
 
A Visys é especialista em soluções para sua Empresa! Você quer fazer a difere...
A Visys é especialista em soluções para sua Empresa! Você quer fazer a difere...A Visys é especialista em soluções para sua Empresa! Você quer fazer a difere...
A Visys é especialista em soluções para sua Empresa! Você quer fazer a difere...
Sonia Fernandes Bogo
 
kagami_comput2015_8
kagami_comput2015_8kagami_comput2015_8
kagami_comput2015_8swkagami
 
Spanish_AdSenseOnlineOverview_121103_ps
Spanish_AdSenseOnlineOverview_121103_psSpanish_AdSenseOnlineOverview_121103_ps
Spanish_AdSenseOnlineOverview_121103_psNatura
 
CMSI計算科学技術特論A (2015) 第2回 MPIの基礎
CMSI計算科学技術特論A (2015) 第2回 MPIの基礎CMSI計算科学技術特論A (2015) 第2回 MPIの基礎
CMSI計算科学技術特論A (2015) 第2回 MPIの基礎
Computational Materials Science Initiative
 
情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現
Tokai University
 

Viewers also liked (17)

kagami_comput2016_14
kagami_comput2016_14kagami_comput2016_14
kagami_comput2016_14
 
kagami_comput2015_11
kagami_comput2015_11kagami_comput2015_11
kagami_comput2015_11
 
kagami_comput2016_13
kagami_comput2016_13kagami_comput2016_13
kagami_comput2016_13
 
kagami_comput2015_12
kagami_comput2015_12kagami_comput2015_12
kagami_comput2015_12
 
kagami_comput2015_13
kagami_comput2015_13kagami_comput2015_13
kagami_comput2015_13
 
kagami_comput2015_14
kagami_comput2015_14kagami_comput2015_14
kagami_comput2015_14
 
kagami_comput2015_9
kagami_comput2015_9kagami_comput2015_9
kagami_comput2015_9
 
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
 
フレッシュマンセミナー20060614
フレッシュマンセミナー20060614フレッシュマンセミナー20060614
フレッシュマンセミナー20060614
 
La vida
La vidaLa vida
La vida
 
A Visys é especialista em soluções para sua Empresa! Você quer fazer a difere...
A Visys é especialista em soluções para sua Empresa! Você quer fazer a difere...A Visys é especialista em soluções para sua Empresa! Você quer fazer a difere...
A Visys é especialista em soluções para sua Empresa! Você quer fazer a difere...
 
kagami_comput2015_8
kagami_comput2015_8kagami_comput2015_8
kagami_comput2015_8
 
Spanish_AdSenseOnlineOverview_121103_ps
Spanish_AdSenseOnlineOverview_121103_psSpanish_AdSenseOnlineOverview_121103_ps
Spanish_AdSenseOnlineOverview_121103_ps
 
CMSI計算科学技術特論A(3) OpenMPの基礎
CMSI計算科学技術特論A(3) OpenMPの基礎CMSI計算科学技術特論A(3) OpenMPの基礎
CMSI計算科学技術特論A(3) OpenMPの基礎
 
CMSI計算科学技術特論A (2015) 第2回 MPIの基礎
CMSI計算科学技術特論A (2015) 第2回 MPIの基礎CMSI計算科学技術特論A (2015) 第2回 MPIの基礎
CMSI計算科学技術特論A (2015) 第2回 MPIの基礎
 
計算機理論入門04
計算機理論入門04計算機理論入門04
計算機理論入門04
 
情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現
 

Similar to kagami_comput2016_07

kagamicomput201807
kagamicomput201807kagamicomput201807
kagamicomput201807
swkagami
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
MITSUNARI Shigeo
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
 
講座C入門
講座C入門講座C入門
講座C入門
Tokai University
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成
眞樹 冨澤
 
diffの真髄
diffの真髄diffの真髄
diffの真髄
fuku68
 
Lispでやる記号微分
Lispでやる記号微分Lispでやる記号微分
Lispでやる記号微分
Keiichi Watanabe
 
kagamicomput201801
kagamicomput201801kagamicomput201801
kagamicomput201801
swkagami
 
X hago2 shortcoding 20110827
X hago2 shortcoding 20110827X hago2 shortcoding 20110827
X hago2 shortcoding 20110827
uskey512
 
会津合宿2015Day3:D問題
会津合宿2015Day3:D問題会津合宿2015Day3:D問題
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
徹 上野山
 
Javaセキュアコーディングセミナー東京第2回講義
Javaセキュアコーディングセミナー東京第2回講義Javaセキュアコーディングセミナー東京第2回講義
Javaセキュアコーディングセミナー東京第2回講義JPCERT Coordination Center
 
Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)umidori
 
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
Kenta USAMI
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
 
kagami_comput2015_1
kagami_comput2015_1kagami_comput2015_1
kagami_comput2015_1swkagami
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
Yuto Takei
 

Similar to kagami_comput2016_07 (20)

kagamicomput201807
kagamicomput201807kagamicomput201807
kagamicomput201807
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
講座C入門
講座C入門講座C入門
講座C入門
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成
 
diffの真髄
diffの真髄diffの真髄
diffの真髄
 
Lispでやる記号微分
Lispでやる記号微分Lispでやる記号微分
Lispでやる記号微分
 
kagamicomput201801
kagamicomput201801kagamicomput201801
kagamicomput201801
 
X hago2 shortcoding 20110827
X hago2 shortcoding 20110827X hago2 shortcoding 20110827
X hago2 shortcoding 20110827
 
会津合宿2015Day3:D問題
会津合宿2015Day3:D問題会津合宿2015Day3:D問題
会津合宿2015Day3:D問題
 
CMSI計算科学技術特論B(10) 大規模MD並列化の技術1
CMSI計算科学技術特論B(10) 大規模MD並列化の技術1CMSI計算科学技術特論B(10) 大規模MD並列化の技術1
CMSI計算科学技術特論B(10) 大規模MD並列化の技術1
 
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
 
Javaセキュアコーディングセミナー東京第2回講義
Javaセキュアコーディングセミナー東京第2回講義Javaセキュアコーディングセミナー東京第2回講義
Javaセキュアコーディングセミナー東京第2回講義
 
Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)
 
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
kagami_comput2015_1
kagami_comput2015_1kagami_comput2015_1
kagami_comput2015_1
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 

More from swkagami

kagamicomput201814
kagamicomput201814kagamicomput201814
kagamicomput201814
swkagami
 
kagamicomput201813
kagamicomput201813kagamicomput201813
kagamicomput201813
swkagami
 
kagamicomput201812
kagamicomput201812kagamicomput201812
kagamicomput201812
swkagami
 
kagamicomput201811
kagamicomput201811kagamicomput201811
kagamicomput201811
swkagami
 
kagamicomput201809
kagamicomput201809kagamicomput201809
kagamicomput201809
swkagami
 
kagamicomput201808
kagamicomput201808kagamicomput201808
kagamicomput201808
swkagami
 
kagamicomput201805
kagamicomput201805kagamicomput201805
kagamicomput201805
swkagami
 
kagamicomput201804
kagamicomput201804kagamicomput201804
kagamicomput201804
swkagami
 
kagamicomput201803
kagamicomput201803kagamicomput201803
kagamicomput201803
swkagami
 
kagamicomput201802
kagamicomput201802kagamicomput201802
kagamicomput201802
swkagami
 
kagamicomput201714
kagamicomput201714kagamicomput201714
kagamicomput201714
swkagami
 
kagamicomput201713
kagamicomput201713kagamicomput201713
kagamicomput201713
swkagami
 
kagamicomput201705
kagamicomput201705kagamicomput201705
kagamicomput201705
swkagami
 

More from swkagami (13)

kagamicomput201814
kagamicomput201814kagamicomput201814
kagamicomput201814
 
kagamicomput201813
kagamicomput201813kagamicomput201813
kagamicomput201813
 
kagamicomput201812
kagamicomput201812kagamicomput201812
kagamicomput201812
 
kagamicomput201811
kagamicomput201811kagamicomput201811
kagamicomput201811
 
kagamicomput201809
kagamicomput201809kagamicomput201809
kagamicomput201809
 
kagamicomput201808
kagamicomput201808kagamicomput201808
kagamicomput201808
 
kagamicomput201805
kagamicomput201805kagamicomput201805
kagamicomput201805
 
kagamicomput201804
kagamicomput201804kagamicomput201804
kagamicomput201804
 
kagamicomput201803
kagamicomput201803kagamicomput201803
kagamicomput201803
 
kagamicomput201802
kagamicomput201802kagamicomput201802
kagamicomput201802
 
kagamicomput201714
kagamicomput201714kagamicomput201714
kagamicomput201714
 
kagamicomput201713
kagamicomput201713kagamicomput201713
kagamicomput201713
 
kagamicomput201705
kagamicomput201705kagamicomput201705
kagamicomput201705
 

Recently uploaded

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 

Recently uploaded (16)

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 

kagami_comput2016_07

  • 1. 東北大学 工学部 機械知能・航空工学科 2016年度 5セメスター・クラスC3 D1 D2 D3 計算機工学 大学院情報科学研究科 鏡 慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ 7. MIPSの命令と動作 ― 分岐・ジャンプ・関数呼出し (教科書7章 命令一覧は p.113)
  • 2. 2鏡 慎吾 (東北大学): 計算機工学 2016 (7) 分岐・ジャンプ命令 条件文や繰り返し文などを実現するには,命令の実行順の制御 が必要 (C言語) (MIPSアセンブリ言語) if (x == y) { x = x + 1; } ... bne $s0, $s1, L1 # $s0 ≠ $s1 ならば L1 へ分岐 addu $s0, $s0, 1 L1: ... ただし,変数 x, y の内容がそれぞれレジスタ s0, s1 に置かれているとする ラベル
  • 3. 3鏡 慎吾 (東北大学): 計算機工学 2016 (7) 資料: 主な分岐命令,比較命令 命令 説明 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 符号無しで $a < $b ならば $c ← 1; さもなくば $c ← 0 sgt $c, $a, $b 符号つきで $a > $b 〃 (set on greater than) sgtu $c, $a, $b 符号無しで $a > $b 〃 (set on greater than unsigned) sle $c, $a, $b 符号つきで $a≦$b 〃 (set on less than or equal) sleu $c, $a, $b 符号無しで $a≦$b 〃 (set on less than or equal unsigned) sge $c, $a, $b 符号つきで $a≧$b 〃 (set on greater than or equal) sgeu $c, $a, $b 符号無しで $a≧$b 〃 (set on greater than or equal unsigned) •slt, sltu 以外の比較命令はマクロ命令
  • 4. 4鏡 慎吾 (東北大学): 計算機工学 2016 (7) 例: if – 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 # 無条件に L2 へジャンプ L1: addu $s0, $s0, 2 L2: ... (C言語) (MIPSアセンブリ言語) ただし,変数 x, y の内容がそれぞれレジスタ s0, s1 に置かれているとする
  • 5. 5鏡 慎吾 (東北大学): 計算機工学 2016 (7) 例: while文 while (x < y) { x = x + 1; } L1: slt $t0, $s0, $s1 # x < y なら $t0 ← 1; さもなくば $t0 ← 0 beq $t0, $zero, L2 # 比較結果が偽(ゼロ)なら L2 へ addu $s0, $s0, 1 # x ← x + 1 j L1 L2: ... (C言語) (MIPSアセンブリ言語) ただし,変数 x, y の内容がそれぞれレジスタ s0, s1 に置かれているとする
  • 6. 6鏡 慎吾 (東北大学): 計算機工学 2016 (7) 関数呼出し 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言語) ただし,関数main内の変数 x, y, z の内 容がそれぞれレジスタ s0, s1, s2 に置か れているとする 関数呼出しは単に j 命令でジャンプ するだけでは実現できない (元の位置に戻って来る必要がある)
  • 7. 7鏡 慎吾 (東北大学): 計算機工学 2016 (7) 関数呼出しの実行例 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アセンブリ言語)
  • 8. 8鏡 慎吾 (東北大学): 計算機工学 2016 (7) 資料: 主なジャンプ命令 命令 説明 j L ラベル L へジャンプ (jump) jal L ラベル L へジャンプすると同時に,次の命令アドレ スを $ra ($31) に保存 (jump and link) jr $r レジスタ r に保存されたアドレスへジャンプ (jump register)
  • 9. 9鏡 慎吾 (東北大学): 計算機工学 2016 (7) 分岐・ジャンプ命令の動作 メモリ 32ビットALU 32x32ビット レジスタ PC 命令デコーダ アドレス(32ビット) データ(8, 16, 32ビット) 次PC計算 制御回路 mux mux (1) レジスタ 読み出し (2) 分岐判定 (3) 分岐先アドレス計算
  • 10. 10鏡 慎吾 (東北大学): 計算機工学 2016 (7) 参考: 「次PC計算」の処理 分岐条件が成立していないなら, • PC + 4 成立しているなら, • 条件分岐命令のとき: PC + 4 £ 定数フィールド値 • ジャンプ命令のとき: PC の下位28ビットを 4 £ 定数フィールド値 で置換 ※ 命令長は常に4バイトなので,分岐・ジャンプ先のアドレスは必ず 4の倍数になる ※ この講義では「遅延分岐」は無視する
  • 11. 11鏡 慎吾 (東北大学): 計算機工学 2016 (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形式 レジスタ間演算,シフト命令(即値版も含む)など レジスタ-即値間演算,ロード・ストア,分岐命令など ジャンプ命令など
  • 12. 12鏡 慎吾 (東北大学): 計算機工学 2016 (7) 実際の関数呼出 前の関数呼出の例は,簡単に済むように巧妙に作られた例で ある.実際には以下のようなことを考えなくてはならない. これらは「スタック」と呼ばれるデータ構造をメモリ内に構築する ことで取り扱う. • 呼び出された関数はどのレジスタを使えばよいのか? 特に, 呼出された関数が呼出し元のレジスタを破壊しないためには どうすればよいのか? • t0~t9 は呼び出し側がスタックに退避 • s0~s8 は呼び出された側がスタックに退避 • ra は一つしかないが,関数を多重で呼び出す場合は? • スタックに退避 • 4つを超える引数の受け渡しは? • スタックで受け渡す
  • 13. 13鏡 慎吾 (東北大学): 計算機工学 2016 (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. 14鏡 慎吾 (東北大学): 計算機工学 2016 (7) 典型的なメモリマップ スタックポインタ ($sp) スタック (局所変数) 低位アドレス↓ 高位アドレス↑ プログラム 大域変数・静的変数等 int global_var; void func() { int a, b; static int static_var; ... } int main() { int x, y; int *p = (int *) malloc(256); } 動的確保領域 グローバルポインタ ($gp)
  • 15. 例: ポケットモンスター 「5かい」バグ 15鏡 慎吾 (東北大学): 計算機工学 2016 (7) ゲームボーイ用ゲーム「ポケットモンスター 赤」「ポケットモンスター 緑」 (任天堂, 1996) には,プレイヤが保有している道具やポケモ ン(ゲーム世界内の架空生物)などを並べ替える機能があったが, この機能の実装に不具合があり,特定の操作によって本来は存在 しないはずの道具(俗に「バグアイテム」)を入手することができた. 道具を使ったときに生じる効果は,道具ごとに定められているアド レスに対する呼出しによって実現されており,バグアイテムを使用 すると想定外のアドレスへの呼出しが生じた.特に「5かい」という 名称で表示されるバグアイテムの場合は,呼出されるアドレス以 降がポケモンの種類やその状態等を保持するメモリ領域となって おり,プレイヤがある程度自由に設定することができた.結果とし て,任意のプログラムを作成し実行することが可能となっていた. https://www.youtube.com/watch?v=IJ7mRJISeO0 https://www.youtube.com/watch?v=baXxP6b7ANQ
  • 16. 18鏡 慎吾 (東北大学): 計算機工学 2016 (7) 例: バッファ・オーバラン攻撃 int getnum() { char buf[8]; gets(buf); /* 入力文字列を配列 buf に保存 */ return atoi(buf); /* 文字列 → 整数 */ } buf return address 低位アドレス↓ 高位アドレス↑ getNum() の スタックフレーム sp このような問題があるので,gets, scanf のように配列長を指定せ ずに入力を読み込む関数は,使 用が推奨されない
  • 17. 19鏡 慎吾 (東北大学): 計算機工学 2016 (7) 例題(1) 以下に示すプログラムは,ある値を2 進数で表した際に,その中に 含まれる「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 が格納されている状 態でこのプログラムを実行した. (1) 実行終了時の,レジスタ $s0,$t0,$t1 の内容を示せ. (2) ラベルL1 で指される命令は,何回実行されるか答えよ.
  • 18. 20鏡 慎吾 (東北大学): 計算機工学 2016 (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 は最終結果で,ビット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;
  • 19. 21鏡 慎吾 (東北大学): 計算機工学 2016 (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 の順に並んでおり,この配列の先頭アドレスを $s0, 配列長 5 を $s1 に与えて このプログラムを実行した. (1) プログラムの実行が終わった時点でのレジスタ $s1, $v0, $t0, $t1 の内容を 示せ. (2) ※1 及び ※2 の命令がそれぞれ何回実行されるか答えよ.
  • 20. 22鏡 慎吾 (東北大学): 計算機工学 2016 (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 – 1; } while ($s1 != 0) (1) $s1は処理すべき配列要素の残り数で,終了時は0になる.$v0 はその時 点までの最大値を保持するレジスタで,終了時は全体の最大値22になる. $t0 は読み出した配列要素を格納するレジスタで,終了時は最後の要素 5 になる.$t1 は,それまでの最大値が読み出した配列要素より小さければ 1になるレジスタで(これが0のときはL2に分岐するため,最大値の更新が スキップされる),最後のループでは 0 になる. (2) ※1 は,配列長が5なので5回実行される.※2 は,最大値を更新するとき のみ実行されるため3回実行される.
  • 21. 23鏡 慎吾 (東北大学): 計算機工学 2016 (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 以下に示すプログラムは配列の内容の総和をレジスタ $s2 に返すものである. いま,整数 (4バイト) の配列の先頭アドレスをレジスタ $s0 に,配列長 1000 を レジスタ $s1 に与え,このプログラムを実行した. (1) プログラムの実行が終わった時点でのレジスタ $s1 の内容を示せ. (2) ラベル L1 で指されるlw命令は,何回実行されるか答えよ. (3) このプログラム全体で,いくつの命令が実行されるか答えよ.(同じ命令が 2 回実行される場合,2 命令と数える)
  • 22. 24鏡 慎吾 (東北大学): 計算機工学 2016 (7) 解答例 (1) $s1は処理すべき配列要素の残り数で,終了時は0になる. (2) 配列要素を読み出す命令で,配列長分の1000回実行される. (3) 最初の move 命令は1回だけ,他の5命令は1000回実行され るので,合計5001命令が実行される.