x86アセンブラにはモジュロ演算子のようなものがありますか?アセンブリ言語 - モジュロを行う方法?
答えて
命令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を参照してください。
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です –
モジュロ2の累乗を計算する場合、ビット単位のANDを使用する方が除算を実行するよりも簡単で一般的に高速です。 b
が2の累乗である場合、a % b == a & (b - 1)
。
たとえば、レジスタEAX(モジュロ64)の値を取ってみましょう。
最も簡単な方法はAND EAX, 63
です。63はバイナリで111111なので、
マスクされた上位桁は私たちの関心事ではありません。やってみて!
同様に、2の累乗でMULまたはDIVを使用する代わりに、ビットシフトが行われます。しかし、符号付き整数には注意してください!
- 1. AVRアセンブリ言語でanalogRead()を行う方法は?
- 2. モジュロ乗算(C言語)
- 3. アセンブリ言語の逆アセンブリ言語x86
- 4. アセンブリ言語オプティマイザ
- 5. アセンブリ言語
- 6. アセンブリ言語 - サブプログラム
- 7. アセンブリ言語-Addition
- 8. アセンブリ言語イントロ
- 9. アセンブリ言語コプロセッサ
- 10. CMD Windows XPでアセンブリ言語コードを実行する方法は?
- 11. LC3アセンブリ言語
- 12. アセンブリ言語コンパイラ
- 13. アセンブリ言語のプロジェクトソース
- 14. 多言語を行う方法
- 15. MIPSアセンブリ言語スタックポインタマージソート
- 16. アセンブリ言語x86 Irvine32
- 17. アセンブリ言語:+ vs add
- 18. アセンブリ言語のループ
- 19. Mipsアセンブリ言語エラーチェック
- 20. sicxeアセンブリ言語プログラミング
- 21. MASM(8086)アセンブリ言語の行継続
- 22. アセンブリ言語関数2ループ
- 23. アセンブリ言語の解析Regex
- 24. アセンブリ言語 - ディビジョンオーバーフロー(4桁)
- 25. MIPSアセンブリ言語:遅延
- 26. アセンブリ言語のCALL命令
- 27. アセンブリ言語コードの問題
- 28. AVRアセンブリ言語 - 交通ライト
- 29. 学習するアセンブリ言語
- 30. Cアセンブリ言語ATTウォークスルー?
http://stackoverflow.com/questions/4361979/calculating-modulo-in-assembly –