Chapter 5 - Faculty Server Contact | UMass...

35
Chapter 5 Real-Mode 80386DX Microprocessor Programming 1 Part 1

Transcript of Chapter 5 - Faculty Server Contact | UMass...

Page 1: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

Chapter 5

Real-Mode 80386DXMicroprocessor Programming 1

Part 1

Page 2: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 2

Introduction

5.2 Data-Transfer Instructions5.3 Arithmetic Instructions5.4 Logic Instructions5.5 Shift Instructions5.6 Rotate Instructions5.7 Bit Test and Bit Scan Instructions

Page 3: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 3

Move Instruction• Used to move (copy) data between:

• Registers• Register and memory• Immediate operand to a register or memory

• General format: MOV D,S• Operation: Copies the content of the source

to the destination(S) (D)

• Source contents unchanged• Flags unaffected

• Allowed operandsRegisterMemoryAccumulator (AH,AL,AX,EAX)Immediate operand (S only)Segment register (Seg-reg)

• Example:MOV [SUM],AX(AL) (address SUM)(AH) (address SUM+1)

What is the addressing mode of the destination?

Page 4: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 4

Example of Move Instruction

• ExampleMOV DX,CS

Source = CS word dataDestination = DX word data

Operation: (CS) (DX)• State before fetch and execution

CS:IP = 0100:0100 = 01100HMove instruction code = 8CCAH(01100H) = 8CH(01101H) = CAH

(CS) = 0100H(DX) = XXXX don’t care state

Page 5: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 5

• Example (continued)• State after execution

CS:IP = 0100:0102 = 01102H01002H points to next

sequential instruction(CS) = 0100H(DX) = 0100H Value in CS

copied into DX- Rest of the bits in EDX

unaffected- Value in CS unchanged

How are the flags affected?

Example of Move Instruction

Page 6: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 6

Exeuction of Move Instruction• Debug execution example

MOV CX,[20]DS = 1A00(DS:20) = AA55H(1A00:20) (CX)

Page 7: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 7

Usage of Move Instruction• Example—Initialization of internal registers

with immediate data and addressinformation• DS, ES, and SS registers initialized from

immediate data via AXIMM16 (AX)(AX) (DS) & (ES) = 2000HIMM16 (AX)(AX) (SS) = 3000H

• Data registers initializedIMM16 (AX) =0000H(AX) (BX) =0000HIMM16 (CX) = 000AH and (DX) = 0100H

• Index register initialized from immediateoperands

IMM16 (SI) = 0200H and (DI) = 0300H

Page 8: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 8

Sign-Extend and Zero-Extend Move Instruction• Sign-Extend Move instruction

• Used to move (copy) data between two registersor memory and a register and extend the valuewith the value of the sign bit

• General format:MOVSX D,S

• Operation: Copies the content of the source to thedestination

(S) (D); source contents unchanged• Sign bit extended through bit 16 or 32• Flags unaffected

• Examples: MOVSX EBX,AXWhere: (AX) = FFFFH

S = Reg16D = Reg32Sign bit (AX) = 1FFFFFFFFH (EBX)

• Zero-Extend Move instruction—MOVZX• Operates the same as MOVSX except extends

with zeros• Example:MOVZX CX, Byte Pointer [DATA_BYTE] Where: (DATA_BYTE) = FFH,S = Mem8,D = Reg16

00FFH (CX)

Where might one usethese instructions?

Why both signextend and zeroextend?

Page 9: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 9

Exchange Instruction• Used to exchange the data between

two data registers or a data registerand memory

• General format:XCHG D,S

• Operation: Swaps the content of thesource and destination• Both source and destination

change(S) (D)(D) (S)

• Flags unaffected• Special accumulator destination

version executes faster• Examples: XCHG AX,DX

(Original value in AX) (DX)(Original value in DX) (AX)

Page 10: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 10

Example of Exchange Instruction• Example

XCHG [SUM],BXSource = BX word dataDestination = memory address

SUM word data Operation:

(SUM) (BX)(BX) (SUM)

• State before fetch and executionCS:IP = 1100:0101 = 11101H

XCHG instruction code = 871E3412H(01104H,01103H) = 1234H = SUM(DS) = 1200H(BX) = 11AA(DS:SUM) = (1200:1234) = 00FFH

Page 11: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 11

• Example (continued)• State after execution

CS:IP = 1100:0105 = 11105H11105H points to nextsequential instruction(BX) = 00FFH- Rest of the bits in EBX

unaffected - Memory updated

(1200:1234) = AAH(1200:1235) = 11H

Example of Exchange Instruction

Page 12: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 12

Execution of Exchange Instruction

