![Page 1: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/1.jpg)
![Page 2: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/2.jpg)
TOPIC:MULTIPLICATION AND DIVISION
Group member:
M Hamza Nasir
(12063122-067)
M Usaman Ali
(12063122-086)
Syed Farhan Abbas
(12063122-009)
M Faran Ali
(12063122-055)
Ateeb Saeed
(12063122-094)
University Of Gujrat
![Page 3: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/3.jpg)
Multiplication
MUL(unsinged)
IMUL(singed)
![Page 4: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/4.jpg)
MUL INSTRUCTION(UNSIGNED MULTIPLY)
Multiplies an 8-, 16-, or 32-bit operand by
either AL, AX
Syntax:MUL AL R/M8
Syntax: MUL AX R/M16
![Page 5: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/5.jpg)
MUL INSTRUCTIONNote that the product is stored in a register (or
group of registers) twice the size of the operands.
The operand can be a register or a memory operand
![Page 6: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/6.jpg)
MUL INSTRUCTION
![Page 7: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/7.jpg)
MUL EXAMPLES
Mov al, 5h
Mov bl, 10h
Mul bl ; AX = 0050h, CF = 0
No overflow - the Carry flag is 0 because the
upper half of AX is zero
![Page 8: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/8.jpg)
IMUL INSTRUCTION(SIGNED MULTIPLY)
same syntax
uses the same operands as the MUL
instruction
preserves the sign of the product
Opcode=IMUL
![Page 9: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/9.jpg)
IMUL INSTRUCTION
Suppose AX contains 1 and BX contains FFFFh
Mov AX, 1h
Mov BX, FFFFh
IMUL BX ;
Decimal product=-1,
Hex Product =FFFFFFFFh
DX = FFFFh, AX=FFFFh CF/OF=0
DX is a sign extension of AX for this CF/OF=0
![Page 10: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/10.jpg)
IMUL INSTRUCTION
IMUL sets the Carry and Overflow flags if the
high-order product is not a sign extension of
the low-order product
Mov al, 48
Mov bl, 4
Imul bl ;AX = 00C0h, OF = 1
AH is not a sign extension of AL, so the
Overflow flag is set
![Page 11: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/11.jpg)
IMUL INSTRUCTION
Suppose AX contains FFFFh and BX contains FFFFh
Mov AX, FFFFH
Mov BX, FFFFh
IMUL BX
Decimal product=1
Hex Product = 00000001 h
DX = 0000h, AX=0001h CF/OF=0
DX is a sign extension of AX for this CF/OF=0
![Page 12: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/12.jpg)
IMUL INSTRUCTION
Suppose AX contains 0FFFh.and BX contains 0FFFh
Mov AX, 0FFFH
Mov BX, 0FFFh
IMUL BX
Decimal product=16769025
Hex Product = 00FFE001 h
DX = 00FFh, AX=E001h CF/OF=0
DX is a not sign extension of AX for this CF/OF=1
![Page 13: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/13.jpg)
IMUL INSTRUCTION
Suppose AL contains 80h.and BL contains FFh
Mov AL, 80H
Mov BL, FFh
IMUL BL
Decimal product=128,
Hex Product = 0080 h
AH = 00h, AL=80h CF/OF=01
DX is a not sign extension of AX for this CF/OF=1
![Page 14: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/14.jpg)
APPLICATION OF MUL AND IMUL
Translate the high level language assignment
statement
A=5×A-12×B
Let A and B be word variables, and suppose
there is no overflow.
Use IMUL for multiplication
![Page 15: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/15.jpg)
SOLUTION:
Mov AX,5 ;AX=5
IMUL A ;AX=5*A
MOV A,AX ;A=5*A
MOV AX,12 ;AX=12
IMUL B ;AX=12*B
SUB A,AX ;5*A-12*B
![Page 16: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/16.jpg)
DIVIDE
DIV(unsinged) IDIV(singed)
![Page 17: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/17.jpg)
DIVIDE AND IDIVIDE
When division is performed we obtain two
results
The quotient and
The remainder.
Similarly like Multiplication there are separate
instructions for unsigned and signed division
![Page 18: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/18.jpg)
CONT..
Syntax:
DIV divisor
IDIV divisor
Byte Form:
The divisor is eight bit register or memory byte
The 16 – bit dividend is assumed to be in AX. After division 8-bit quotient is in AL and 8-bit remainder in AH.
![Page 19: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/19.jpg)
CONT..
Word Form:
The divisor is a 16-bit register or memory word
The 32-bit dividend is assumed to be in DX:AX
After division, the 16-bit quotient is in AX and 16-
bit remainder is in DX
Effect on flags:
All status flags are undefined
![Page 20: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/20.jpg)
CONT..
Divide Overflow:
It is possible that the quotient s too big to fit
in the specified destination(AL or AX).
This Happens Because the divisor is much
smaller than the dividend.
When this Happens the program terminates
and system displays message “divide overflow”
![Page 21: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/21.jpg)
CONT..
Examples:
EXAMPLE 9.8:
Suppose DX contains 0000h , AX contains 0005h, and BX contains 0002h.
EXAMPLE 9.9:
Suppose DX contains 0000h , AX contains 0005h and BX contains FFFEh.
EXAmple 9.10:
Suppose AX contains 00FBh and BL contains FFh.
![Page 22: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/22.jpg)
DECIMAL INPUT AND OUTPUT
Computer represent every thing in binary
But it is convenient for user to represent
input and output in decimal
If we input 21543 character string then it
must to converted internally
Conversely on output the binary contents of
R/M must be converted to decimal equivalent
before being printed
![Page 23: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/23.jpg)
DECIMAL INPUT
Convert a string of ASCII digits to the binary representation of decimal equivalent
For input we repeatedly multiply AX by 10
Algorithm (First version):
Total=0
Read an ASCII
REPEATconvert character to number
Total=total*10+value
Read a character
Until character is carriage return
![Page 24: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/24.jpg)
CONT..
Example: input of 123
Total =0
Read ‘1’
Convert ‘1’ to 1
Total=10*0 +1=1
Read ‘2’
Convert ‘2’ to 2
Total=10*1 +2=12
Read ‘3’
Convert ‘3’ to 3
Total=10*12 +3=123
![Page 25: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/25.jpg)
CONT..
Range: -32768 to 32767
Optional sign followed by string of digits
& carriage return
Outside ‘0’ to ‘9’
jumps to new line and ask for input
again
![Page 26: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/26.jpg)
CONT..Algorithm(second version):
total=0
Negative=false
Read a character
Case character of
• ‘-’: negative=true
read a character
• ‘+’: read a character
End_case
Repeat
If character is not between ‘0’ to ‘9’
Then
Go to beginning
![Page 27: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/27.jpg)
CONT..Else
Convert character to binary value
Total=10*total+value
End_if
Read a character
Until character is carriage return
If negative =true
Then
total=-total
![Page 28: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/28.jpg)
CONT..
Program(source code):
INDEC PROC
;READ NUMBER IN RANGE -32768 TO 32767
PUSH BX
PUSH CX
PUSH DX
@BEGIN:
;total =0
XOR BX,BX ;BX hold total
;negative =false
![Page 29: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/29.jpg)
CONT..XOR CX,CX ;CX hold sign
;read char
MOV AH,1
INT 21H
;case char of
CMP AL,'-' ;minus sign
JE @MINUS ;yes,set sign
CMP AL,'+' ;plus sign
JE @PLUS ;yes,get another char
![Page 30: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/30.jpg)
CONT..
JMP @REPEAT2 ;start processing char
@MINUS: MOV CX,1
@PLUS: INT 21H
;end case
@REPEAT2:
;if char. is between '0' and '9'
CMP AL,'0' ;char >='0'?
JNGE @NOT_DIGIT ;illegal char.
![Page 31: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/31.jpg)
CONT..CMP AL,'9' ;char<='9' ?
JNLE @NOT_DIGIT
;then convert char to digit
AND AX,000FH
PUSH AX ;save number
;total =total *10 +digit
MOV AX,10
MUL BX
POP BX ;retrieve number
ADD BX,AX ;total =total *10
+digit
![Page 32: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/32.jpg)
CONT..;read char
MOV AH,1
INT 21H
CMP AL,0DH ;CR
JNE @REPEAT2 ;no keep going
;until CR
MOV AX,BX ;store number
in AX
;if negative
OR CX,CX ;negative
number
![Page 33: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/33.jpg)
CONT..
Jz @EXIT ;no,exit
;then
NEG AX ;yes,negate
;end if
@EXIT: ;retrieve registers
POP DX
POP CX
POP BX
RET
![Page 34: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/34.jpg)
CONT..
;here if illegal char entered
@NOT_DIGIT:
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
JMP @BEGIN
INDEC ENDP
![Page 35: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/35.jpg)
CONT..
Output:
![Page 36: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/36.jpg)
INPUT OVERFLOW
AX:FFFFh
In decimal:65535
Range:-32768 to 32767
Anything out of range called input overflow
For example:
Input:32769
Total=327690
![Page 37: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/37.jpg)
CONT..
Algorithm:
total=0
Negative=false
Read a character
Case character of
• ‘-’: negative=true
read a character
• ‘+’: read a character
![Page 38: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/38.jpg)
CONT..
End_case
Repeat
If character is not between ‘0’ to ‘9’
Then
Go to beginning
Else
Convert character to binary value
Total=10*total
![Page 39: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/39.jpg)
CONT..
If overflow
Then
go to beginning
Else
Total =total*10 +value
If overflow
Then
go to beginning
![Page 40: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/40.jpg)
CONT..
End_if
End_if
End_if
Read a character
Until character is carriage return
If negative =true
Then
total=-total
![Page 41: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/41.jpg)
CONT..
Code:
;total =total *10 +digit
MOV AX,10
MUL BX
CMP DX,0
JNE @NOT_DIGIT
POP BX
ADD BX,AX
JC @NOT_DIGIT
![Page 42: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/42.jpg)
CONT..
Output:
![Page 43: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/43.jpg)
Decimal Output
Algorithm for Decimal Output:
If AX < 0 /*AX holds output value */
THEN
Print a minus sign
Replace AX by its twos complement
End_IF
Get the digits in AX’s decimal representation
Convert these digits into characters and print
them
![Page 44: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/44.jpg)
CONT..
To see what line 6 entitles, suppose the contents of AX, expressed in decimal is 24168. To get the digits in decimal representation , we can proceed as follows,
Divide 24618 by 10, Quotient= 2461, remainder=8
Divide 2461 by 10, Quotient= 246, remainder=1
Divide 246 by 10 , Quotient=24, remainder=6
Divide 24 by 10, Quotient=2, remainder=4
Divide 2 by 10, Quotient=0, remainder=2
![Page 45: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/45.jpg)
CONT..
LINE 6:
Cout =0 /*will count decimal digit */
REPEAT
divide quotient by 10
Push remainder on the stack
Count= count +1
UNTILL
Quotient=0
![Page 46: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/46.jpg)
CONT..
LINE 7:
FOR count times DO
Pop a digit from the stack
Convert it to a character
Output the character
END_FOR
![Page 47: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/47.jpg)
CONT..
Program Listing PMG9_1.ASM
.MODEL SMALL
.STACK 100H
.CODE
OUTDEC PROC
;prints AX as a signed decimal integer
;input: AX
;output: none
PUSH AX ;save registers
PUSH BX
PUSH CX
PUSH DX
![Page 48: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/48.jpg)
CONT..;if AX < 0
OR AX,AX ;AX < 0?
JGE @END_IF1 ;NO >0
;then
PUSH AX ; save number
MOV DL,’-’ ;get ‘-’
MOV AH,2 ;print character function
INT 21H ;print ‘-’
POP AX ;get Ax back
NEG AX ;AX= -AX
@END_IF1:
![Page 49: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/49.jpg)
CONT..;get decimal digits
XOR CX,CX ;CX counts digits
MOV BX,10D ;BX has divisor
@REPEAT1:
XOR DX,DX ;prepare high word of dividend
DIV BX ;AX=quotient, DX=remainder
PUSH DX ;save remainder on stack
INC CX ;count = count +1
;until
OR AX,AX ;quotient = 0?
JNE @REPEAT ;no, keep going
![Page 50: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/50.jpg)
CONT..;convert digits to character and print
MOV AH,2 ;print character function
;for count time do
@PRINT_LOOP
POP DX ;digit in DL
OR DL,30H ;convert to character
INT 21H ;print digit
;end_for
POP DX ; restore registers
POP CX
POP BX
POP AX
OUTDEC ENDP
![Page 51: Multiplication & division instructions microprocessor 8086](https://reader031.vdocument.in/reader031/viewer/2022012303/55a67f421a28ab5a6f8b4800/html5/thumbnails/51.jpg)