2012-04-06 95 views
1

EAX寄存器包含xxxxxx9D值和我有以下組件的代碼:x86 ROR指令如何工作?

C0C8 14 --> ROR AL,14 

對我來說,這意味着該EAX的32個比特值的最後8位由14模8轉動逐位= 6位

0x9D = b1001 1101 

將被改造成

b0111 0110 = 0x76 

然而,OLL yDbg告訴我EAX = xxxxxxD9,這意味着EAX已經按位旋轉了4位!

我在哪裏錯了?

+2

這是十四進制的十進制數。 – 2012-04-06 19:35:57

+0

備案:表達最佳實踐以編譯器友好的方式旋轉,避免未定義的行爲:http://stackoverflow.com/questions/776508/circular-shift-rotate-operations-in-c。該答案的代碼將使gcc和clang生成一個單一的「ror」指令。 – 2015-08-17 17:41:14

回答

4

您試圖將一個8位寄存器旋轉20個位置。這有點多,按8旋轉會產生相同的值。旋轉9與旋轉1相同。等等。處理器將因此旋轉20個模8 = 4個位置。

+0

非常感謝。我的錯誤是什麼? 混淆h14 = d20與d14 ...... 是的,20模8產生4 我有時候真是個傻瓜! – 2012-04-06 19:57:52

1

安置自己的完整的代碼,這一點:

mov  al,$9d 
ror  al,14 

我得到76預期。

編輯如果您旋轉$ 14職位,您將得到d9。