I have the following disassembly:
[dest] = d5 cd e8 ca 68
movzx eax, [ebp+dest]
# value of edx at this point is: F7FBB898
movsx edx, al
# value of edx after this is: FFFFFFD5
# [ebp+var_E] stores 0
movzx eax, [ebp+var_E]
movsx eax, al
# eax = 0 here
add eax, edx
# eax becomes FFFFFFD5
cmp eax, 0D5h
jnz short loc_565564E6
I have given the explanation and flow for each instruction below:
What should be my initial value in [dest] so that after these operation, the final value in eax is 0xd5 and not 0xFFFFFFD5
You should use movzx
(Move with Zero-Extend) instead of movsx
(Move with Sign-Extension) if you want to extend the value with zeros without looking at its sign.
When you use movsx
to move 0xd5
to edx
, it will copy the lower to bytes into edx
and fill the remaining with the MSB of the copied value (0xd5
= 0b11010101
, the MSB is 1), which fills the 6 remaining bytes with 0xFFFFFF
. With movzx
, the remaining bytes are filled with 0x000000
regardless of the MSB.