我需要将一些 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/