我一直在尝试用汇编语言编写一个程序,其中我得到两个数字,稍后我将它们作为字符传递,将它们保存在堆栈中,然后将它们一一取出并打印它们。 我以这种方式得到数字 - “%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
.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
希望这可以有所帮助,如果需要的话我可以添加两个子例程