我正在阅读一个反汇编的 win32 c++ 程序,我看到了很多:
AND AL,0xFF
这是完全没有意义的还是编译器为什么会生成这些?
这是一个更长的例子:
movsx eax, byte ptr [ebx]
shl eax, 18h
movsx edx, byte ptr [ebx+1]
shl edx, 10h
add eax, edx
movsx ecx, byte ptr [ebx+2]
shl ecx, 8
add eax, ecx
movsx edx, byte ptr [ebx+3]
add eax, edx
xor edx, edx
call sub_43B55C
mov ecx, eax
mov edx, eax
sar ecx, 10h
and al, 0FFh # <----
sar edx, 8
and cl, 0FFh # <----
mov [esi], cl
and dl, 0FFh # <----
mov [esi+1], dl
mov [esi+2], al
add ebx, 4
add esi, 3
inc ebp
cmp ebp, 6
jl short loc_43B5E4
在这些操作之后没有检查标志,所以这不是目的。在 之后,、 和中AND
的值被移动到。AL
CL
DL
[ESI + n]