multiplication & division instructions microprocessor 8086

51

Upload: university-of-gujrat-pakistan

Post on 15-Jul-2015

482 views

Category:

Engineering


14 download

TRANSCRIPT

Page 1: Multiplication & division instructions microprocessor 8086
Page 2: Multiplication & division instructions microprocessor 8086

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

Multiplication

MUL(unsinged)

IMUL(singed)

Page 4: Multiplication & division instructions microprocessor 8086

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

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

MUL INSTRUCTION

Page 7: Multiplication & division instructions microprocessor 8086

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

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

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

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

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

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

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

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

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

DIVIDE

DIV(unsinged) IDIV(singed)

Page 17: Multiplication & division instructions microprocessor 8086

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

CONT..

Output:

Page 36: Multiplication & division instructions microprocessor 8086

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

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

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

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

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

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

CONT..

Output:

Page 43: Multiplication & division instructions microprocessor 8086

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

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

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

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

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

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

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

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