2016-05-16 50 views

回答

2

正如評論者Michael和Ped7g所說,您已經使用了偏移量。讓我解釋一下:

x86以little-endian格式存儲數字,這意味着最低位字節首先存儲在內存中。一個小例子:假設你有值0x12345678eax,並執行這個指令:

mov [addr], eax 

...然後在地址addr內存將是這樣的:

78 56 34 12 

在你的榜樣,則在dx:ax中有一個值,該值是「在dx中具有值高16位並且其在ax中具有低16位」的簡寫。假設值,再次0x12345678,所以你必須在dx0x12340x5678ax,那麼你就需要兩個移動指令:

mov [addr], ax // Memory now looks like this: 78 56 
mov [addr+2], dx // Memory now looks like this: 78 56 34 12 

+2來自於一個事實,即ax是一個16位寄存器,即它存儲在內存中時佔用了兩個字節,所以既然你想在它後面放置dx,你需要增加地址2

對於edxeax中的64位值具有相同的作用,偏移量爲4。讓我們假設你有eaxedx價值0x1234567890ABCDEF斯普利特0x123456780x90ABCDEF,那麼它應該是這樣的:

mov [addr], eax // Memory now looks like this: EF CD AB 90 
mov [addr+4], edx // Memory now looks like this: EF CD AB 90 78 56 34 12 
相關問題