Assembly 如何在汇编中读取64位数字
我必须从键盘上读取64位数字,但我不知道为什么它不工作。 有人能给我一个主意吗?我在masm工作。 这就是我所做的:Assembly 如何在汇编中读取64位数字,assembly,masm,Assembly,Masm,我必须从键盘上读取64位数字,但我不知道为什么它不工作。 有人能给我一个主意吗?我在masm工作。 这就是我所做的: key dq 0 give_key db "Enter the encryption key (64-bit): " , 0 formatkey DB "%lld ", 0 procedure PROC NEAR push offset give_key call printf add esp,4 push offset key p
key dq 0
give_key db "Enter the encryption key (64-bit): " , 0
formatkey DB "%lld ", 0
procedure PROC NEAR
push offset give_key
call printf
add esp,4
push offset key
push offset formatkey
call scanf
add esp,8
ret
procedure ENDP
如果您使用的是x86汇编,则必须执行两个
mov
s,一个用于较低的32位,另一个用于较高的32位。在x64上,您可以在一条指令中移动它,这意味着在64位上,操作是原子的,而在x86上则不是
例如,在x86上:
mov dword [eax], low32
mov dword [eax+4], high32
在x64上:
mov rax, 0xffffffffffffffff
formatkey
中的最后一个空格会导致问题。你真的需要它吗
这对我很有用(.lib
来自Visual Studio 2010 Express):
非常感谢。我这样做了,但我在程序中仍然有一个问题。现在,我已经用调试器测试了程序,当我从键盘读取数据时,例如,如果我读取111并输入“回车”,程序希望输入一个值,然后才继续。我正在使用x86汇编。非常感谢!我删除了那个空格,现在我的程序读对了。也谢谢你的建议,我将在我必须做的第二个算法中使用它。非常感谢!
includelib msvcrt.lib
.686
.MODEL flat
EXTERN _printf:proc, _scanf:proc, _exit:proc
.DATA
key dq 0
give_key db "Enter the encryption key (64-bit): " , 0
scanformat DB "%lld", 0
printformat DB 10, "Entered: %lld", 10, 0
.CODE
procedure PROC NEAR
push offset give_key
call _printf
add esp,4
push offset key
push offset scanformat
call _scanf
add esp,8
ret
procedure ENDP
_main PROC
call procedure
push dword ptr key + 4 ; High DWORD of 64-bit QWORD
push dword ptr key + 0 ; Low DWORD of 64-bit QWORD
push offset printformat
call _printf
add esp,12
push 0
call _exit
_main ENDP
END _main