在汇编中,如何存储来自 scanf 调用的输入?

Posted

技术标签:

【中文标题】在汇编中,如何存储来自 scanf 调用的输入?【英文标题】:In assembly, how do I store the input from the scanf call? 【发布时间】:2019-09-17 20:04:12 【问题描述】:
input: .asciz "%ld"...

subq $8, %rsp
eaq -8(%rbp), %rsi
movq $input, %rdi
movq $0, %rax
call scanf

我想存储从 scanf 给出的输入并修改它,然后使用打印它

call printf

我该如何解决这个问题?

【问题讨论】:

您已经将输入存储在地址-8(%rbp)的堆栈中。我错过了什么吗? 我是否必须将其保存在另一个寄存器中才能修改它? 不,但无论如何这样做可能会有用。 【参考方案1】:

您可以将输入存储在leaq -8(%rbp), %rsi,然后打印出值

leaq -8(%rbp), %rsi
pushl %rsi          // or %rdi if i'm wrong
pushl $input
call printf

我认为eaq的意思是leaq

【讨论】:

以上是关于在汇编中,如何存储来自 scanf 调用的输入?的主要内容,如果未能解决你的问题,请参考以下文章

汇编中的 Scanf 和 printf 函数,例如 char* 和 double

复利计算

无法理解汇编逻辑

vs2020怎么输数据

scanf和printf的格式

c语言——基本语法