2016-09-13 9 views
0

私は、それらのサイズに関して値を乗算することに関する文書を垣間見ました。バイト用のものはかなり簡単なので、私はそれを自分自身で混同する必要はありません。私を混乱させるのは、オペランドが単語/ダブルワードの場合、製品をフェッチすることです。例えばDX:AX/EDX:EAXからどのように値を取得できますか?

;code for scanning values here 
    ;code for converting them to numbers 

    mov ax, word[num] ;suppose num is a word-type value 

    mov bx, 45 

    mul bx 

    mov num, ??? ;??? represents the register where should I fetch the product from 

私はこれに似た質問があったかもしれないことを知っているが、私は本当に、詳細な説明を必要としていました。ありがとうございました。

答えて

3

mul命令は、16ビットのオペランドに対して32ビットの結果を与えます。 axは結果の下位のwordを保持し、dxは上位wordを保持します。だから、あなたは結果を格納するためにdword変数を必要とする:あなたはresutが65535を超えないように、あなたの番号は、十分に常に小さいことがわかっている場合は

result dd 0 

. . . 
mul bx 
mov [result], ax 
mov [result + 2], dx 

しかし、その後、あなたがより高い部分(dx)を省略することができます常に0になり、16ビットの変数を使用して結果を格納します

関連する問題