SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
東北大学 工学部 機械知能・航空工学科
2018年度 クラスC3 D1 D2 D3
情報科学基礎 I
大学院情報科学研究科
鏡 慎吾
http://www.ic.is.tohoku.ac.jp/~swk/lecture/
6. MIPSの命令と動作 ― 演算・ロード・ストア
(教科書6.3節,6.4節
命令一覧は p.113)
2鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
レジスタ間の演算命令
(C言語)
(疑似的な MIPSアセンブリ言語)
c = a + b;
addu $c, $a, $b # $c ← $a + $b
• ただし,変数 a, b, c の内容がそれぞれレジスタ a, b, c に置
かれているとする (「$a」でレジスタaの値を表す)
• 以下,特に断らない限り変数は整数 (int) とする
• #以下は説明用のコメント.アセンブリ言語の一部ではない
• addu をオペコード,$c, $a, $b をオペランドと呼ぶ
• 特に$cを出力オペランド,$a, $bを入力オペランドと呼ぶ
3鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
例
(C言語)
(疑似的な MIPSアセンブリ言語)
e = (a + b) - (c + d);
addu $e, $a, $b # $e ← $a + $b
addu $t, $c, $d # $t ← $c + $d
subu $e, $e, $t # $e ← $e - $t
• レジスタ t のように計算の都合上一時的に使われるレジスタを
一時レジスタ (temporary register) と呼ぶ
• addu, subu の u は unsigned の略である.add 命令,sub 命令も計算内
容は同じだが,オーバフローが起きたときに例外処理が行われる.C言語
では通常オーバフローは無視する
ただし,変数 a~e の内容がそれぞれレ
ジスタ a~e に置かれており,それ以外
にレジスタ t が自由に使えるとする
4鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
資料: 主なレジスタ間演算命令
命令 説明
addu $c, $a, $b $c ← $a + $b (add unsigned の略)
subu $c, $a, $b $c ← $a – $b (subtract unsigned の略)
and $c, $a, $b $c ← $a & $b
or $c, $a, $b $c ← $a | $b
nor $c, $a, $b $c ← ~($a | $b)
xor $c, $a, $b $c ← $a ^ $b
sll $c, $a, $b $c ← $a << $b (shift left logical の略)
srl $c, $a, $b $c ← $a >> $b (shift right logical の略)
slt $c, $a, $b 符号つきで $a < $b ならば $c ← 1; さもなくば $c ← 0
(set on less than の略)
sltu $c, $a, $b 符号無しで $a < $b ならば $c ← 1; さもなくば $c ← 0
(set on less than unsigned)
5鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
MIPSのレジスタ
ここまでは便宜上,レジスタ名として変数名をそのまま用いて来
たが,実際には MIPS には a, b, c などのような名前のレジスタ
は存在しない
実際には,32本のレジスタに 0 ~ 31 の番号がついており,そ
の番号により指定する
addu $10, $8, $9 # $10 ← $8 + $9
• このままではわかりにくいので,次ページのような別名がつい
ている
• 0番レジスタは,常に値0が読み出される特殊なレジスタである
6鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
例題
1. レジスタ s0 の内容を s1 にコピーする命令を示せ.(ヒント:
レジスタ $zero を活用する.一般に,同じ動作をする命令
は一通りとは限らない)
• この操作はよく使うので,マクロ命令を用いて
move $s1, $s0 # $s1 ← $s0
と書いてよいことになっている.
2. レジスタ s0 の内容の各ビットを反転した結果を s1 に保存
する命令を示せ.(ヒント: nor と $zero を活用する)
7鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
例題 解答例
1. 例えば以下の各命令
or $s1, $s0, $zero
or $s1, $zero, $s0
addu $s1, $s0, $zero
ほか多数
2. 例えば以下の命令
nor $s1, $s0, $zero
8鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
資料: レジスタ一覧
番号表示 別名 説明
$0 $zero 常にゼロ
$1 $at アセンブラ用に予約
$2, $3 $v0, $v1 関数からの戻り値用
$4 ~ $7 $a0 ~ $a3 関数への引数用
$8 ~ $15 $t0 ~ $t7 (主に)一時レジスタ
$16 ~ $23 $s0 ~ $s7 (主に)変数割り当て用
$24, $25 $t8, $t9 (主に)一時レジスタ
$26, $27 $k0, $k1 OS用に予約
$28 $gp グローバルポインタ
$29 $sp スタックポインタ
$30 $s8 (主に)変数割り当て用
$31 $ra リターンアドレス
9鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
命令フェッチと命令デコードの動作
メモリ
32ビットALU
32x32ビット
レジスタ
PC
命令デコーダ
アドレス(32ビット)
データ(8, 16, 32ビット)
次PC計算
制御回路
mux
mux
mux は選択回路
(1) 命令
読み出し
(2) 命令
デコード
(3) PC ← PC + 4
10鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
レジスタ間演算の動作
メモリ
32ビットALU
32x32ビット
レジスタ
PC
命令デコーダ
アドレス(32ビット)
データ(8, 16, 32ビット)
次PC計算
制御回路
mux
mux
mux は選択回路
(1) レジスタ
読み出し
(3) レジスタ
書き込み
(2) 演算
11鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
レジスタ-即値間の演算命令
(C言語)
(MIPSアセンブリ言語)
y = x + 100;
addu $s1, $s0, 100 # $s1 ← $s0 + 100
• 命令内で直接指定される定数を即値(immediate)と呼ぶ.
• 演算命令は,2つめの入力オペランドとして即値を取れる.
• 1つめは必ずレジスタ.出力オペランドももちろんレジスタ
• 即値を取る addu 命令は,実際には addiu という命令として実行される(ア
センブラが自動的に変換する.SPIMの実行画面にも注目)
• 即値を取る subu 命令は,実際には addiu 命令に符号反転した即値を渡す
ことで実行される.
ただし,変数 x, y の内容がそれぞれレジスタ
s0, s1 に置かれているとする
12鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
例
(C言語)
(MIPSアセンブリ言語)
y = x - 8;
z = 15;
subu $s1, $s0, 8 # $s1 ← $s0 - 8
or $s2, $zero, 15 # $s2 ← 15
ただし,変数 x, y, z の内容がそれぞれレジス
タ s0, s1, s2 に置かれているとする
• 2行目のようにレジスタへの定数代入よく行われるので,li
(load immediate) というマクロ命令でも書けるようになっている.
li $s2, 15 # $s2 ← 15
13鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
資料: 主なマクロ命令
命令 説明
move $a, $b $a ← $b # or $a, $zero, $b と等価
li $a, imm $a ← imm # or $a, $zero, imm と等価
(load immediate)
nop 何もしない # sll, $zero, $zero, $zero と等価
(no operation)
ハードウェアとして用意されているわけではなく,アセンブラが他の命令
(の組み合わせ)に変換することによって実現される命令
14鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
レジスタ-即値間演算の動作
メモリ
32ビットALU
32x32ビット
レジスタ
PC
命令デコーダ
アドレス(32ビット)
データ(8, 16, 32ビット)
次PC計算
制御回路
mux
mux
mux は選択回路
(1) レジスタ
読み出し
・即値生成
(2) 演算
(3) レジスタ
書き込み
15鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
ロード・ストア命令
• レジスタとメモリアドレスを指定して,相互間でデータ転送を行う
• メモリアドレスの指定方法をアドレッシングモードと呼ぶ
• MIPSの場合,アドレッシングモードは1つしかない
lw $s1, 12($s0) # $s1 ← mem[12 + $s0]
• 操作対象のメモリアドレス(実効アドレス)はレジスタ s0 の値と
定数 12 を加えたもの
• 例えばレジスタ s0 に 10000 が保存されていたとすると,アドレ
ス 10012 から始まる 4 バイト (= 1 ワード) のデータを読み出し,
レジスタ s1 に書き込む
16鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
資料: 主なロード・ストア命令
• 他に,half word 単位や byte 単位のロード命令,ストア命令がある
命令 説明
lw $t, offset($base) $t ← mem[offset + $base]
(load word)
sw $t, offset($base) mem[offset + $base] ← $t
(store word)
17鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
例
(C言語)
(MIPSアセンブリ言語)
c = a + b;
lw $t0, 0($sp) # $t0 ← mem[$sp + 0]
lw $t1, 4($sp) # $t1 ← mem[$sp + 4]
addu $t2, $t0, $t1 # $t2 ← $t0 + $t1
sw $t2, 8($sp) # mem[$sp + 8] ← $t2
0x7ffff008
0x7ffff004
0x7ffff000
sp 0x7ffff000
a
b
c
ただし,各変数は右図のよう
にメモリに割り当てられている
とし,レジスタ t0, t1, t2が自由
に使えるとする.以下同様.
※ 実際のアドレスがいくつになるかは場合により異なる
18鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
例
(C言語)
(MIPSアセンブリ言語)
int i;
int x[3];
/* 中略 */
x[i] = 300;
addu $t0, $sp, 4 # $t0 ← $sp + 4
lw $t1, 0($sp) # $t1 ← mem[$sp + 0]
sll $t1, $t1, 2 # $t1 ← $t1 × 4
addu $t0, $t0, $t1 # $t0 ← $t0 + $t1
li $t2, 300 # $t2 ← 300
sw $t2, 0($t0) # mem[$t0] ← $t2
0x7ffff00c
0x7ffff008
0x7ffff004
0x7ffff000
sp
i
x[0]
x[1]
x[2]
0x7ffff000
19鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
ロード命令の動作
メモリ
32ビットALU
32x32ビット
レジスタ
PC
命令デコーダ
アドレス(32ビット)
データ(8, 16, 32ビット)
次PC計算
制御回路
mux
mux
mux は選択回路
(1) 実効アド
レス計算
(2) メモリ読み出し
20鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
ストア命令の動作
メモリ
32ビットALU
32x32ビット
レジスタ
PC
命令デコーダ
アドレス(32ビット)
データ(8, 16, 32ビット)
次PC計算
制御回路
mux
mux
mux は選択回路
(1) 実効アド
レス計算
(2) メモリ書き込み
例(余談):スーパーマリオブラザーズ256W
21鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
ファミリーコンピュータ用ゲーム「スーパーマリオブラザーズ」 (任
天堂, 1985)では,以下のような操作により,通常は 1 ~ 8 までし
か存在しない「ワールド」(ゲーム内のステージの呼称)が,テニス
のプレイヤの位置に応じて最大 256 種類出現する現象が生じた.
• ゲームプレイ中に電源を切らずにゲームカセットをゲーム機本
体から引き抜き,
• 別のゲーム「テニス」(任天堂, 1984)のカセットを挿入してリセッ
トボタンを押し,しばらくプレイした後に,
• 同様にカセットを抜き,スーパーマリオブラザーズに戻してリセッ
トボタンを押し,プレイを開始する.
この事実から推測できることを述べよ.
(2014年度期末試験・改題)
22鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
https://www.youtube.com/watch?v=AXV05nwZtxo
23鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
world 1
map data
world 2
map data
…ワールド番号(0-7) プレイヤ位置(0-255)
マップデータ
開始アドレス
マップデータ
サイズ
Super Mario Bros. Tennis
各ワールドのマップデータ開始アドレス
= マップデータ開始アドレス
+ ワールド番号 × マップデータサイズ
このような不具合は,
バッファオーバランと総称される
24鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
練習問題
lw $t0, 0($sp)
addu $t0, $t0, 3
sw $t0, 0($sp)
lw $t1, 4($sp)
lw $t0, 8($sp)
sll $t0, $t0, $t1
sw $t0, 8($sp)
lw $t0, 12($sp)
slt $t0, $t0, $t1
sw $t0, 12($sp)
4要素の4バイト整数型からなる配列が右図のよ
うにメモリに配置されているとする.x[0] … x[3]
に格納されている値がそれぞれ 1, 3, 5, 7 の状
態から,以下のコードを実行した.実行後の x[0]
… x[3] の値はどうなっているか.
0x7ffff00c
0x7ffff008
0x7ffff004
0x7ffff000
sp
x[0]
x[1]
x[2]
x[3]
0x7ffff000
25鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
練習問題 解答例
lw $t0, 0($sp) # $t0  x[0] (= 1)
addu $t0, $t0, 3 # $t0  $t0 + 3 (= 1 + 3)
sw $t0, 0($sp) # x[0]  $t0 (= 4)
lw $t1, 4($sp) # $t1  x[1] (= 3)
lw $t0, 8($sp) # $t0  x[2] (= 5)
sll $t0, $t0, $t1 # $t0  $t0 << $t1 (= 5 << 3)
sw $t0, 8($sp) # x[2]  $t0 (= 40)
lw $t0, 12($sp) # $t0  x[3] (= 7)
slt $t0, $t0, $t1 # $t0  ($t0 < $t1) ? 1 : 0
sw $t0, 12($sp) # x[3]  $t0 (= 0)
結局 x[0] … x[3] は 4, 3, 40, 0 になる.

