移位指令在Win32訊息處理中的一些問題(轉)

heying1229發表於2007-07-28

大家在處理有些位元組拼裝的訊息時,一定是用Shr等指令來移位,這裡有一個小問題,要注意:
如WM_MOUSEWHEEL訊息,它的wParam的高位元組儲存了當前的滑鼠滾動的方向,-120表示向上滾動,120表示向下滾動,此時,這樣處理是錯的:
mov eax,wParam
shr eax,16
.if eax==-120
... ..

為什麼?因為移位指令移位的同時,把最高位也移動了,此時,符號位到了ax的最高位,結果判斷eax自然總是正數,此時,應該直接判斷ax,或使用擴充套件指令。如:
... ...
.if ax==-120
就行了,這一般只在高位或低位會為負的情況下注意,因為正數移位後判斷eax仍然行得通。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10172717/viewspace-928714/,如需轉載,請註明出處,否則將追究法律責任。

相關文章