我不知道我是否正确地执行此操作,但我想在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
它给出错误 错误A2070:无效的指令操作数
答案 0 :(得分:4)
答案 1 :(得分: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)