2012-04-06 26 views
1

マイEAXレジスタがxxxxxx9D値が含まれていると私は、次のアセンブリコードがあります。私にはx86 ROR命令はどのように機能しますか?

C0C8 14 --> ROR AL,14 

を、それが= EAXの32ビット値の最後の8ビットは14 MOD 8によってビット単位を回転させることを意味し6位

0x9D = b1001 1101 

はOLL、しかし

b0111 0110 = 0x76 

に変換されますyDbgは私に、EAX = xxxxxxD9がEAXがビットごとに4ビット回転したことを意味します!

どこが間違っていますか?

+2

小数点以下20桁の14進数です。 –

+0

レコードの場合:コンパイラに優しい方法で回転を表現するためのベストプラクティスは未定義の振る舞いを避けてください:http://stackoverflow.com/questions/776508/circular-shift-rotate-operations-in-c。その答えには、gccとclangが単一の 'ror'命令を生成するコードがあります。 –

答えて

4

8ビットレジスタを20ポジション回転させようとしています。これはちょっとですが、8で回転すると同じ値が得られます。 9回転は1回転と同じです。したがって、プロセッサは20 mod 8 = 4の位置で回転します。

+0

ありがとうございました。私のエラーは何でしたか? h14 = d20とd14の混乱...... はい、20 mod 8が生成されます。4 時々私は馬鹿です! –

1

これで、あなたの完全なコードを投稿:

mov  al,$9d 
ror  al,14 

を予想通り、私は76を取得します。

$ 14のポジションでローテーションすると、d9が表示されます。

関連する問題