Mais conteúdo relacionado

Mais procurados

kagami_comput2016_03
kagami_comput2016_03kagami_comput2016_03
kagami_comput2016_03swkagami
 
データとは何か
データとは何かデータとは何か
データとは何かKenta Suzuki
 
kagami_comput2016_01
kagami_comput2016_01kagami_comput2016_01
kagami_comput2016_01swkagami
 
Incanterの紹介
Incanterの紹介Incanterの紹介
Incanterの紹介mozk_
 
as-4. 条件分岐と繰り返し
as-4. 条件分岐と繰り返しas-4. 条件分岐と繰り返し
as-4. 条件分岐と繰り返しkunihikokaneko1
 
kagami_comput2016_05
kagami_comput2016_05kagami_comput2016_05
kagami_comput2016_05swkagami
 
as-3. プログラムカウンタと命令実行サイクル
as-3. プログラムカウンタと命令実行サイクルas-3. プログラムカウンタと命令実行サイクル
as-3. プログラムカウンタと命令実行サイクルkunihikokaneko1
 
SICP
SICPSICP
SICPS W
 
kagami_comput2016_10
kagami_comput2016_10kagami_comput2016_10
kagami_comput2016_10swkagami
 
as-5. サブルーチン呼び出しのメカニズム
as-5. サブルーチン呼び出しのメカニズムas-5. サブルーチン呼び出しのメカニズム
as-5. サブルーチン呼び出しのメカニズムkunihikokaneko1
 
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へHiro H.
 
