【发布时间】: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 嗨,非常感谢!它终于链接了,但现在当我尝试运行它时,它说有一条非法指令可悲。现在正在处理那部分。感谢您发现我的错误!
-
问题是你的代码有点结束了。处理器不知道您的程序结束了,它只是尝试将内存中的任何内容作为代码执行,从而导致崩溃。要解决此问题,您必须执行退出系统调用。我看到您可能尝试过这样做,但您忘记设置参数和系统调用号。