0
%esxには%esiの値を左にシフトさせたいが、shlのソースは即値でなければならない。レジスタ内の値でビットをシフトする
私は%ecxの値でシフトする方法を理解できますか?私は周りを見回し、人々がCLレジスタの使用を推奨しているのを見ました。しかし、代替手段はありますか?
ありがとうございます。
%esxには%esiの値を左にシフトさせたいが、shlのソースは即値でなければならない。レジスタ内の値でビットをシフトする
私は%ecxの値でシフトする方法を理解できますか?私は周りを見回し、人々がCLレジスタの使用を推奨しているのを見ました。しかし、代替手段はありますか?
ありがとうございます。
80386アーキテクチャは%cl
レジスタ%ecx
レジスタの最下位8ビットであることに留意されたい等DWORDシフト、ワードシフトの15、31でマスクし%cl
のシフト量で左シフト命令を提供します。
0 8 16 32 64
+---------------------------------------------------------------+
| rcx |
+-------------------------------+-------------------------------+
| ecx |
+---------------+---------------+
| cx |
+-------+-------+
| cl | ch |
+-------+-------+
したがって、shll %cl,%esi
はすでに何を期待し、高ビットが本当に(シフト前のシフト量は31でマスクされた)とにかく問題ではありませんよう%ecx
に指定された場所の数によって%esi
の内容をシフト。
... 64ビットレジスタの場合は63でマスクされます。 – Anty
ビット数は実際にはプログラムにとって重要な場合があります。その場合、結果をゼロにするために特別な注意が必要です。 「1 << 33」は「2」ではなく「0」であると考えられます。 – Jester
@Jesterそれは正しいです。しかし、shllはシフト・オペランドを31でマスクしているので、とにかにマスクされているので、ハイ・ビットがecxにセットされているかどうかは関係ありません。 – fuz