错误:行末尾的垃圾-使用ARM时发生as和-o错误

错误:行末尾的垃圾-使用ARM时发生as和-o错误,arm,putty,machine-code,Arm,Putty,Machine Code,我正在尝试编写我的第一个ARM程序,当我尝试运行时出现了这个错误 “as-o标签1.o标签1.s” 我非常不确定我在这里做错了什么,因为我唯一使用s的时候是在我的2个字符串中,并且对我在代码中哪里出错感到非常困惑 @Data .data string1: .asciz string2: .asciz @Code .text .global main .extern printf main: push {ip, lr} push {r0, r1, r2} ldr r0, =string1

我正在尝试编写我的第一个ARM程序,当我尝试运行时出现了这个错误 “as-o标签1.o标签1.s”

我非常不确定我在这里做错了什么,因为我唯一使用s的时候是在我的2个字符串中,并且对我在代码中哪里出错感到非常困惑


@Data
.data
string1: .asciz
string2: .asciz

@Code
.text
.global main
.extern printf

main:

push {ip, lr}

push {r0, r1, r2}
ldr r0, =string1
mov r1, #34
mov r2, #56
bl printf
pop {r0,r1,r2}

push {r0}
ldr r0, =string2
bl printf
pop {r0}

pop {ip, pc}


链接到有用的文档或帮助调试将不胜感激,谢谢

您可能会混淆字符串的地址和要分配给它们的值:
.asciz
指令确实需要一个字符串参数-稍微修改一下的代码版本不会正确汇编:

.data
string1: .asciz "string1"
string2: .asciz "string2"

string1
现在是字节
“string1\x00
”所在地址的标签,
string2
是字节
“string2\x00”
所在地址的标签。

非常感谢您的帮助!使用该方法分配字符串允许我将代码从程序集更改为计算机,但是运行“gcc-o lab1 lab1.o”会给我带来(.text+0x30)和(.text+0x34)错误,告诉我对字符串1和2有未定义的引用。你知道我会错在哪里吗?我很乐意。顺便说一句,如果答案有帮助的话,你可以接受,我们将不胜感激。我无法重现您的问题,尽管链接器如预期般抱怨缺少
\u start
\u printf
符号。
.data
string1: .asciz "string1"
string2: .asciz "string2"