在PROC参数中的x86 ASM中的ROL

时间:2016-02-21 20:45:51

标签: assembly x86 md5

我不知道我是否正确地执行此操作,但我想在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:无效的指令操作数

2 个答案:

答案 0 :(得分:4)

ROL指令要求立即8位操作数或CL寄存器作为移位计数。使用

mov ecx, S
rol eax, cl

应该可以正常工作。

答案 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)