PROC 参数中的 x86 ASM 中的 ROL
ROL in x86 ASM in PROC parameter
我不知道我这样做是否正确,但我想在 x86 MASM 中为我的 MD5 实现制作一个简单的 PROC。对于指令 ROL,我似乎不能使用这种类型的编码。
HCALC proc NEAR Avar: DWORD, Xvar: DWORD, Yvar: DWORD, Zvar: DWORD, Mvar: DWORD, S: DWORD, Hvar: DWORD
pushad
mov eax, Avar
mov ebx, Xvar
mov ecx, Yvar
mov edx, Zvar
xor ebx, ecx
xor ebx, edx
add eax, ebx ; a + H(x,y,z)
add eax, Mvar ; a + H(x,y,z) + M[k]
add eax, Hvar ; a + H(x,y,z) + M[k] + h
rol eax, S ; (a + F(x,y,z) + M[k] + h) <<< s)
add eax, ebx ; x + ((a + F(x,y,z) + M[k] + h) <<< s), wynik całości w EAX
mov Avar, eax
popad
ret
HCALC endp
报错error A2070: invalid instruction operands
ROL
指令需要立即数 8 位操作数或 CL
寄存器作为移位计数。使用
mov ecx, S
rol eax, cl
应该可以正常工作。
你在这个程序中遇到了 2 个问题:
rol
指令不能使用内存计数器。您应该将其移动到 CL
寄存器:
mov ecx, S
rol eax, cl ; (a + F(x,y,z) + M[k] + h) <<< s)
当你做最后的加法时,EBX
不再保存 X 变量而是 H(X ,Y,Z)
mov ebx, X
add eax, ebx ; x + ((a + F(x,y,z) + M[k] + h) <<< s)
我不知道我这样做是否正确,但我想在 x86 MASM 中为我的 MD5 实现制作一个简单的 PROC。对于指令 ROL,我似乎不能使用这种类型的编码。
HCALC proc NEAR Avar: DWORD, Xvar: DWORD, Yvar: DWORD, Zvar: DWORD, Mvar: DWORD, S: DWORD, Hvar: DWORD
pushad
mov eax, Avar
mov ebx, Xvar
mov ecx, Yvar
mov edx, Zvar
xor ebx, ecx
xor ebx, edx
add eax, ebx ; a + H(x,y,z)
add eax, Mvar ; a + H(x,y,z) + M[k]
add eax, Hvar ; a + H(x,y,z) + M[k] + h
rol eax, S ; (a + F(x,y,z) + M[k] + h) <<< s)
add eax, ebx ; x + ((a + F(x,y,z) + M[k] + h) <<< s), wynik całości w EAX
mov Avar, eax
popad
ret
HCALC endp
报错error A2070: invalid instruction operands
ROL
指令需要立即数 8 位操作数或 CL
寄存器作为移位计数。使用
mov ecx, S
rol eax, cl
应该可以正常工作。
你在这个程序中遇到了 2 个问题:
rol
指令不能使用内存计数器。您应该将其移动到CL
寄存器:mov ecx, S rol eax, cl ; (a + F(x,y,z) + M[k] + h) <<< s)
当你做最后的加法时,
EBX
不再保存 X 变量而是 H(X ,Y,Z)mov ebx, X add eax, ebx ; x + ((a + F(x,y,z) + M[k] + h) <<< s)