【问题标题】:Assembly in c language [closed]c语言汇编[关闭]
【发布时间】:2020-06-16 15:44:06
【问题描述】:

我有汇编形式的代码,我想将其转换为С代码。到目前为止,我知道需要 A 解码器这一事实。我已经下载了 rtdec,但我不明白如何使用它来转换代码。

代码是:

.data
A: 
     .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
     .word 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
     .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
     .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
B: 
     .word 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
     .word 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
     .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
     .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
C:
     .word

.text
     li $8, 0
     li $9, 0
     li $15, 16
     li $16, 4
     la $10, A
     la $11, B
     la $12, C
again:
     lw $13, 0($10)
     lw $14, 0($11)
     add $13, $13, $14
     sw $13, 0($12)
     addi $10, $10,4
     addi $11, $11,4
     addi $12, $12,4
     addi $9, $9,1
     blt $9, $15, again
     li $9,0
     addi $8, $8,1
     blt $8, $16, again
     li $v0, 10
     syscall

【问题讨论】:

  • 请阅读*.com/editing-help(尤其是代码部分)
  • 欢迎来到 SO。我们通常不会为他们做别人的功课。您是否熟悉 MIPS 程序集?你知道这些命令是做什么的(li、la、add 等)吗?或者你知道在哪里查吗?
  • 谢谢。我只需要你的指导而不是解决我的作业。我只是在最近才熟悉 Mips。但我知道那个命令。我对初始化所在的数组 A 和 B 感到困惑
  • 查看答案。这有帮助吗?

标签: c assembly mips


【解决方案1】:

代码使用三个寄存器 - $10、$11 和 $12 - 作为三个数组 A、B 和 C 中的当前位置指针。下面是初始化序列:

 la $10, A
 la $11, B
 la $12, C

所以 $10 跟在 A 后面,$11 跟在 B 后面,$12 跟在 C 后面。让我们看看这些寄存器还会发生什么:

  • lw $13, 0($10) 加载 $10 指向的单词(来自 A 的单词)
  • lw $14, 0($11) 加载 $11 指向的单词(来自 B 的那个)
  • sw $13, 0($12) 存储一个寄存器到 C

最后,三个寄存器都增加了字长,也就是4:

 addi $10, $10,4
 addi $11, $11,4
 addi $12, $12,4

即“移动到 A、B 和 C 中的下一个数组元素”逻辑。

【讨论】:

  • 非常感谢您的帮助! @Seva Alekseyev