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

MIPSのまとめ
小テスト問題
小テスト問題: MIPSのまとめ
以下に示すC言語プログラムをMIPSアセンブリ言語に変換せ
よ.また,機械語に変換せよ.ただし,
 配列Aは100語(1語は32ビット)からなり,その開始アドレス(ベースアドレ
ス)はレジスタ$s2に格納されているとする
 各変数のレジスタ割当は下表とする
 バイトアドレスのビッグ・エンディアン方式を前提とする
 レジスタ$t0~$t7やゼロレジスタ($zero)は自由に使用して良い
 プログラムの開始アドレスは0x00000000(16進表現)とする
f = 0;
for (i=0; i<10; i++) {
if (i >= 5)
f = f + i + 1;
else
f = f + A[i];
f = f * 2;
}
変数名
レジスタ
f
$s0
i
$s1
A[ ]
$s2
定数10
$t1
定数5
$t2
九州大学工学部電気情報工学科
小テスト問題: MIPSのまとめ
add
add
FOR:
slt
beq
slt
bne
add
addi
j
ELSE:
add
add
add
lw
add
EXIT_IF: add
addi
j
EXIT_FOR:
f = 0;
$s0, $zero, $zero # fを0に初期化
for (i=0; i<10; i++) {
$s1, $zero, $zero
# iを0に初期化
if (i >= 5)
$t3, $s1, $t1
# i<10なら$t3←1
$t3, $zero, EXIT_FOR # i>=10ならFORを終了 f = f + i + 1;
$t3, $s1, $t2
# i<5なら$t3←1
else
$t3, $zero, ELSE # i<5ならELSEへ分岐
f = f + A[i];
$s0, $s0, $s1
#f=f+i
f = f * 2;
$s0, $s0, 1
# fに10進数1を加算
}
EXIT_IF
# EXIT_IFへ分岐
変数名
レジ
$t4, $s1, $s1
# 変数i($s1)×2
スタ
$t4, $t4, $t4
# 変数i($s1)×4
$t4, $t4, $s2
# A[i]のアドレスを計算
f
$s0
$t5, 0($t4)
# A[i]を$t5にロード
i
$s1
$s0, $s0, $t5
# f = f + A[i]
$s0, $s0, $s0
#f=f*2
A[ ]
$s2
$s1, $s1, 1
# 変数i($s1)+1
定数10
$t1
FOR
# for文の先頭へジャンプ
定数5
$t2
九州大学工学部電気情報工学科
小テスト問題: MIPSのまとめ
FOR:
ELSE:
EXIT_IF:
add
add
slt
beq
slt
bne
add
addi
j
add
add
add
lw
add
add
addi
$s0, $zero, $zero
$s1, $zero, $zero
$t3, $s1, $t1
$t3, $zero, EXIT_FOR
$t3, $s1, $t2
$t3, $zero, ELSE
$s0, $s0, $s1
$s0, $s0, 1
EXIT_IF
$t4, $s1, $s1
$t4, $t4, $t4
$t4, $t4, $s2
$t5, 0($t4)
$s0, $s0, $t5
$s0, $s0, $s0
$s1, $s1, 1
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
000000_00000_00000_10000_00000_100000
000000_00000_00000_10001_00000_100000
000000_10001_01001_01011_00000_101010
000100_01011_00000_0000000000001101
000000_10001_01010_01011_00000_101010
000101_01011_00000_0000000000000011
000000_10000_10001_10000_00000_100000
001000_10000_10000_0000000000000001
000010_00000000000000000000001110
000000_10000_10000_01100_00000_100000
000000_01100_01100_01100_00000_100000
000000_01100_10010_01100_00000_100000
100011_01100_01101_0000000000000000
000000_10000_01101_10000_00000_100000
000000_10000_10000_10000_00000_100000
001000_10001_10001_0000000000000001
j
FOR
# 000010_00000000000000000000000010
EXIT_FOR:
九州大学工学部電気情報工学科
 Created by Koji Inoue, 2005 (R1.00)
九州大学工学部電気情報工学科