c语言的f=g-A[B[4]]怎么转换成mips指令
1个回答
2013-10-10
展开全部
首先,A[B][4]的定义不明确,A是int,short还是什么。因为类型决定memory的大小,会影响寻址。
j假如A是int数组。
mips中的寄存器用法你应该知道吧。
zero, at, v0,v1(返回值寄存器) a0-a3(参数寄存器),t0-t7(临时寄存器),s0-s7(方法调用时需要压栈保存的寄存器).t8,t9, gp,sp,fp, ra.等自己查下资料。
ldr t0, A的地址
ldr t1, B的值
sll t1, 4 //第一次乘以4,每个int占4个字节,再乘以4,相当于左移4位。
add t0, t1
ldr t0, [t0]
ldr t1 g的值
sub t1, t0
j假如A是int数组。
mips中的寄存器用法你应该知道吧。
zero, at, v0,v1(返回值寄存器) a0-a3(参数寄存器),t0-t7(临时寄存器),s0-s7(方法调用时需要压栈保存的寄存器).t8,t9, gp,sp,fp, ra.等自己查下资料。
ldr t0, A的地址
ldr t1, B的值
sll t1, 4 //第一次乘以4,每个int占4个字节,再乘以4,相当于左移4位。
add t0, t1
ldr t0, [t0]
ldr t1 g的值
sub t1, t0
更多追问追答
追问
书上就是用的是A[B[4]],A,B都是数组,就当它们都是int型的,麻烦再解答一下
追答
我刚刚看成A[B][4]了。不好意思。
ldr t1, [B], #16 //因为4个int,相当于偏移16个字节。
ldr t2, [t1] //此时t2寄存器中存放了A[B[4]]的值。
rsb t2, t2, g //如果g不是寄存器数还需要先加载到寄存器中才行哦。
另外 rsb指令是反向减法,也就是相当于 g-t2. 你也可以用sub来做。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询