Page 13: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 13

Translate Instruction

• Translate instruction• Used to look up a byte-wide value in a table in memory and copy that value

into the AL register• General format: XLAT

• Operands are said to be “implicit”• Operation: Copies the content of the element pointed to in the source table in

memory to the AL register((AL)+(BX) +(DS)0) (AL) Where:

(DS)0 = Points to the active data segment(BX) = Offset to the first element in the table(AL) = Displacement to the element of the table that is to be accessed**8-bit value limits table size to 256 element

Page 14: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 14

Translate Instruction (example)

• Application: ASCII to EBCDIC Translation• Fixed EBCDIC table coded into memory

starting at offset in BX• Individual EBCDIC codes placed in table at

displacement (AL) equal to the value oftheir equivalent ASCII character

• A = 41H in ASCII, A = C1H in EBCDIC• Place the value C1H in memory at

address (41H+(BX) +(DS)0), etc.• Example

XLAT(DS) = 0300H(BX) = 0100H(AL) = 3FH 6FH = ? (Questionmark)

* Figure not in textbook

Page 15: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 15

Load Effective Address

• Load effective address instruction• Used to load the effective

address of a pointer frommemory into a register

• General format:LEA Reg16/32,EA

• Operation:(EA) (Reg16/32)

• Source unaffected:• Flags unaffected

Page 16: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 16

Load Full Pointer Instructions

• Used to load a full address pointer frommemory into a segment register andregister

• General formats and operation for LDSand LSS

LDS Reg16/32,EA(EA) (Reg16/32)(EA+2/4) (DS)

LSS Reg16/32,EA(EA) (Reg16/32)(EA+2/4) (SS)

• LES, LFS, and LGS operate the same LES Reg16/32,EA (EA) (Reg16/32),(ES) LFS Reg16/32,EA (EA) (Reg16/32),(FS) LGS Reg16/32,EA (EA) (Reg16/32),(GS)

Page 17: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 17

Load Full Pointer Instructions (example)

• ExampleLDS SI,[200H]Source = pointer at DS:200H 32 bitsDestination = SI offset of pointer

DS sba of pointerOperation: (DS:200H) (SI)

(DS:202H) (DS)• State before fetch and execution

CS:IP = 1100:0100 = 11100HLDS instruction code = C5360002H(11102H,11103H) = (EA) = 2000H(DS) = 1200H(SI) = XXXX don’t care state(DS:EA) = 12200H = 0020H(DS:EA+2) = 12202H = 1300

Error 02 not 20

Page 18: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 18

• Example (continued)• State after execution

CS:IP = 1100:0104 = 11104H01004H points to next

sequential instruction(DS) = 1300H defines newdata segment(SI) = 0020H- Rest of the bits in ESIunaffected

Load Full Pointer Instructions (example)

Page 19: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 19

Example• Example—Initialization of internal registers

from memory with data and addressinformation• DS loaded via AX with immediate value using

move instructions DATA_SEG_ADDR (AX) (DS)

• Index register SI loaded with move from table(INIT_TABLE,INIT_TABLE) SI

• DI and ES are loaded with load full pointerinstruction(INIT_TABLE+2,INIT_TABLE+3) DI(INIT_TABLE+4,INIT_TABLE+5) ES

• SS loaded from table via AX using moveinstructions(INIT_TABLE+6,INIT_TABLE+7) AX (SS)

• Data registers loaded from table with moveinstructions

(INIT_TABLE+8,INIT_TABLE+9) AX(INIT_TABLE+A,INIT_TABLE+B) BX(INIT_TABLE+C,INIT_TABLE+D) CX(INIT_TABLE+E,INIT_TABLE+F) DX

Page 20: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 20

Addition Instructions• Variety of arithmetic instructionprovided to support integeraddition—core instructions are• ADD Addition• ADC Add with carry• INC Increment

• Addition Instruction—ADD• ADD format and operation:

ADD D,S(S) +(D) (D)• Add values in two registers

ADD AX,BX(AX) + (BX) (AX) & CF

• Add a value in memory and a valuein a registerADD [DI],AX(DS:DI) + (AX) (DS:DI)

• Add an immediate operand to a valuein a register or memoryADD AX,100H(AX) + IMM16 (AX)

• Flags updated based on result• CF, OF, SF, ZF, AF, PF

Page 21: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 21

Addition Instructions (example)

• ExampleADD AX,BX(AX) + (BX) (AX)• Word-wide register to register

add• Half adder operation

• State before fetch andexecution

CS:IP = 1100:0100 = 11100HADD instruction code = 03C3H(AX) = 1100H(BX) = 0ABCH(DS) = 1200H(1200:0000) = 12000H = XXXX