as-1. アセンブラ入門
as-1. アセンブラ入門as-1. アセンブラ入門
as-1. アセンブラ入門kunihikokaneko1
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPUgos-k
 
kagami_comput2016_14
kagami_comput2016_14kagami_comput2016_14
kagami_comput2016_14swkagami
 
KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こうYoshitomo Akimoto
 
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみようC++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみようHiro H.
 
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)洋史 東平
 

Mais procurados (20)

kagami_comput2016_03
kagami_comput2016_03kagami_comput2016_03
kagami_comput2016_03
 
データとは何か
データとは何かデータとは何か
データとは何か
 
kagami_comput2016_01
kagami_comput2016_01kagami_comput2016_01
kagami_comput2016_01
 
Incanterの紹介
Incanterの紹介Incanterの紹介
Incanterの紹介
 
Kihon
KihonKihon
Kihon
 
as-2. メモリと CPU
as-2. メモリと CPUas-2. メモリと CPU
as-2. メモリと CPU
 
as-4. 条件分岐と繰り返し
as-4. 条件分岐と繰り返しas-4. 条件分岐と繰り返し
as-4. 条件分岐と繰り返し
 
kagami_comput2016_05
kagami_comput2016_05kagami_comput2016_05
kagami_comput2016_05
 
as-3. プログラムカウンタと命令実行サイクル
as-3. プログラムカウンタと命令実行サイクルas-3. プログラムカウンタと命令実行サイクル
as-3. プログラムカウンタと命令実行サイクル
 
