尝试从用户那里获取两个数字,并将它们保留在堆栈中并在汇编中从堆栈中打印它们

问题描述 投票:0回答:1

我一直在尝试用汇编语言编写一个程序,其中我得到两个数字,稍后我将它们作为字符传递,将它们保存在堆栈中,然后将它们一一取出并打印它们。 我以这种方式得到数字 - “%c %c” - 我似乎无法同时得到两个数字,只有它得到的第一个和第二个是 。 我会提到我在这个程序中使用了 prontf 和 scanf。

到目前为止,我从 %rsp 获得了 8 美元的 subq,并将每个数字放在那里 然后我尝试打印数字,但相反,它打印了第二个数字和 我认为每次我支付 8 美元就足够了,而且我确实给了 printf 正确的地址,但它并没有保存我想要保存的内容,也许你可以向我展示如何使用 printf 将它们保存在堆栈中?

提前感谢您的帮助。

到目前为止,这就是我拯救它们的方法:

    movq $scanf_c, %rdi
    subq $8, %rsp
    movq %rsp, %rsi
    subq $8, %rsp
    movq %rsp, %rdx
    call scanf
assembly char x86-64
1个回答
0
投票
.data
  format db "first: %c, second: %c",10,0 #format string
  prompt db "enter two characters: ",0
.bss
  char1 resb 1
  char2 resb 1

#print prompt
movq $1, %rdi #stdout
movq $prompt, %rsi #pointer to the prompt string
movq $23, %rdx #prompt string lenght
movq $1, %rax #syscall: sys_write
syscall


#read two characters using scanf
movq $scanf_c, %rdi
movq $char1, %rsi #address of the first character
movq $char2, %rdx #address of the second character
call scanf

#print using printf
movq $format, %rdi #format string for printf
movq $char1, %rsi
movq $char2, %rdx
movq $0, %rax # syscall: sys_read
call printf

希望这可以有所帮助,如果需要的话我可以添加两个子例程

© www.soinside.com 2019 - 2024. All rights reserved.