TOPIC:
MULTIPLICATI
ON 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
Multiplication
MUL(unsinged
)
IMUL(singed)
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
MUL INSTRUCTION
Note 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
MUL INSTRUCTION
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
IMUL INSTRUCTION
(SIGNED MULTIPLY)
same syntax
uses the same operands as the MUL
instruction
 preserves the sign of the product
Opcode=IMUL
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
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
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
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
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
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
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
DIVIDE
DIV(unsinged) IDIV(singed)
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
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.
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
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”
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.
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
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
REPEAT
convert character to number
Total=total*10+value
Read a character
Until character is carriage return
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
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
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
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
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
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
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.
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
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
CONT..
Jz @EXIT ;no,exit
;then
NEG AX ;yes,negate
;end if
@EXIT: ;retrieve registers
POP DX
POP CX
POP BX
RET
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
CONT..
Output:
INPUT OVERFLOW
AX:FFFFh
In decimal:65535
Range:-32768 to 32767
Anything out of range called input overflow
For example:
Input:32769
Total=327690
CONT..
Algorithm:
total=0
Negative=false
Read a character
Case character of
• ‘-’: negative=true
read a character
• ‘+’: read a character
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
CONT..
If overflow
Then
go to beginning
Else
Total =total*10 +value
If overflow
Then
go to beginning
CONT..
End_if
End_if
End_if
Read a character
Until character is carriage return
If negative =true
Then
total=-total
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
CONT..
Output:
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
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
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
CONT..
LINE 7:
FOR count times DO
Pop a digit from the stack
Convert it to a character
Output the character
END_FOR
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
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:
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
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
Multiplication & division instructions microprocessor 8086

Multiplication & division instructions microprocessor 8086

  • 2.
    TOPIC: MULTIPLICATI ON AND DIVISION Group member: MHamza 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
  • 3.
  • 4.
    MUL INSTRUCTION (UNSIGNED MULTIPLY) Multipliesan 8-, 16-, or 32-bit operand by either AL, AX Syntax:MUL AL R/M8 Syntax: MUL AX R/M16
  • 5.
    MUL INSTRUCTION Note thatthe 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
  • 6.
  • 7.
    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
  • 8.
    IMUL INSTRUCTION (SIGNED MULTIPLY) samesyntax uses the same operands as the MUL instruction  preserves the sign of the product Opcode=IMUL
  • 9.
    IMUL INSTRUCTION Suppose AXcontains 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
  • 10.
    IMUL INSTRUCTION IMUL setsthe 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
  • 11.
    IMUL INSTRUCTION Suppose AXcontains 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
  • 12.
    IMUL INSTRUCTION Suppose AXcontains 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
  • 13.
    IMUL INSTRUCTION Suppose ALcontains 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
  • 14.
    APPLICATION OF MULAND 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
  • 15.
    SOLUTION: Mov AX,5 ;AX=5 IMULA ;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
  • 16.
  • 17.
    DIVIDE AND IDIVIDE Whendivision is performed we obtain two results The quotient and The remainder. Similarly like Multiplication there are separate instructions for unsigned and signed division
  • 18.
    CONT.. Syntax: DIV divisor IDIV divisor ByteForm: 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.
  • 19.
    CONT.. Word Form: The divisoris 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
  • 20.
    CONT.. Divide Overflow: It ispossible 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”
  • 21.
    CONT.. Examples: EXAMPLE 9.8: Suppose DXcontains 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.
  • 22.
    DECIMAL INPUT AND OUTPUT Computerrepresent 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
  • 23.
    DECIMAL INPUT Convert astring 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 REPEAT convert character to number Total=total*10+value Read a character Until character is carriage return
  • 24.
    CONT.. Example: input of123 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
  • 25.
    CONT.. Range: -32768 to32767 Optional sign followed by string of digits & carriage return Outside ‘0’ to ‘9’ jumps to new line and ask for input again
  • 26.
    CONT.. Algorithm(second version): total=0 Negative=false Read acharacter 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
  • 27.
    CONT.. Else Convert character tobinary value Total=10*total+value End_if Read a character Until character is carriage return If negative =true Then total=-total
  • 28.
    CONT.. Program(source code): INDEC PROC ;READNUMBER IN RANGE -32768 TO 32767 PUSH BX PUSH CX PUSH DX @BEGIN: ;total =0 XOR BX,BX ;BX hold total ;negative =false
  • 29.
    CONT.. XOR CX,CX ;CXhold 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
  • 30.
    CONT.. JMP @REPEAT2 ;startprocessing 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.
  • 31.
    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
  • 32.
    CONT.. ;read char MOV AH,1 INT21H CMP AL,0DH ;CR JNE @REPEAT2 ;no keep going ;until CR MOV AX,BX ;store number in AX ;if negative OR CX,CX ;negative
  • 33.
    CONT.. Jz @EXIT ;no,exit ;then NEGAX ;yes,negate ;end if @EXIT: ;retrieve registers POP DX POP CX POP BX RET
  • 34.
    CONT.. ;here if illegalchar entered @NOT_DIGIT: MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H JMP @BEGIN INDEC ENDP
  • 35.
  • 36.
    INPUT OVERFLOW AX:FFFFh In decimal:65535 Range:-32768to 32767 Anything out of range called input overflow For example: Input:32769 Total=327690
  • 37.
    CONT.. Algorithm: total=0 Negative=false Read a character Casecharacter of • ‘-’: negative=true read a character • ‘+’: read a character
  • 38.
    CONT.. End_case Repeat If character isnot between ‘0’ to ‘9’ Then Go to beginning Else Convert character to binary value Total=10*total
  • 39.
    CONT.. If overflow Then go tobeginning Else Total =total*10 +value If overflow Then go to beginning
  • 40.
    CONT.. End_if End_if End_if Read a character Untilcharacter is carriage return If negative =true Then total=-total
  • 41.
    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
  • 42.
  • 43.
    Decimal Output Algorithm forDecimal 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
  • 44.
    CONT.. To see whatline 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
  • 45.
    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
  • 46.
    CONT.. LINE 7: FOR counttimes DO Pop a digit from the stack Convert it to a character Output the character END_FOR
  • 47.
    CONT.. Program Listing PMG9_1.ASM .MODELSMALL .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
  • 48.
    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:
  • 49.
    CONT.. ;get decimal digits XORCX,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
  • 50.
    CONT.. ;convert digits tocharacter 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