我正在使用Notepad ++处理程序集中的项目。我需要从表达式中读取两个64位数字,为此我使用了sscanf。当我显示第一个数字时,我使用dword ptr no1来表示数字的最后32位,而dword ptr no1 + 4表示其他位。它没用。另外,如果有必要,我只能使用32位寄存器。
formatNumber是否正确?我尝试了%d,%lld但它没有按预期工作。另外,我用来显示数字的方法是正确的吗?
.386
.model flat, stdcall
includelib msvcrt.lib
extern printf: proc
extern exit: proc
extern scanf: proc
extern exit: proc
extern sscanf: proc
extern exit: proc
public start
.data
msg db 13,10, "Insert expression : ",0
formatExpression db "%s",0 ; expression example : 5446722+31 or 3*61244
formatNumber db "%ld",0
format db "%ld%c%ld",0 ; to read datas from expression
expression db 100 dup(0)
no1 dq 0
no2 dq 0
operation dd 0
.code
start:
push offset msg
call printf
add esp , 4
; reading expression
push offset expression
push offset formatExpression
call scanf
add esp, 8
;reading data
push offset no2
push offset operation
push offset no1
push offset format
push offset expression
call sscanf
add esp,20
;display first number
push dword ptr no1+4
push offset formatNumber
call printf
add esp,8
push dword ptr no1
push offset formatNumber
call printf
add esp,8
push 0
call exit
end start