0

我有一段 C++ 代码需要使用直接翻译转换为 mips。我已经完成了大部分工作,它是一个 do 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
4

1 回答 1

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。

于 2012-11-03T17:54:13.587 回答