【问题标题】:simple codes in assembly language汇编语言中的简单代码
【发布时间】:2016-04-07 14:16:53
【问题描述】:

我是使用 Raspberry Pi 的汇编语言的新手。我试图在 Raspberry Pi 3(ARM 8086)上运行这个简单的程序。它不会导致错误,但是当我在编译和运行as _o example.o example.sgcc _o example examle.s./example 后尝试在终端中查看结果时。执行结果是segmentation fault,能帮帮我吗?

.align 2
    .text
    .global main
main:
    stmfd r13!, {r14}

    mov r0,#1
    bl print

    mov r0,#2
    bl print

    mov r0,#3
    bl print

    ldmfd r13!,{pc} @ return to OS

print:
    stmfd r13!, {r0-r3,r12,r14}
    mov r1,r0
    ldr r0, =num_str
    bl printf
    ldmfd r13!, {r0-r3,r12,pc}

.data

    .align 2
num_str:
    .asciz “%d\n”
.end

【问题讨论】:

  • "8086" 嗯?此外,您所说的命令中有很多拼写错误(_oexamle.sfirstexample 不匹配)。
  • @Michael 你是对的,非常感谢你注意到这一点,我已经把它改成了例子,结果是分段错误。
  • 这段代码对我来说很好用,前提是 “” 引号被替换为语法正确的 "" 引号 - 我认为这些只是此处发布的人工制品,而不是您的实际代码,因为它们使汇编器抛出你说不会发生的错误。
  • 我改变了它,我得到了同样的错误。谢谢。

标签: assembly arm raspberry-pi


【解决方案1】:

ABI 要求堆栈指针与 8 字节的倍数对齐,您的 main 函数将堆栈指针减 4 使其未对齐。 大概printf使用了一条需要8字节对齐的指令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    相关资源
    最近更新 更多