【问题标题】:Error: Junk at end of line -as and -o error with ARM错误:ARM 的行尾出现垃圾 -as 和 -o 错误
【发布时间】:2020-02-06 22:15:41
【问题描述】:

我正在尝试编写我的第一个 ARM 程序并在尝试运行时收到此错误 "as -o labl1.o lab1.s"

lab1.s:3: Error: junk at end of line, first unrecognized character is `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}

非常感谢提供有用文档或帮助调试的链接,谢谢!

【问题讨论】:

    标签: arm putty machine-code


    【解决方案1】:

    您可能会混淆字符串的地址和要为其分配的值:正如在 GNU 中指定为 documentation 一样,.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 的未定义引用。关于我在哪里出错的任何想法?
    • 我的荣幸。顺便说一句,如果答案有帮助,您可以接受它,将不胜感激。我无法重现您的问题,即使链接器按预期抱怨缺少 _start_printf 符号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2022-01-14
    • 1970-01-01
    • 2022-01-15
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多