SICP
SICPSICP
SICP
 
kagami_comput2016_10
kagami_comput2016_10kagami_comput2016_10
kagami_comput2016_10
 
as-5. サブルーチン呼び出しのメカニズム
as-5. サブルーチン呼び出しのメカニズムas-5. サブルーチン呼び出しのメカニズム
as-5. サブルーチン呼び出しのメカニズム
 
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
 
as-1. アセンブラ入門
as-1. アセンブラ入門as-1. アセンブラ入門
as-1. アセンブラ入門
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPU
 
kagami_comput2016_14
kagami_comput2016_14kagami_comput2016_14
kagami_comput2016_14
 
KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こう
 
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみようC++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
 
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
 
P5utda day3
P5utda day3P5utda day3
P5utda day3
 

Semelhante a kagamicomput201806

kagamicomput201807
kagamicomput201807kagamicomput201807
kagamicomput201807swkagami
 
kagami_comput2015_7
kagami_comput2015_7kagami_comput2015_7
kagami_comput2015_7swkagami
 
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
 
kagamicomput201801
kagamicomput201801kagamicomput201801
kagamicomput201801swkagami
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ京大 マイコンクラブ
 
kagamicomput201702
kagamicomput201702kagamicomput201702
kagamicomput201702swkagami
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成眞樹 冨澤
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニックinfinite_loop
 
LineairDB: Fast and Embedded Transactional Key-Value Storage
LineairDB: Fast and Embedded Transactional Key-Value StorageLineairDB: Fast and Embedded Transactional Key-Value Storage
LineairDB: Fast and Embedded Transactional Key-Value StorageSho Nakazono
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 
diffの真髄
diffの真髄diffの真髄
diffの真髄fuku68
 
kagamicomput201701
kagamicomput201701kagamicomput201701
kagamicomput201701swkagami
 
コンピュータの構成と設計 第3版 第2章 勉強会資料
コンピュータの構成と設計 第3版 第2章 勉強会資料コンピュータの構成と設計 第3版 第2章 勉強会資料
コンピュータの構成と設計 第3版 第2章 勉強会資料futada
 
Practical Emscripten - Mozilla Vision 2012
Practical Emscripten - Mozilla Vision 2012Practical Emscripten - Mozilla Vision 2012
Practical Emscripten - Mozilla Vision 2012ushiroad
 
Lotus DEvCon 2000 - LotusScript Tips and Techniques
Lotus DEvCon 2000 - LotusScript Tips and TechniquesLotus DEvCon 2000 - LotusScript Tips and Techniques
Lotus DEvCon 2000 - LotusScript Tips and TechniquesHiroaki Komine
 
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...Masahiro Sakai
 
kagamicomput201802
kagamicomput201802kagamicomput201802
kagamicomput201802swkagami
 
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Yuya Unno
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッションarctic_tern265
 

