C到MIPS - 函数和数组

问题描述 投票:0回答:1

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

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

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

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

lbu $t0, 5($a0) 

但是,lbu $t0, $a1($a0)语法不正确。

mips mips32
1个回答
0
投票

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

array[index]相当于*(array+index)。你可以使用addu指令在mips中做同样的事情。

假设$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]
© www.soinside.com 2019 - 2024. All rights reserved.