C 到 MIPS - 函数和数组

2024-04-08

我正在尝试将以下 C 代码转换为 MIPS 程序集。

数组的基地址存储在$a0中。变量索引存储在$a1中。变量 x 存储在 $t0 中。

void ld_array(char array[], int index) {
  x = array[index];
}

当索引是一个定义的整数(例如:5)时,我已经完成了

lbu $t0, 5($a0) 

然而,lbu $t0, $a1($a0)是不正确的语法。


您可以使用指针算术来计算您尝试访问的数据的地址。

array[index]相当于*(array+index)。您可以使用 mips 执行相同的操作addu操作说明。

假设$a0是数组指针并且$a1是您可以使用的索引:

addu $t0, $a0, $a1 # tmp = array+index
lbu  $t0, ($t0)    # x = *tmp

我们正在使用addu因为它是一个无符号操作,因为指针是无符号字。这意味着它不会触发溢出异常。

假设您的数组是单词数组,您将使用相同的方法,但首先将索引乘以 4(因为 32 位中的单词长度为 4 个字节)。

sll  $t0, $a1, 2   # index << 2 = index * 4
addu $t0, $a0, $t0 # tmp = array+index
lw   $t0, ($t0)    # x = array[index]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 到 MIPS - 函数和数组 的相关文章

随机推荐