我正在尝试将以下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)
的语法不正确。
答案 0 :(得分: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]