[問題] C語言轉組合語言
原題是這樣的
switch(k){
case 0:f=i+j ; break ; /*k=0*/
case 1:f=g+h ; break ; /*k=1*/
case 2:f=g-h ; break ; /*k=2*/
case 3:f=i-j ; break ; /*k=3*/
}
其中變數f,g,h,i,j,k對應到$s0,$s1,$s2,$s3,$s4,$s5暫存器
且$t2暫存器為4,試問MIPS組合語言為何?
[解]
slt $t3,$s5,$Zero
bne $t3,$Zero,Exit
slt $t3,$s5,$t2
beq $t3,$Zero,Exit
add $t1,$s5,$s5
add $t1,$t1,$t1
add $t1,$t1,$t4 #jump table起始位置在$t4位置 (這邊我看不懂)
lw $t0, 0($t1)
jr $t0
L0: add $s0,$s3,$s4
j Exit
L1: add $s0,$s1,$s2
j Exit
L2: sub $s0,$s1,$s2
j Exit
L3: sub $s0,$s3,$s4
Exit:
前面幾行大概都看得懂,前四行都是在設定range,第五行開始把他定在陣列
那我是不了解起始位置是怎麼來的,還有他的L0,L1,L2,L3是怎麼跳的,
因為我看不出來他go to的動作
最近剛學計組....感謝哦!!!!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.100.76.46
ASM 近期熱門文章
PTT數位生活區 即時熱門文章