2012-11-03 30 views
0

我有一段C++代码需要使用直接转换转换为mips。我大部分都完成了,它是一个while while循环。我只是不明白MIPS中的这一行。在MIPS32汇编中复制数组

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

这行代码不会比较数组的两个元素。这是一项任务。 – sellibitze

+0

您是否正在尝试编写MIPS程序集版本的数组相等性测试?如果没有,我没有得到这个问题。 – sellibitze

+0

什么阻止你将数组的第一个元素的地址加载到CPU寄存器中,通过递增地址遍历循环中的所有元素,将元素加载到其他CPU寄存器并比较它们? – sellibitze

回答

0

这应该让你进入正确的方向。由于这是一个家庭作业问题,我不会给你一个完整的解决方案。

快速参考(MIPS指令,调用约定,等):

http://www.mips.com/media/files/MD00565-2B-MIPS32-QRC-01.01.pdf

,计算一个32位的点积,并在小端的16位矢量的示例组件的功能环境:

http://code.google.com/p/mips32-asm/source/browse/dot32x16.S

在这里你可以看到数组的元素进行访问。

请注意,“.set reorder”使汇编器重新排列指令和/或包括NOP来处理所谓的延迟时隙。如果您的教授希望看到您理解延迟插槽问题,您应该自己正确地订购说明和/或在分支/跳转后编写自己的NOP。

+0

你的链接非常有帮助!谢谢你不给我答案,因为这不是我想要的,我很抱歉因为接受答案这么晚了 –