mov ax,0AFh
mov cx,0AFh
mul cx
についてBXとCX
mov bx,Ah
mov cx,5h
mul cx
"???????"
を乗算する私の試み乗算bxとcx私は一時レジスタを使用する必要がありますと思う。誰も私にそのことを教えてもらえますか?
mov ax,0AFh
mov cx,0AFh
mul cx
についてBXとCX
mov bx,Ah
mov cx,5h
mul cx
"???????"
を乗算する私の試み乗算bxとcx私は一時レジスタを使用する必要がありますと思う。誰も私にそのことを教えてもらえますか?
これを試してみる:
mov bx, 0Ah
mov cx, 5h
push ax
mov ax, bx
mul cx
mov bx, ax
pop ax
;at this point, ax is unchanged, result is in bx.
それとも、あなたは空想になりたい場合は、この方法を試してください。
mov bx, 0Ah
mov cx, 5h
xchg ax, bx
mul cx
xchg ax, bx
;at this point, ax is unchanged, result is in bx.
をただし、16ビットのレジスタによる乗算はdx:ax
にその結果を残します。あなたの例は小さな数値を乗算するので、全体の結果が16ビットのレジスタに収まるので、これは本当に重要ではありません。しかし、あなたのdx
登録はこれらのコードフラグメントによってクリアされることに注意してください。また、今後大きな数字を掛ける場合は、結果をdx:bx
で探してください。
すべての形式のmul/imulが完全な結果をもたらします。 http://www.felixcloutier.com/x86/MUL.html。 'mul r/m8'はそれをAXに入れますが、残りの全ては[RE] DXに入れます:[RE] AX –
@PeterCordesは説明のためにありがとう。したがって、8ビット以上を乗算すると、 'dx'は常にチームのために1つを取得します。 –
@PeterCordes私はそれを修正しました。 –
'mov bx、Ah'では、ソースはAHレジスタであり、即値の定数ではありません。おそらくあなたは '0Ah'を意味するのでしょうか?また、http://www.felixcloutier.com/x86/MUL.htmlのマニュアル、またはあなたが期待していないその他の指示を読んでください。 –
@Shift_Left:質問には8086が記載されていますが、「imul r16、r/m16」は386で導入されました。結果は実際には符号付きでも符号なしでもなく、完全な結果の上位半分だけが異なります。 2オペランドIMULは署名されたものに基づいてフラグを設定しますが、そうでない場合は、結果の上半分を必要としない場合はMULの必要はありません。あなたが実際に古代のハードウェア(またはemu8086)をターゲットにする必要がなければ、IMULは正しい選択です。 –
@PeterCordes完全に文脈から外れているので、コメントを削除しました。私が39年前に買った棚から8086本**を引っ張ってしまうとは思ってもいませんでした。 –