I. Multiply (MUL) instruction
--------------------------
*---------*
1. MUL byte: AL * byte -> | AH | AL |
-------- *---------*
where byte can be any one of AL, AH, BL, BH, CL, CH, DL, DH,
or a byte in memory.
*---------*
2. MUL word: AX * word -> | DX | AX |
-------- *---------*
where word can be any one of AX, BX, CX, DX, SI, DI, BP, SP,
or a word in memory.
II. Divide (DIV) instruction
--------------------------
*--------------------------------*
1. DIV byte: AX / byte -> | AH (Remainder) | AL (Quotient) |
-------- *--------------------------------*
where byte can be any one of AL, AH, BL, BH, CL, CH, DL, DH,
or a byte in memory.
*-------------------------------*
2. DIV word: DX:AX / word -> | DX (Remainder)| AX (Quotient) |
-------- *-------------------------------*
where word can be any one of AX, BX, CX, DX, SI, DI, BP, SP,
or a word in memory.
c:\>debug
-a 0100
1234:0100 jmp 0200
1234:0103
-a 0200
1234:0200 mov al,72
1234:0202 mov cl,04
1234:0204 shr al,cl
1234:0206 sub ah,ah
1234:0208 mov bl,06
1234:020a mul bl
1234:020c sub ah,ah
1234:020e mov al,4e
1234:0210 mov bl,08
1234:0212 div bl
1234:0214 sub ax,ax
1234:0216 mov ah,4c
1234:0218 int 21
1234:021a
-n a:MulDiv01.COM
-r cx
CX 0000
: 0219
-w
Writing 00219 bytes
-t
AX=0000 BX=0000 CX=0219 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1234 ES=1234 SS=1234 CS=1234 IP=0200 NV UP EI PL NZ NA PO NC
1234:0200 B072 MOV AL,72
...
-t
AX=0007 BX=0006 CX=0204 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1234 ES=1234 SS=1234 CS=1234 IP=020A NV UP EI PL ZR NA PE NC
1234:020A F6E3 MUL BL
-t
AX=002A BX=0006 CX=0204 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1234 ES=1234 SS=1234 CS=1234 IP=020C NV UP EI PL NZ NA PE NC
1234:020C 28E4 SUB AH,AH
...
-t
AX=004E BX=0008 CX=0204 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1234 ES=1234 SS=1234 CS=1234 IP=0212 NV UP EI PL ZR NA PE NC
1234:0212 F6F3 DIV BL
-t
AX=0609 BX=0008 CX=0204 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1234 ES=1234 SS=1234 CS=1234 IP=0214 NV UP EI PL NZ NA PE NC
1234:0214 29C0 SUB AX,AX