Semelhante a kagamicomput201806 (20)

kagamicomput201807
kagamicomput201807kagamicomput201807
kagamicomput201807
 
kagami_comput2015_7
kagami_comput2015_7kagami_comput2015_7
kagami_comput2015_7
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 
kagamicomput201801
kagamicomput201801kagamicomput201801
kagamicomput201801
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
kagamicomput201702
kagamicomput201702kagamicomput201702
kagamicomput201702
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
LineairDB: Fast and Embedded Transactional Key-Value Storage
LineairDB: Fast and Embedded Transactional Key-Value StorageLineairDB: Fast and Embedded Transactional Key-Value Storage
LineairDB: Fast and Embedded Transactional Key-Value Storage
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
diffの真髄
diffの真髄diffの真髄
diffの真髄
 
Cpu cache arch
Cpu cache archCpu cache arch
Cpu cache arch
 
kagamicomput201701
kagamicomput201701kagamicomput201701
kagamicomput201701
 
コンピュータの構成と設計 第3版 第2章 勉強会資料
コンピュータの構成と設計 第3版 第2章 勉強会資料コンピュータの構成と設計 第3版 第2章 勉強会資料
コンピュータの構成と設計 第3版 第2章 勉強会資料
 
Practical Emscripten - Mozilla Vision 2012
Practical Emscripten - Mozilla Vision 2012Practical Emscripten - Mozilla Vision 2012
Practical Emscripten - Mozilla Vision 2012
 
Lotus DEvCon 2000 - LotusScript Tips and Techniques
Lotus DEvCon 2000 - LotusScript Tips and TechniquesLotus DEvCon 2000 - LotusScript Tips and Techniques
Lotus DEvCon 2000 - LotusScript Tips and Techniques
 
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
 
kagamicomput201802
kagamicomput201802kagamicomput201802
kagamicomput201802
 
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
 

Mais de swkagami

kagamicomput201814
kagamicomput201814kagamicomput201814
kagamicomput201814swkagami
 
kagamicomput201813
kagamicomput201813kagamicomput201813
kagamicomput201813swkagami
 
kagamicomput201812
kagamicomput201812kagamicomput201812
kagamicomput201812swkagami
 
kagamicomput201811
kagamicomput201811kagamicomput201811
kagamicomput201811swkagami
 
kagamicomput201810
kagamicomput201810kagamicomput201810
kagamicomput201810swkagami
 
kagamicomput201809
kagamicomput201809kagamicomput201809
kagamicomput201809swkagami
 
kagamicomput201808
kagamicomput201808kagamicomput201808
kagamicomput201808swkagami
 
kagamicomput201805
kagamicomput201805kagamicomput201805
kagamicomput201805swkagami
 
kagamicomput201804
kagamicomput201804kagamicomput201804
kagamicomput201804swkagami
 
kagamicomput201803
kagamicomput201803kagamicomput201803
kagamicomput201803swkagami
 
kagamicomput201714
kagamicomput201714kagamicomput201714
kagamicomput201714swkagami
 
kagamicomput201713
kagamicomput201713kagamicomput201713
kagamicomput201713swkagami
 
kagamicomput201712
kagamicomput201712kagamicomput201712
kagamicomput201712swkagami
 
kagamicomput201711
kagamicomput201711kagamicomput201711
kagamicomput201711swkagami
 
kagamicomput201710
kagamicomput201710kagamicomput201710
kagamicomput201710swkagami
 
kagamicomput201709
kagamicomput201709kagamicomput201709
kagamicomput201709swkagami
 
kagamicomput201708
kagamicomput201708kagamicomput201708
kagamicomput201708swkagami
 
kagamicomput201705
kagamicomput201705kagamicomput201705
kagamicomput201705swkagami
 
kagamicomput201703
kagamicomput201703kagamicomput201703
kagamicomput201703swkagami
 
kagami_comput2016_13
kagami_comput2016_13kagami_comput2016_13
kagami_comput2016_13swkagami
 

Mais de swkagami (20)

kagamicomput201814
kagamicomput201814kagamicomput201814
kagamicomput201814
 
kagamicomput201813
kagamicomput201813kagamicomput201813
kagamicomput201813
 
kagamicomput201812
kagamicomput201812kagamicomput201812
kagamicomput201812
 
kagamicomput201811
kagamicomput201811kagamicomput201811
kagamicomput201811
 
kagamicomput201810
kagamicomput201810kagamicomput201810
kagamicomput201810
 
kagamicomput201809
kagamicomput201809kagamicomput201809
kagamicomput201809
 
kagamicomput201808
kagamicomput201808kagamicomput201808
kagamicomput201808
 
kagamicomput201805
kagamicomput201805kagamicomput201805
kagamicomput201805
 
