assembly - 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
解决方案
推荐阅读
- c# - How to schedule a Task to be performed a few minutes later?
- javascript - SSG(Nuxt.js、Gatsby)在做什么?
- c# - install package globally in Net 5.0
- java - Spring Security,注释@Secured 不起作用
- php - 尝试使用 XAMPP 访问虚拟主机上的 Laravel 项目时无法检索请求的 URL
- ruby-on-rails - Ruby On Rails - missing FROM-clause entry for table
- c++ - vector destructor error for matrix multiplication function c++
- clang - Clang build error: lib/CheckerDependencyHandlingAnalyzerPlugin.so] Error 1
- python - Adding numbers in python and in line using function recursion
- vue.js - 在 VUE 3 的 Async 方法中调用 SweetAlert2