Page 22: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 22

5.3 Arithmetic Instructions- Addition Instructions

• Example (continued)• State after execution

CS:IP = 1100:0102 = 11102H01002H points to next sequential instruction

• Operation performed(AX) + (BX) = (AX)

(1100H) + (0ABCH) = 1BBCH = 00011011101111002

(AX) = 1BBCHUpper bits of (AX) unchanged(BX) = unchanged

• Impact on flags• CF =0 (no carry resulted)• ZF = 0 (not zero)• SF = 0 (positive)• PF = 0 (odd parity)

Addition Instructions (example)

Page 23: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 23

Other Addition Instructions• Add with carry instruction—ADC

• ADC format and operation: ADC D,S(S) +(D) + (CF) (D)• Full-add operation

• Add two registers with carryADC AX,BX (AX) + (BX) + (CF) (AX) & CF

• Add register and memory with carryADC [DI],AX(DS:DI) + (AX)+ (CF) (DS:DI)

• Add immediate operand to a value ina register or memory

ADC AX,100H(AX) + IMM16 + (CF) (AX)

• Same flags updated as ADD• Increment instruction—INC

• INC format and operationINC D(D) + 1 (D)

• Used to increment pointers

Page 24: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 24

Examples of Addition Instructions• Example—Arithmetic computations

• Initial state:(AX) = 1234H(BL) = ABH(SUM) = 00CDH(CF) = 0

• Operation of first instruction(DS:SUM) + (AX) (AX)00CDH + 1234H = 1301H(AX) = 1301H(CF) = unchanged

• Operation of second instruction(BL) + IMM8 +(CF) BLABH + 05H + 0 = B0H(BL) = B0H(CF) = unchanged

• Operation of third instruction (DS:SUM) + 1 (DS:SUM)

00CDH + 1 = 00CEH(SUM) = 00CEH(CF) = unchanged

Page 25: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 25

• Example—Execution of the arithmetic computationsequence

Examples of Addition Instructions

Page 26: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 26

Subtraction Instructions• Variety of arithmetic instructions provided

to support integer subtraction—coreinstructions are• SUB Subtract• SBB Subtract with borrow• DEC Decrement• NEG Negative

• Subtract Instruction—SUB• SUB format and operation: SUB D,S

(D) - (S) (D)• Subtract values in two registers

SUB AX,BX(AX) - (BX) (AX)

• Subtract a value in memory and a valuein a registerSUB [DI],AX(DS:DI) - (AX) (DS:DI)

• Subtract an immediate operand from avalue in a register or memorySUB AX,100H(AX) - IMM16 (AX)

• Flags updated based on result• CF, OF, SF, ZF, AF, PF

Page 27: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 27

Subtraction Instructions

• Subtract with borrowinstruction—SBB• SBB format and operation:

SBB D,S(D) - (S) - (CF) (D)

• Subtracts two registers and carry(borrow)SBB AX,BX

• Example:SBB BX,CX(BX) = 1234H(CX) = 0123H(CF) = 0(BX) - (CX) - (CF) (BX)1234H - 01234H - 0H = 1111H(BX) = 1111H

Page 28: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 28

Subtraction Instructions• Negate instruction—NEG

• NEG format and operationNEG D(0) - (D) (D)(1) (CF)

• Example:NEG BX(BX) =003AH(0) - (BX) (BX)0000H – 003AH=0000H + FFC6H (2’s complement) =

FFC6H(BX) =FFC6H; CF = 1

• Decrement instruction—DEC• DEC format and operation

DEC D(D) - 1 (D)

• Used to decrement pointers• Example

DEC SI(SI) = 0FFFH(SI) - 1 SI0FFFH - 1 = 0FFEH(DI) = 0FFEH

Page 29: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 29

Multiplication and Division Instructions

Page 30: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 30

Multiplication Instructions

• Integer multiply instructions—MUL and IMUL• Multiply two unsigned or signed byte, word, or double word

operands• General format and operation

MUL S = Unsigned integer multiplyIMUL S = Signed integer multiply

(AL) X (S8) (AX) 8-bit product gives 16 bit result(AX) X (S16) (DX), (AX) 16-bit product gives 32 bit result(EAX) X (S32) (EDX), (EAX) 32-bit product gives 64 bit result

• Source operand (S) can be an 8-bit, 16-bit, or 32-bit value in a registeror memory

• Other source operand is “implicit” and is AL, AX, or EAX• Destination in “implicit”

• AX assumed to be destination for 16 bit result• DX,AX assumed destination for 32 bit result• EDX,EAX assumed destination for 64 bit result

