簡體   English   中英

在這種情況下,MOVSX指令符號如何擴展輸入?

[英]How is MOVSX instruction sign extending input in this case?

我有以下反匯編:

[目標] = 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

我已經給出了以下每條指令的解釋和流程:

  1. 它從[目標]中讀取一個字節並將其存儲在eax中。
  2. edx的初始值是:F7FBB898。 之后,movsx edx,將其所有指令變為FFFFFFD5。 我如何確保此時edx的值為0x000000d5?

我在[目標]中的初始值應該是多少,以便在這些操作之后,eax中的最終值是0xd5,而不是0xFFFFFFD5

如果要在不查看其符號的情況下將其擴展為零,則應使用movzx帶有零擴展的Move )而不是movsx帶有Sign-Extension的Move )。

當您使用movsx0xd5移動到edx ,它將把低位字節復制到edx並用復制值的0xd5 0b110101010xd5 = 0b110101010xd5 0b11010101為1)填充剩余的字節,用0xFFFFFF填充剩余的6個字節。 使用movzx ,無論MSB是movzx ,其余字節都用0x000000填充。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM