汇编语言中的简单代码

时间:2016-04-07 14:16:54

标签: assembly arm raspberry-pi

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

.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

1 个答案:

答案 0 :(得分:2)

ABI要求堆栈指针与8个字节的多个对齐,main函数将堆栈指针递减4,使其不对齐。 据推测,printf使用需要8字节对齐的指令。