作业帮 > 综合 > 作业

c语言的f=g-A[B[4]]怎么转换成mips指令

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/27 08:46:34
c语言的f=g-A[B[4]]怎么转换成mips指令
首先,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
再问: 书上就是用的是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来做。
再问: 对于第二行不是很明白,为什么“此时t2寄存器中存放了A[B[4]]的值。”谢谢解答~~
再答: 你可以看下mips的寻址方式。网上搜索一下,然后你就全知道了。通常汇编程序就是寻址方式麻烦一些。不过mips的很简单,不想8086那么多的寻址方式。得到A[B[4]]就相当于两次寄存器间接寻址。第一条指令得到了B[4],第二条和第一条本质上是一样的。