首页 > 解决方案 > ARM 程序集打印大且不正确的值

问题描述

这是我认为最相关的代码,还有其他值存储到 [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

完整的粘贴箱

标签: assemblyarm

解决方案


推荐阅读