2016-12-15 14 views
-1

私はこの思い煩いのプロジェクトを持っています。私は、入力から2つの数字を取得するプログラムを書く必要がありますそれらを一緒に追加したり、それらを掛けてください。このプログラムはダブルワードも取得できるはずです。アセンブリ言語でダブルワードを追加して掛け算する方法

私は入力から数値を得る方法を知っていますが、それらのサイズが最大である場合にはそれらを追加または掛け算する方法はありますが、このダブルワードのことは解決できません。

誰もコードを持っていますか?予め

おかげ.....のx86で

+0

EAXのような32ビットレジスタを使用できますか?あなたはRAXのような64ビットレジスタを使うことが許されていますか? –

+2

キャリー付きで追加してください。 googleそれ。対象のアーキテクチャを検索に含めることで、関心のあるマシンの結果を得ることができます。 –

答えて

2

私は割り当ての目標は、あなたが数字で動作するためにあるような32ビットの数値で、レジスタのサイズを2倍と仮定するつもりだし16ビット・モード、または32ビット・モードの64ビット・ナンバー。乗算は、長時間の乗算と同様に行うことができます。私は、製品が被乗数または乗数の2倍の倍数命令を使用できると仮定します。この例は、数字の「単語」の間のスペースを示しています。

  aaaa bbbb  ;multiplicand 
x   cccc dddd  ;multiplier 
--------------------- 
      eeee eeee  ;bbbb x dddd 
     ffff ffff    ;aaaa x dddd 
     gggg gggg    ;bbbb x cccc 
+ hhhh hhhh     ;aaaa x cccc 
--------------------- 
    pppp pppp pppp pppp  ;product 
0

MOV EBX,OP1 
MOV EAX,OP2 
IMUL EBX 

結果は、EDXである:EAX(32ビットレジスタ) 上位32ビットは、EDXレジスタに格納され下位32ビットがEAXレジスタに格納されます。

あなたがより多くの説明を必要とする場合は、このリンクは役立つはず: https://www.tutorialspoint.com/assembly_programming/assembly_arithmetic_instructions.htm

+0

拡大倍率は、32ビットx86上で64ビット* 64ビットの乗算を作成する際に使用するビルディングブロックです。 64ビットの結果を得るには3つが必要です。 (そして、そのうち4つは128bの完全な結果を得るために)。私はOPで、レジスタの2倍のオペランドで作業することを頼んでいると思います.DOMORDをx86に乗算する方法だけではありません。 –

関連する問題