[英]How to read a 64-bit number in assembly
我必须从键盘上读取一个64位数字,但是我不知道为什么它不起作用。 有人可以给我一个主意吗? 这就是我所做的:
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
,一个用于低32位,一个用于高位。 在x64上,您可以在一条指令中移动它,这意味着在64位上,该操作是原子的,而在x86上则不是。
例如,在x86上:
mov dword [eax], low32
mov dword [eax+4], high32
在x64上:
mov rax, 0xffffffffffffffff
formatkey
的最后一个空格会引起麻烦。 您真的需要吗?
这对我.lib
(来自Visual Studio 2010 Express的.lib
):
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.