【发布时间】:2015-04-15 15:21:13
【问题描述】:
我正在尝试用 C 编写下面的代码,但我在这样做时遇到了一个真正的问题,所以如果有人能帮助我并同时向我解释,我将不胜感激。
array .word ?
mystery:
add r2,r0,r0
addi r7,r0,32
loop:
movia r4, array
slli r3,r2,2
add r5,r3,r4
ldw r14, (r5)
add r15, r3, r14
stw r0, (r15)
addi r2, r2, 1
bge r7,r2,loop
ret
【问题讨论】:
-
你应该问一个更具体的问题。见stackoverflow.com/help/how-to-ask。
-
为什么不具体?代码在 ASSEMBLY 中,我必须用 C 编写它
-
我假设这是一个名为“mystery”的函数,但函数的参数应该在 r4-r7 中传递。然而,这里的情况似乎并非如此。 r0 值的假设是什么?它是写入前唯一使用的寄存器。这个函数应该有返回值吗?约定是返回 r2-r3 中的值。基本上我们需要了解这里使用的调用约定才能翻译成 C。
-
寄存器 r0 包含零,我没有调用代码。没错,寄存器 r4-r7 用于传递参数,而寄存器 r2 用于返回值。第一行怎么样?有人知道它的用途吗?
标签: c assembly reverse-engineering nios