作者black32044 (大黑)
看板ASM
标题[问题] C语言转组合语言
时间Fri Mar 2 22:14:49 2012
原题是这样的
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