我是使用Raspberry Pi的汇编语言的新手。我试图在Raspberry Pi 3(ARM 8086)上运行这个简单的程序。它不会导致错误,但是当我在编译并运行as _o example.o example.s
,gcc _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
答案 0 :(得分:2)
ABI要求堆栈指针与8个字节的多个对齐,main
函数将堆栈指针递减4,使其不对齐。
据推测,printf
使用需要8字节对齐的指令。