Вот то, что я считаю наиболее релевантным кодом, есть другие значения, сохраненные вплоть до [fp, # -24]. Я пытался жестко кодировать значения в [fp, # -8] и [fp, # -12]. Я не уверен, происходит ли какое-то неправильное управление стеками или я просто пропускаю какой-то важный компонент функции printf.
.data
var: .word
prompt1: .asciz "Largest number:\n"
prompt2: .asciz "Smallest number:\n"
input: .asciz "%d"
test: .asciz "%d and %d\n"
.align 2
.text
.align 2
.global main
.func main
main:
push {fp, lr}
add fp, sp, #4
sub sp, sp, #20
ldr r0, =prompt1
bl printf
@ var1
ldr r0, =input
sub r1, fp, #8
bl scanf
ldr r0, =prompt2
bl printf
@ var2
ldr r0, =input
sub r1, fp, #12
bl scanf
ldr r0, =test
str r1, [fp, #-8]
str r2, [fp, #-12]
bl printf
sub sp, fp, #4
pop {fp, pc}
.endfunc
возвращает
[large number] and 0
РЕДАКТИРОВАТЬ: потенциально полезная информация из GDB
(gdb) start
Temporary breakpoint 1 at 0x10438: file gcd.s, line 19.
Starting program: /home/pi/gcd
Temporary breakpoint 1, main () at gcd.s:19
19 push {fp, lr}
(gdb) step
21 add fp, sp, #4
(gdb) step
24 sub sp, sp, #20
(gdb) step
26 ldr r0, =prompt1
(gdb) step
27 bl printf
(gdb) step
__printf (format=0x21048 "Largest number:\n") at printf.c:33
33 printf.c: No such file or directory.
(gdb) step
_IO_vfprintf_internal (s=0xb6fb7d90 <_IO_2_1_stdout_>,
format=0x21048 "Largest number:\n", format@entry=0x0, ap=..., ap@entry=...)
at vfprintf.c:1278
1278 vfprintf.c: No such file or directory.
(gdb) step
1282 in vfprintf.c
(gdb) step
1293 in vfprintf.c
(gdb) step
1315 in vfprintf.c
(gdb) step
__find_specmb (format=<optimized out>) at vfprintf.c:1304
1304 in vfprintf.c
(gdb) step
_IO_vfprintf_internal (s=0xb6fb7d90 <_IO_2_1_stdout_>,
format=0x21048 "Largest number:\n", format@entry=0x0, ap=..., ap@entry=...)
at vfprintf.c:1315
1315 in vfprintf.c
полный пастин