←前ページへ :  INDEX :  次ページへ→


3-6.乗算 ( Multiplication )

   加算、減算では、足す数(引き数)および足される数(引かれる数)は自由に指定ができた。しかし、乗算、除算では、かけられる数(割られる数)は決まっており、変更できない。(80286以下) またかける数(割る数)は即値は使用できない。(80286以下)

  乗算、除算は比較的新しい命令で、8086以前のCPUや初期のRISCと呼ばれる CPUには無かった命令で、技術的にも困難な命令であったからであるが、技術の進歩した現在のCPU(80386以上)ではかける数(割る数)、かけられる数(割られる数)ともにメモリーなどが使用できるようになっている。本ホームページでは8086 シリーズと言うことで、8086でも動くアセンブラを対象としているので、それらについては省く。

MUL ( Unsigned Multiply ) :符号なし乗算

MUL	SRC

   動作:符号なし整数の乗算
          SRC = 1byte  :  AX←AL×SRC
          SRC = 1word  :  DX:AX←AX×SRC
          SRC = 1dword :  EDX:EAX←EAX×SRC
  影響を受けるフラグ : OF,SF,ZF,AF,CF,PF
    SRC :レジスタ、メモリー


IMUL ( Signed Multiply ) :符号付き乗算

IMUL	SRC

   動作:符号付き整数の乗算
          SRC = 1byte  :  AX←AL×SRC
          SRC = 1word  :  DX:AX←AX×SRC
          SRC = 1dword :  EDX:EAX←EAX×SRC
  影響を受けるフラグ : OF,SF,ZF,AF,CF,PF
    SRC :レジスタ、メモリー

 

  オペランドが8bitの場合は結果は16bitレジスタのAXに代入される。オペランドが16bitの場合は結果が32bitになり、上位16bitはDXに、下位16bitはAXに代入される。オペランドが32bitの場合は、結果の上位32bitがEDXに、下位32bitが EAXに代入される(80386以上)

符号なし乗算 【86】
【書式】

MUL source

 dest   = AH:AL/DX:AX/EDX:EAX    source = reg/mem
【フラグ】
OF DF IF TF SF ZF ?? AF ?? PF ?? CF
【動作】
dest =regH : regLとすると、regLとsource の値を乗じた結果をdest に設定します。
regH:regLregL×source
結果がregLで表現できればOFとCFを0にします。 そうでなければOFとCFを1にします。
【備考】
  • destsource のサイズから自動的に決まり、source の2倍のサイズとなります。
  • 2倍長のサイズの結果はOFとCFの値にかかわらず常に正しくなります。 OF(CF)が0ならば上位半分を無視して下位半分を結果として採用できます。

符号付き乗算 【86】
【書式】 次に示す複数の書式があります。
@ IMUL  source
 dest   = AH:AL/DX:AX/EDX:EAX    source = reg/mem
destsource のサイズから自動的に決まりsource の2倍のサイズとなります。
A IMUL  dest,source 【186】
 dest   = reg16/reg32   source = imm 【186】          = reg16/reg32/meml6/mem32/imm【386】
イミディエイトを除き、destsource のサイズは等しくなります。
B IMUL  dest,source,imm 【186】
 dest   = reg16/reg32   source = reg16/reg32/meml6/mem32
イミディエイトを除き、destsource のサイズは等しくなります。
【フラグ】
OF DF IF TF SF ZF ?? AF ?? PF ?? CF
【動作】
書式により、以下の符号付き乗算を行います。
@ dest = regH : regLとするとregLとsource の値を乗じた結果をdest に設定します。
regH : regLregL×source
A destsource の値を乗じた結果をdest に設定します。
destdest ×source
B source とイミディエイトを乗じた結果をdest に設定します。
destsource ×imm
結果が正常にdest (@の場合はregL)へ設定できれば、OFとCFを0にします。 そうでなければOFとCFを1にします。
【備考】
  • A,Bの場合のimmはdest,source と同一サイズに符号拡張されます。
  • 書式@の場合、2倍長のサイズの結果regH : regLはOFとCFの値に関わらずらず常に正しくなります。 OF(CF)が0ならば上位半分を無視して下位半分を結果として採用できます。
  • mビットとmビットの乗算結果の下位mビットは、オーバーフローが生じなければ符号付きと符号なしで同一となりますので、書式AとBは符号なしの乗算にも使用できます。

←前ページへ :  INDEX :  次ページへ→