Finally, everything works well
include \masm32\include\masm32rt.inc
include HJWasmMix.Inc
mix64proc ResetQw,testAutherArg:qword ,addrQW1
LOCAL testlocal
mov eax, addrQW1
xor rdx, rdx
mov qword ptr [rax], rdx
ret
mix64endp
mix64proc QwToQw ,addrQW1 ,addrQW2
mov eax, addrQW1
mov ecx, addrQW2
mov rdx, qword ptr [rax]
mov qword ptr [rcx], rdx
ret
mix64endp
mix64proc XChgQw ,addrQW1 ,addrQW2
LOCAL JustForTestlocalQW:qword
mov eax, addrQW1
mov ecx, addrQW2
mov rdx, qword ptr [rcx]
mov JustForTestlocalQW, rdx
mov rdx, qword ptr [rax]
xchg rdx,JustForTestlocalQW
mov qword ptr [rax], rdx
mov rdx,JustForTestlocalQW
mov qword ptr [rcx], rdx
ret
mix64endp
mix64proc SetQw ,addrQW1 ,qwV1:dword,qwV2:dword
mov eax, addrQW1
mov edx,qwV1
ror rdx,32
mov ecx,qwV2
or rdx,rcx
mov qword ptr [rax], rdx
ret
mix64endp
mix64proc RoRQw ,addrQW:dword,vRor:byte
mov eax, addrQW
mov rdx,qword ptr [rax]
mov cl,vRor
ror rdx, cl;x
mov qword ptr [rax], rdx
ret
mix64endp
.data
QW1 QWORD 0BBBBBBBBh
QW2 QWORD 0AAAAAAAAh
JustForTestArgQW QWORD 0
.code
start:
invoke crt_printf, cfm$("--------------------------------------"), QW1
invoke crt_printf, cfm$("\n QW1: %llX "), QW1
invoke crt_printf, cfm$("\n QW2: %llX \n"), QW2
invoke crt_printf, cfm$("ResetQw--------------------------------------"), QW1
invoke ResetQw,JustForTestArgQW,addr QW1
invoke crt_printf, cfm$("\n QW1: %llX "), QW1
invoke crt_printf, cfm$("\n QW2: %llX \n"), QW2
invoke crt_printf, cfm$("SetQw--------------------------------------"), QW1
invoke SetQw,addr QW2,0AAAAAAAAh,0BBBBBBBBh
invoke crt_printf, cfm$("\n QW1: %llX "), QW1
invoke crt_printf, cfm$("\n QW2: %llX \n"), QW2
invoke crt_printf, cfm$("XChgQw--------------------------------------"), QW1
invoke XChgQw,addr QW2,addr QW1
invoke crt_printf, cfm$("\n QW1: %llX "), QW1
invoke crt_printf, cfm$("\n QW2: %llX \n"), QW2
invoke crt_printf, cfm$("QwToQw--------------------------------------"), QW1
invoke QwToQw,addr QW1,addr QW2
invoke crt_printf, cfm$("\n QW1: %llX "), QW1
invoke crt_printf, cfm$("\n QW2: %llX \n"), QW2
invoke crt_printf, cfm$("RoRQw--------------------------------------"), QW1
invoke RoRQw,addr QW1 ,32
invoke crt_printf, cfm$("\n QW1: %llX "), QW1
invoke crt_printf, cfm$("\n QW2: %llX \n"), QW2
invoke crt__getch
exit
end start
Output:
--------------------------------------
QW1: BBBBBBBB
QW2: AAAAAAAA
ResetQw--------------------------------------
QW1: 0
QW2: AAAAAAAA
SetQw--------------------------------------
QW1: 0
QW2: AAAAAAAABBBBBBBB
XChgQw--------------------------------------
QW1: AAAAAAAABBBBBBBB
QW2: 0
QwToQw--------------------------------------
QW1: AAAAAAAABBBBBBBB
QW2: AAAAAAAABBBBBBBB
RoRQw--------------------------------------
QW1: BBBBBBBBAAAAAAAA
QW2: AAAAAAAABBBBBBBB