• Only CF and OF flags updated; other undefined

Page 31: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 31

Multiplication Instructions

• Integer multiply instructions—MUL and IMUL• Other formats of the signed multiply instruction

IMUL R,I = Register operand times immediate operand; result in theregister

Typical operation: (R16) X IMM8 (R16)IMUL R,S,I = Source in a register or memory times immediate operand;

result in the registerTypical operation: (S32) X IMM8 (R32)

IMUL R,S = Source time register; result in the registerTypical operation: (R32) X (S32) (R32)

Page 32: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 32

Multiplication Instruction Example• Example: unsigned multiply

MUL CL(AL) = -110(CL) = -210Expressing in 2’s complement(AL) = -1 = 111111112 = FFH(CL) = -2 = 111111102 = FEHOperation: numbers aretreated as unsigned integers(AL) X (CL) (AX)

255 X 254 = ? 111111112 X 111111102 = ?

= 1111 1101 00000010 (AX) = FD02H

(CF) = CY carry fromAL to AH

C:\WINDOWS>debug

-a cs:100

106D:0100 mul cl

106D:0102

-r ax

AX 0000

:ff

-r cx

CX 0000

:fe

-u cs:100 101

106D:0100 F6E1 MUL CL

-r

AX=00FF BX=0000 CX=00FE DX=0000 SP=FFEE BP=0000 SI=0000DI=0000

DS=106D ES=106D SS=106D CS=106D IP=0100 NV UP EI PL NZNA PO NC

106D:0100 F6E1 MUL CL

-t =cs:100

AX=FD02 BX=0000 CX=00FE DX=0000 SP=FFEE BP=0000 SI=0000DI=0000

DS=106D ES=106D SS=106D CS=106D IP=0102 OV UP EI PL NZNA PO CY

106D:0102 86E9 XCHG CH,CL

Page 33: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 33

Multiplication Instructions Example

• Example:multiplying assigned numbers

IMUL CL(AL) = -110

(CL) = -210

Result(-1) X (-2) = +2

C:\WINDOWS>debug-a cs:100106D:0100 imul cl106D:0102-r axAX 0000

:ff-r cxCX 0000:fe-rAX=00FF BX=0000 CX=00FE DX=0000 SP=FFEE BP=0000 SI=0000

DI=0000

DS=106D ES=106D SS=106D CS=106D IP=0100 NV UP EI PL NZ NAPO NC

106D:0100 F6E9 IMUL CL-u cs:100 101106D:0100 F6E9 IMUL CL-t =cs:100

AX=0002 BX=0000 CX=00FE DX=0000 SP=FFEE BP=0000 SI=0000DI=0000

DS=106D ES=106D SS=106D CS=106D IP=0102 NV UP EI PL NZ NAPO NC

106D:0102 86E9 XCHG CH,CL-

Page 34: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 34

Division Instruction• Integer divide instructions—DIV and IDIV

• Divide unsigned– DIV S• Operations:(AX) / (S8) (AL) =quotient

(AH) = remainder• 16 bit dividend in AX divided by 8-bit

divisor in a register or memory,• Quotient of result produced in AL• Remainder of result produced in AH

(DX,AX) / (S16) (AX) =quotient (DX) = remainder

• 32 bit dividend in DX,AX divided by 16-bit divisor in a register or memory

• Quotient of result produced in AX• Remainder of result produced in DX

(EDX,EAX) / (S32) (EAX) =quotient (EDX) = remainder

• 64 bit dividend in EDX,EAX divided by32-bit divisor in a register or memory

• Quotient of result in EAX• Remainder of result in EDX

• Divide error (Type 0) interrupt may occur

Page 35: Chapter 5 - Faculty Server Contact | UMass Lowellfaculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter5.pdfThe 80386, 80486, and Prentium Processors,Triebel Prof. Yan Luo, UMass Lowell

The 80386, 80486, and Prentium Processors,TriebelProf. Yan Luo, UMass Lowell 35

Convert Instructions• Convert instructions

• Used to sign extension signednumbers for division

• Operations• CBW = convert byte to word

(MSB of AL) (all bits of AH)• CWDE = convert word to double word

(MSB of AX) (16 MSBs of EAX)• CWD = convert word to double word

(MSB of AX) (all bits of DX)• CDQ = convert word to quad word

(MSB of EAX) (all bits of EDX)• Application:

• To divide two signed 8-bit numbers, thevalue of the dividend must be signextended in AX– load into AL and thenuse CBW to sign extend to 16 bits

• ExampleA1H ALCBW sign extends to giveFFA1H AXCWD sign extends to giveFFFFH DX