我对装配很新。我知道如何从用户那里获取1个值,但如果我希望用户输入由空格分隔的3个数字,该怎么办呢。
我正在尝试将它们中的每一个存储到一个单独的寄存器中,所以就像这样。
push qword 0 ;make space for 8-byte number
push qword 0 ;make space for 8-byte number
push qword 0 ;make space for 8-byte number
mov qword rdi, formatfloatinput
mov qword rsi, rsp
mov qword rax, 0
call scanf
pop qword r15 ;pop value from stack into r15
pop qword r14 ;pop next value in stack into r14?
pop qword r13 ;pop next value in stack into r13?
示例输入:13 15 36
现在r15
应该包含13个,r14
包含15个,r13
包含36个。
答案 0 :(得分:2)
C等价物为scanf("%ld %ld %ld", &r15, &r14, &r13)
。请注意,您必须将3个指针传递给每个输出变量。您只传递1.此外,您的formatfloatinput
具有误导性,您正在读取整数寄存器,您需要一个整数格式。这样的事情应该有效:
push qword 0 ;make space for 8-byte number
push qword 0 ;make space for 8-byte number
push qword 0 ;make space for 8-byte number
mov qword rdi, format
mov qword rsi, rsp ; &r15
lea rdx, [rsp+8] ; &r14
lea rcx, [rsp+16] ; &r13
mov qword rax, 0
call scanf
pop qword r15 ;pop value from stack into r15
pop qword r14 ;pop next value in stack into r14?
pop qword r13 ;pop next value in stack into r13?
....
format: db "%ld %ld %ld", 0
像你一样推送和弹出不是写这个的常用方法,但并没有错。如果调用约定要求,请记住保持堆栈对齐。