2011-11-05 14 views

答えて

54

命令DIV命令(および符号付き数値の場合はIDIV)は、商と剰余(モジュロ)の両方を与えます。 DIV r16は、DX:AXの32ビットの数値を16ビットのオペランドで除算し、その商をAXに、そして余りをDXに格納します。

例:EBXによってEDX:EAX 64ビットオペランドを分割するdiv ebxを行うことができ、32ビットアセンブリで

mov dx, 0  
mov ax, 1234 
mov bx, 10 
div bx  ; Divides 1234 by 10. DX = 4 and AX = 123 

。詳細については、Intels Architectures Software Developer’s Manualsを参照してください。

+2

GCCは遅いのでdivを使用しません:http://stackoverflow.com/questions/4361979/how-does- -gcc-module-work-and-why-does-it-use-the-use-the-use-the-use-the-use-the-use-the-use-the-module-of-the-use-the-use-the-module-of-the-use-the-use-the-use-the-module-of-the-use-the-use-the-use-the-module-workです –

13

モジュロ2の累乗を計算する場合、ビット単位のANDを使用する方が除算を実行するよりも簡単で一般的に高速です。 bが2の累乗である場合、a % b == a & (b - 1)

たとえば、レジ​​スタEAX(モジュロ64)の値を取ってみましょう。
最も簡単な方法はAND EAX, 63です。63はバイナリで111111なので、

マスクされた上位桁は私たちの関心事ではありません。やってみて!

同様に、2の累乗でMULまたはDIVを使用する代わりに、ビットシフトが行われます。しかし、符号付き整数には注意してください!