私はEAXを37倍にする必要があります。shl eax,5
とshl register,2
を使用して、eaxに38を掛けるためにレジスタを追加しますが、奇数で乗算するコードがわからないので、shl addを使用する必要がありますとmovのみ。ありがとう!shlを使って奇数で乗算するアセンブリ言語?
5
A
答えて
2
ハロルドは、あなたが同様に乗算を実行するためにLEA
命令を使用することができ、あなたに言っているものに加えて:LEAを使用して
EAX * 2 : lea eax,[eax*2]
EAX * 3 : lea eax,[eax*2+eax]
EAX * 4 : lea eax,[eax*4]
EAX * 5 : lea eax,[eax*4+eax]
EAX * 8 : lea eax,[eax*8]
EAX * 9 : lea eax,[eax*8+eax]
+0
in-placeに2の累乗を乗算するには 'lea'ではなく' shl eax、3'を使います。 '[eax * 8]'アドレス指定モードでは、ベースレジスタを持たないスケーリングされたインデックスをエンコードする唯一の方法は 'disp32'であるため、エンコーディングで32ビットの' 0'ディスプレースメントが必要です。また、 'eax * 2'は、' lea'よりも多くのポートで動作する 'add eax、eax'で最もうまくいきます。 –
6
、あなたが直接小さな、奇数定数(2、たくさんのを掛けることができます4,8,3,5,9)、さらに2つのレジスタを追加して答えを別の場所に移動します。これは驚くほど便利です。これらを合成することで、LEA命令のシーケンスを使用して小さな定数をかなり増やすことができます。他のADD、SHL、SUB(NEG、ADDを含む)命令を慎重に使用すると、これらのシーケンスを短くすることができます。
乗算EAX 37によって:
lea ecx, [eax+8*eax] ; 9 * eax
lea eax, [ecx*4+eax] ; 37 * eax
38によって
乗算EAX:
これらのような短い配列は、命令の多くは現在のプロセッサにより実行時に重なっている部分的にので、ほとんど常に高速乗算使用よりもlea ecx, [8*eax]
neg eax
lea ecx, [5*ecx]
lea eax, [ecx+2*eax]
ベター:
lea ecx, [8*eax+eax] ; 9 * eax
lea ecx, [4*ecx] ; 36 * eax
lea eax, [eax*2+ecx] ; 38 * eax
楽しみのためだけに、multip LY 103によって:
lea ecx, [8*eax] ; 8 * eax
lea ecx, [ecx*4] ; 32 * eax
lea ecx, [ecx*2+ecx] ; 96 * eax
lea ecx, [ecx+8*eax]; ; 104 * eax
sub ecx, eax ; 103 * eax
関連する問題
- 1. アセンブリ:??2で乗算(SHL)
- 2. 浮動小数点数の乗算を行うARMアセンブリ言語プログラムを作成
- 3. モジュロ乗算(C言語)
- 4. 加算と乗算C言語
- 5. メタルシェーディング言語での行列乗算
- 6. MC68000アセンブリ乗算
- 7. アセンブリ言語で再帰関数を計算する
- 8. アセンブリ言語で2つの数値を減算する方法
- 9. ARMアセンブリ言語で整数の階乗を計算するプログラムを作成します。
- 10. 68000アセンブリ:奇妙な結果をもたらす乗算
- 11. アセンブリ言語の逆アセンブリ言語x86
- 12. アセンブリ命令をC言語を使って16進数に変換する
- 13. OFFSETプロセッサのアセンブリ言語の演算子
- 14. アセンブリ言語関数2ループ
- 15. ユーザー入力値までMARIEアセンブリ言語で奇数を印刷します
- 16. 32ビット乗算アセンブリiApx88
- 17. C++の関数を使った乗算
- 18. LC3アセンブリ言語
- 19. アセンブリ言語コンパイラ
- 20. アセンブリ言語
- 21. アセンブリ言語-Addition
- 22. アセンブリ言語 - サブプログラム
- 23. アセンブリ言語コプロセッサ
- 24. アセンブリ言語オプティマイザ
- 25. アセンブリ言語イントロ
- 26. 学習するアセンブリ言語
- 27. アセンブリ言語でのレジスタの使用
- 28. アセンブリ言語でダブルワードを追加して掛け算する方法
- 29. アセンブリ言語でテキストプログラムを移動する
- 30. Mipsアセンブリ言語エラーチェック
だけでも、どうもありがとうございました、私はハハことを行うことが知られているの必要があり、 'eax' – harold
うわーそう単純で、元(シフトされていない)を追加します。 – user2990286
あなたはそれを返信に投稿したいと思うなら、あなたに+1を喜んで送ってください! – user2990286