【问题标题】:How do I use the ADDS function in assembly code?如何在汇编代码中使用 ADDS 函数?
【发布时间】:2021-11-27 19:41:21
【问题描述】:

我正在尝试学习汇编语言,并尝试使用 ADDS 函数将前 3 个寄存器中的数字添加到寄存器 0 中。

到目前为止,我有这个:

.global _start
_start:
MOV R1, #5
MOV R2, #6
MOV R3, #7
ADDS R4, R1, R2
ADDS R0, R4, R3
SWI 0

我得到以下错误:

ld:add.s: 文件格式无法识别;视为链接描述文件

ld:add.s:1: 语法错误

我不知道链接器脚本是什么以及它为什么这样对待我的代码,我只是运行了另一个仅包含 MOV 函数的汇编代码,它运行得很好。这可能与我编写 ADDS 函数的方式有关吗?还是我没有开始我的文件?我在我的终端上运行它

 as -o add.o add.s

组装它,效果很好,但是当我尝试将其链接时

ld -o add.o add.s

它抛出错误。任何帮助,将不胜感激。如果它有任何区别,则该文件将保存在我的 Raspberry Pi 上。谢谢!

【问题讨论】:

  • 您的链接器调用错误。对于链接器,您需要传递目标文件的名称和二进制文件的名称,例如ld -o add add.o.
  • @fuz 嗨,非常感谢!它终于链接了,但现在当我尝试运行它时,它说有一条非法指令可悲。现在正在处理那部分。感谢您发现我的错误!
  • 问题是你的代码有点结束了。处理器不知道您的程序结束了,它只是尝试将内存中的任何内容作为代码执行,从而导致崩溃。要解决此问题,您必须执行退出系统调用。我看到您可能尝试过这样做,但您忘记设置参数和系统调用号。

标签: assembly terminal arm


【解决方案1】:

链接器创建 ELF 文件。你必须这样使用它:

ld -o add.elf add.o

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 2016-09-07
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多