将MIPS程序集转换为C语句

时间:2013-04-02 19:39:34

标签: c assembly mips statements

addi $s7, $s7, -4
add  $s7, $s7, $s1
lw   $s0, 4($s7)

假设整数变量i和j在寄存器$ s0和$ s1中。假设整数数组X的基址在寄存器$ s7中。

到目前为止,我有这个:

X = X - 4
X = X + j
i = X - 4 + j

这是对的吗?我不太确定所以只是寻找确认。

2 个答案:

答案 0 :(得分:4)

这是不正确的。请注意,lw指令从内存中读取一个字。

在C中它看起来像

  //int *x;
  x--;            // addi $s7, $s7, -4 decrements pointer to x one element
  x = (int*)((char*)x + j);  // add $s7, $s7, $s1 increments the address pointed by x j elements
  i = *(x+1);     // lw $s0, 4($s7) reads the next element pointed by x

OP评论后的附录:

如果j = $s7是4的倍数(注意每个整数占4个字节),那么它可以在C中重写为i = x[j/4]

答案 1 :(得分:0)

lw - >加载字

语法:lw $ t,offset($ s) 操作:$ t = MEM [$ s + offset]; advance_pc(4);