kagamicomput201804
kagamicomput201804kagamicomput201804
kagamicomput201804
 
kagamicomput201803
kagamicomput201803kagamicomput201803
kagamicomput201803
 
kagamicomput201714
kagamicomput201714kagamicomput201714
kagamicomput201714
 
kagamicomput201713
kagamicomput201713kagamicomput201713
kagamicomput201713
 
kagamicomput201712
kagamicomput201712kagamicomput201712
kagamicomput201712
 
kagamicomput201711
kagamicomput201711kagamicomput201711
kagamicomput201711
 
kagamicomput201710
kagamicomput201710kagamicomput201710
kagamicomput201710
 
kagamicomput201709
kagamicomput201709kagamicomput201709
kagamicomput201709
 
kagamicomput201708
kagamicomput201708kagamicomput201708
kagamicomput201708
 
kagamicomput201705
kagamicomput201705kagamicomput201705
kagamicomput201705
 
kagamicomput201703
kagamicomput201703kagamicomput201703
kagamicomput201703
 
kagami_comput2016_13
kagami_comput2016_13kagami_comput2016_13
kagami_comput2016_13
 

Último

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Último (7)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

kagamicomput201806

  • 1. 東北大学 工学部 機械知能・航空工学科 2018年度 クラスC3 D1 D2 D3 情報科学基礎 I 大学院情報科学研究科 鏡 慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ 6. MIPSの命令と動作 ― 演算・ロード・ストア (教科書6.3節,6.4節 命令一覧は p.113)
  • 2. 2鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) レジスタ間の演算命令 (C言語) (疑似的な MIPSアセンブリ言語) c = a + b; addu $c, $a, $b # $c ← $a + $b • ただし,変数 a, b, c の内容がそれぞれレジスタ a, b, c に置 かれているとする (「$a」でレジスタaの値を表す) • 以下,特に断らない限り変数は整数 (int) とする • #以下は説明用のコメント.アセンブリ言語の一部ではない • addu をオペコード,$c, $a, $b をオペランドと呼ぶ • 特に$cを出力オペランド,$a, $bを入力オペランドと呼ぶ
  • 3. 3鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 例 (C言語) (疑似的な MIPSアセンブリ言語) e = (a + b) - (c + d); addu $e, $a, $b # $e ← $a + $b addu $t, $c, $d # $t ← $c + $d subu $e, $e, $t # $e ← $e - $t • レジスタ t のように計算の都合上一時的に使われるレジスタを 一時レジスタ (temporary register) と呼ぶ • addu, subu の u は unsigned の略である.add 命令,sub 命令も計算内 容は同じだが,オーバフローが起きたときに例外処理が行われる.C言語 では通常オーバフローは無視する ただし,変数 a~e の内容がそれぞれレ ジスタ a~e に置かれており,それ以外 にレジスタ t が自由に使えるとする
  • 4. 4鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 資料: 主なレジスタ間演算命令 命令 説明 addu $c, $a, $b $c ← $a + $b (add unsigned の略) subu $c, $a, $b $c ← $a – $b (subtract unsigned の略) and $c, $a, $b $c ← $a & $b or $c, $a, $b $c ← $a | $b nor $c, $a, $b $c ← ~($a | $b) xor $c, $a, $b $c ← $a ^ $b sll $c, $a, $b $c ← $a << $b (shift left logical の略) srl $c, $a, $b $c ← $a >> $b (shift right logical の略) slt $c, $a, $b 符号つきで $a < $b ならば $c ← 1; さもなくば $c ← 0 (set on less than の略) sltu $c, $a, $b 符号無しで $a < $b ならば $c ← 1; さもなくば $c ← 0 (set on less than unsigned)
  • 5. 5鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) MIPSのレジスタ ここまでは便宜上,レジスタ名として変数名をそのまま用いて来 たが,実際には MIPS には a, b, c などのような名前のレジスタ は存在しない 実際には,32本のレジスタに 0 ~ 31 の番号がついており,そ の番号により指定する addu $10, $8, $9 # $10 ← $8 + $9 • このままではわかりにくいので,次ページのような別名がつい ている • 0番レジスタは,常に値0が読み出される特殊なレジスタである
  • 6. 6鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 例題 1. レジスタ s0 の内容を s1 にコピーする命令を示せ.(ヒント: レジスタ $zero を活用する.一般に,同じ動作をする命令 は一通りとは限らない) • この操作はよく使うので,マクロ命令を用いて move $s1, $s0 # $s1 ← $s0 と書いてよいことになっている. 2. レジスタ s0 の内容の各ビットを反転した結果を s1 に保存 する命令を示せ.(ヒント: nor と $zero を活用する)
  • 7. 7鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 例題 解答例 1. 例えば以下の各命令 or $s1, $s0, $zero or $s1, $zero, $s0 addu $s1, $s0, $zero ほか多数 2. 例えば以下の命令 nor $s1, $s0, $zero
  • 8. 8鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 資料: レジスタ一覧 番号表示 別名 説明 $0 $zero 常にゼロ $1 $at アセンブラ用に予約 $2, $3 $v0, $v1 関数からの戻り値用 $4 ~ $7 $a0 ~ $a3 関数への引数用 $8 ~ $15 $t0 ~ $t7 (主に)一時レジスタ $16 ~ $23 $s0 ~ $s7 (主に)変数割り当て用 $24, $25 $t8, $t9 (主に)一時レジスタ $26, $27 $k0, $k1 OS用に予約 $28 $gp グローバルポインタ $29 $sp スタックポインタ $30 $s8 (主に)変数割り当て用 $31 $ra リターンアドレス
  • 9. 9鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 命令フェッチと命令デコードの動作 メモリ 32ビットALU 32x32ビット レジスタ PC 命令デコーダ アドレス(32ビット) データ(8, 16, 32ビット) 次PC計算 制御回路 mux mux mux は選択回路 (1) 命令 読み出し (2) 命令 デコード (3) PC ← PC + 4
  • 10. 10鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) レジスタ間演算の動作 メモリ 32ビットALU 32x32ビット レジスタ PC 命令デコーダ アドレス(32ビット) データ(8, 16, 32ビット) 次PC計算 制御回路 mux mux mux は選択回路 (1) レジスタ 読み出し (3) レジスタ 書き込み (2) 演算
  • 11. 11鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) レジスタ-即値間の演算命令 (C言語) (MIPSアセンブリ言語) y = x + 100; addu $s1, $s0, 100 # $s1 ← $s0 + 100 • 命令内で直接指定される定数を即値(immediate)と呼ぶ. • 演算命令は,2つめの入力オペランドとして即値を取れる. • 1つめは必ずレジスタ.出力オペランドももちろんレジスタ • 即値を取る addu 命令は,実際には addiu という命令として実行される(ア センブラが自動的に変換する.SPIMの実行画面にも注目) • 即値を取る subu 命令は,実際には addiu 命令に符号反転した即値を渡す ことで実行される. ただし,変数 x, y の内容がそれぞれレジスタ s0, s1 に置かれているとする
  • 12. 12鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 例 (C言語) (MIPSアセンブリ言語) y = x - 8; z = 15; subu $s1, $s0, 8 # $s1 ← $s0 - 8 or $s2, $zero, 15 # $s2 ← 15 ただし,変数 x, y, z の内容がそれぞれレジス タ s0, s1, s2 に置かれているとする • 2行目のようにレジスタへの定数代入よく行われるので,li (load immediate) というマクロ命令でも書けるようになっている. li $s2, 15 # $s2 ← 15
  • 13. 13鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 資料: 主なマクロ命令 命令 説明 move $a, $b $a ← $b # or $a, $zero, $b と等価 li $a, imm $a ← imm # or $a, $zero, imm と等価 (load immediate) nop 何もしない # sll, $zero, $zero, $zero と等価 (no operation) ハードウェアとして用意されているわけではなく,アセンブラが他の命令 (の組み合わせ)に変換することによって実現される命令
  • 14. 14鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) レジスタ-即値間演算の動作 メモリ 32ビットALU 32x32ビット レジスタ PC 命令デコーダ アドレス(32ビット) データ(8, 16, 32ビット) 次PC計算 制御回路 mux mux mux は選択回路 (1) レジスタ 読み出し ・即値生成 (2) 演算 (3) レジスタ 書き込み
  • 15. 15鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) ロード・ストア命令 • レジスタとメモリアドレスを指定して,相互間でデータ転送を行う • メモリアドレスの指定方法をアドレッシングモードと呼ぶ • MIPSの場合,アドレッシングモードは1つしかない lw $s1, 12($s0) # $s1 ← mem[12 + $s0] • 操作対象のメモリアドレス(実効アドレス)はレジスタ s0 の値と 定数 12 を加えたもの • 例えばレジスタ s0 に 10000 が保存されていたとすると,アドレ ス 10012 から始まる 4 バイト (= 1 ワード) のデータを読み出し, レジスタ s1 に書き込む
  • 16. 16鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 資料: 主なロード・ストア命令 • 他に,half word 単位や byte 単位のロード命令,ストア命令がある 命令 説明 lw $t, offset($base) $t ← mem[offset + $base] (load word) sw $t, offset($base) mem[offset + $base] ← $t (store word)
  • 17. 17鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 例 (C言語) (MIPSアセンブリ言語) c = a + b; lw $t0, 0($sp) # $t0 ← mem[$sp + 0] lw $t1, 4($sp) # $t1 ← mem[$sp + 4] addu $t2, $t0, $t1 # $t2 ← $t0 + $t1 sw $t2, 8($sp) # mem[$sp + 8] ← $t2 0x7ffff008 0x7ffff004 0x7ffff000 sp 0x7ffff000 a b c ただし,各変数は右図のよう にメモリに割り当てられている とし,レジスタ t0, t1, t2が自由 に使えるとする.以下同様. ※ 実際のアドレスがいくつになるかは場合により異なる
  • 18. 18鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 例 (C言語) (MIPSアセンブリ言語) int i; int x[3]; /* 中略 */ x[i] = 300; addu $t0, $sp, 4 # $t0 ← $sp + 4 lw $t1, 0($sp) # $t1 ← mem[$sp + 0] sll $t1, $t1, 2 # $t1 ← $t1 × 4 addu $t0, $t0, $t1 # $t0 ← $t0 + $t1 li $t2, 300 # $t2 ← 300 sw $t2, 0($t0) # mem[$t0] ← $t2 0x7ffff00c 0x7ffff008 0x7ffff004 0x7ffff000 sp i x[0] x[1] x[2] 0x7ffff000
  • 19. 19鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) ロード命令の動作 メモリ 32ビットALU 32x32ビット レジスタ PC 命令デコーダ アドレス(32ビット) データ(8, 16, 32ビット) 次PC計算 制御回路 mux mux mux は選択回路 (1) 実効アド レス計算 (2) メモリ読み出し
  • 20. 20鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) ストア命令の動作 メモリ 32ビットALU 32x32ビット レジスタ PC 命令デコーダ アドレス(32ビット) データ(8, 16, 32ビット) 次PC計算 制御回路 mux mux mux は選択回路 (1) 実効アド レス計算 (2) メモリ書き込み
  • 21. 例(余談):スーパーマリオブラザーズ256W 21鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) ファミリーコンピュータ用ゲーム「スーパーマリオブラザーズ」 (任 天堂, 1985)では,以下のような操作により,通常は 1 ~ 8 までし か存在しない「ワールド」(ゲーム内のステージの呼称)が,テニス のプレイヤの位置に応じて最大 256 種類出現する現象が生じた. • ゲームプレイ中に電源を切らずにゲームカセットをゲーム機本 体から引き抜き, • 別のゲーム「テニス」(任天堂, 1984)のカセットを挿入してリセッ トボタンを押し,しばらくプレイした後に, • 同様にカセットを抜き,スーパーマリオブラザーズに戻してリセッ トボタンを押し,プレイを開始する. この事実から推測できることを述べよ. (2014年度期末試験・改題)
  • 22. 22鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) https://www.youtube.com/watch?v=AXV05nwZtxo
  • 23. 23鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) world 1 map data world 2 map data …ワールド番号(0-7) プレイヤ位置(0-255) マップデータ 開始アドレス マップデータ サイズ Super Mario Bros. Tennis 各ワールドのマップデータ開始アドレス = マップデータ開始アドレス + ワールド番号 × マップデータサイズ このような不具合は, バッファオーバランと総称される
  • 24. 24鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 練習問題 lw $t0, 0($sp) addu $t0, $t0, 3 sw $t0, 0($sp) lw $t1, 4($sp) lw $t0, 8($sp) sll $t0, $t0, $t1 sw $t0, 8($sp) lw $t0, 12($sp) slt $t0, $t0, $t1 sw $t0, 12($sp) 4要素の4バイト整数型からなる配列が右図のよ うにメモリに配置されているとする.x[0] … x[3] に格納されている値がそれぞれ 1, 3, 5, 7 の状 態から,以下のコードを実行した.実行後の x[0] … x[3] の値はどうなっているか. 0x7ffff00c 0x7ffff008 0x7ffff004 0x7ffff000 sp x[0] x[1] x[2] x[3] 0x7ffff000
  • 25. 25鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 練習問題 解答例 lw $t0, 0($sp) # $t0  x[0] (= 1) addu $t0, $t0, 3 # $t0  $t0 + 3 (= 1 + 3) sw $t0, 0($sp) # x[0]  $t0 (= 4) lw $t1, 4($sp) # $t1  x[1] (= 3) lw $t0, 8($sp) # $t0  x[2] (= 5) sll $t0, $t0, $t1 # $t0  $t0 << $t1 (= 5 << 3) sw $t0, 8($sp) # x[2]  $t0 (= 40) lw $t0, 12($sp) # $t0  x[3] (= 7) slt $t0, $t0, $t1 # $t0  ($t0 < $t1) ? 1 : 0 sw $t0, 12($sp) # x[3]  $t0 (= 0) 結局 x[0] … x[3] は 4, 3, 40, 0 になる.