所以我正在尝试为我的 Raspberry Pi 编写一个 ARM 程序集,我让它提示输入两个整数 a 和 b,然后比较它们以查看哪个更大,然后打印哪个数字更大。
我能够读取两个整数,但它总是打印出第二个整数“b”是最大的,然后有时会给我一个分段错误。我已经使用 gbd 来了解为什么我会遇到他的段错误,但我一直无法破译它的含义。
gdb 这么说
程序收到信号 SIGSEGV,分段错误。0x400b5c38 in strchrnul () from /lib/arm-linux-gnueabihf/libc.so.6
我的代码是这样的
.section .rodata
promptA:
.ascii "a: \000"
promptB:
.ascii "b: \000"
readA:
.ascii "%d\000"
readB:
.ascii "%d\000"
printLargest:
.ascii "largest=%d\n\000"
.section .data
.align 2
.comm a,4,4
.comm b,4,4
.text
addra: .word a
addrb: .word b
addrPromptA: .word promptA
addrPromptB: .word promptB
addrReadA: .word readA
addrReadB: .word readB
addrPrintLargest: .word printLargest
main:
stmfd sp!, {fp, lr}
ldr r0, addrPromptA
bl printf
ldr r0, addrReadA
ldr r1, addra
bl scanf
ldr r0, addrPromptB
bl printf
ldr r0, addrReadB
ldr r1, addrb
bl scanf
ldr r0,addra
ldr r0, [r0]
ldr r1, addrb
ldr r1, [r1]
cmp r1, r0
mov r0, r1
bgt bgreater
blt agreater
agreater:
ldr r0, addrPrintLargest
bl printf
bgreater:
ldr r1, addrPrintLargest
bl printf
ldmfd sp!, {fp, pc}
谢谢