我有一段C ++代码需要使用直接翻译转换为mips。我完成了大部分工作,它是一个while循环。我只是不明白MIPS中的这一行。
x[i] = y[i];
我不明白如何将其转换为mips,我一直在网上无休止地搜索。我可以得到任何帮助吗?
修改
这就是我所拥有的,但被告知这是不正确的:
la $6, y
Li $7, $1
Add $7, $7, $7
Add $7, $7, $7
Add $8, $6, $7
Lw $6, 0($8)
La $7, x
Li $8, $1
Add $8, $8, $8
Add $8, $8, $8
Add $7, $7, $8
Sw $6, 0($7)
我使用此在线网站作为参考:
http://www.cs.pitt.edu/~xujie/cs447/AccessingArray.htm
第二次编辑
C ++编码
i=0;
do {
x[i]=y[i];
i++;
}
while (i!=j);
MIPS直接翻译
Addi $1, $1, 0
Loop: la $6, y
Li $7, $1
Add $7, $7, $7
Add $7, $7, $7
Add $8, $6, $7
Lw $6, 0($8)
La $7, x
Li $8, $1
Add $8, $8, $8
Add $8, $8, $8
Add $7, $7, $8
Sw $6, 0($7)
Addi $1, $1, 1
Bne $1, $2, loop
以下是我可以使用的所有寄存器,以避免与您混淆:
Variables i j x y 4 (constant) Free
Registers $1 $2 $3 $4 $5 $6, $7, $8
答案 0 :(得分:0)
这应该让你进入正确的方向。由于这是一个家庭作业问题,我不打算给你一个完整的解决方案。
快速参考(MIPS指令,调用约定等):
http://www.mips.com/media/files/MD00565-2B-MIPS32-QRC-01.01.pdf
一个示例汇编函数,用于计算little-Endian环境中32位和16位向量的点积:
http://code.google.com/p/mips32-asm/source/browse/dot32x16.S
在这里,您可以看到如何访问数组元素。
请注意,“。set reorder”使汇编程序重新排序指令和/或包含NOP以处理所谓的延迟槽。如果您的教授希望看到您理解延迟槽问题,您应该自己正确地订购说明和/或在分支/跳转后编写您自己的NOP。