2017-01-24 8 views
0

%esxには%esiの値を左にシフトさせたいが、shlのソースは即値でなければならない。レジスタ内の値でビットをシフトする

私は%ecxの値でシフトする方法を理解できますか?私は周りを見回し、人々がCLレジスタの使用を推奨しているのを見ました。しかし、代替手段はありますか?

ありがとうございます。

答えて

0

80386アーキテクチャは%clレジスタ%ecxレジスタの最下位8ビットであることに留意されたい等DWORDシフト、ワードシフトの15、31でマスクし%clのシフト量で左シフト命令を提供します。

0  8  16    32        64 
+---------------------------------------------------------------+ 
| rcx               | 
+-------------------------------+-------------------------------+ 
| ecx       | 
+---------------+---------------+ 
| cx   | 
+-------+-------+ 
| cl | ch | 
+-------+-------+ 

したがって、shll %cl,%esiはすでに何を期待し、高ビットが本当に(シフト前のシフト量は31でマスクされた)とにかく問題ではありませんよう%ecxに指定された場所の数によって%esiの内容をシフト。

+1

... 64ビットレジスタの場合は63でマスクされます。 – Anty

+0

ビット数は実際にはプログラムにとって重要な場合があります。その場合、結果をゼロにするために特別な注意が必要です。 「1 << 33」は「2」ではなく「0」であると考えられます。 – Jester

+0

@Jesterそれは正しいです。しかし、shllはシフト・オペランドを31でマスクしているので、とにかにマスクされているので、ハイ・ビットがecxにセットされているかどうかは関係ありません。 – fuz

関連する問題