c - MIPS 到 C 的翻译

标签 c assembly mips reverse-engineering translate

我需要将一些 MIPS 汇编指令翻译成 C 代码。我想我明白了,但这似乎违反直觉。有什么帮助吗?我们将变量 f、g、h、i、j 分别存储在寄存器 $s0、$s1、$s2、$s3 和 $s4 中。数组 A 和 B 的基数分别存储在 $s6 和 $s7 中。 4 字节字。代码中的注释是我自己的。

addi $t0, $s6, 4   # $t0 = A[1]
add $t1, $s6, $0   # $t1 = A[0]
sw $t1, 0($t0)     # $t0 = A[0]
lw $t0, 0($t0)     # $t0 = A[0]
add $s0, $t1, $t0  # f = A[0] + A[0]

我只是觉得我错了。如果我们从不使用它,为什么要先制作 $t0 A[1]?

最佳答案

我认为你完全错了。

addi $t0, $s6, 4 # $t0 = A[1]

addi后,寄存器$t0成为A[1]的内存地址,即&A[1],而不是A[1] 。要获取 A[1] 的值,您需要在完成 addi

后使用 lw

lw $t0, 0($t0) # $t0 =A[1]

关于c - MIPS 到 C 的翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18885288/

相关文章:

c - 如何将自上次打开文件以来经过的秒数转换为小时、分钟和秒?

c - 创建僵尸进程的麻烦

c - 使用C使用TCP连接到端口

assembly - 在 MIPS 中将整数读入局部变量

使用 "push"而不使用 "pop"的 mips 代码

C 指向字符数组的指针

c - 在 C 中计算模数的最优化方法

linux - 如何使用 64 位汇编编程在 Linux 中使用关闭调用?

c - 将 C 翻译为 mips 汇编

memory - MIPS 上的“对齐”指令