university of tehran 1 microprocessor system design omid fatemi 80x86 addressing modes...

28
University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes ([email protected])

Upload: nigel-rose

Post on 14-Dec-2015

222 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 1

Microprocessor System Design

Omid Fatemi

80x86 Addressing modes

([email protected])

Page 2: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 2

Review

• Programs for 80x86

• Machine language, Assembly, …

• Registers, segments

• Instruction set

• Simple program

• Logical, physical address

• Stack

Page 3: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 3

Storing data on X86 stack via PUSH

• The SP (Stack Pointer) register is used to access items on the stack. The SP register points to the LAST value put on the stack.

• The PUSH operation stores a value to the stack: PUSH AX ; SP= SP-2, M[SP] AX

• The “push AX” instruction is equivalent to: sub SP, 2 ; decrement SP by 2 for word operation mov [SP], AX ; write value to stack.

• Stack access only supports 16-bit or 32-bit operations

Page 4: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 4

Visualizing the PUSH operation

lastvalue????

????

????

????

????

????

????

????

high memory

low memory

SP

before PUSH AX

lastvalueahal

????

????

????

????

????

????

????

high memory

low memory

SP(new SP = old SP-2)

after PUSH AX

View memory as being 16 bits wide since stack operations are always 16 bit or 32 bits.

Page 5: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 5

Multiple Pushes

lastvalue????

????

????

????

????

????

????

????

high memory

low memory

SP

before

lastvalueax

bx

cx

????

????

????

????

????

high memory

SP

after all pushes

PUSH AXPUSH BXPUSH CX

low memory

Page 6: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 6

Reading Data from X86 stack via POP

The POP operation retrieves a value from the stack: POP AX ; AX M[SP] , SP= SP+2

The “pop AX” instruction is equivalent to: mov AX, [SP] ; read value from top of stack add sp, 2 ; increment SP by 2 for word operation

Page 7: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 7

Visualizing the POP operation

FF65

23AB

????

????

????

????

????

????

????

high memory

low memory

SP

before POP AX

FF65

23AB

????

????

????

????

????

????

????

high memory

low memory

SP

AX = 23AB

after POP AX

View memory as being 16 bits wide since stack operations are always 16 bit or 32 bits.

Page 8: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 8

Visualizing multiple POP operations

FF65

23AB

357F

D21B

38AC

23F4

????

????

????

high memory

low memory

SP

before

FF65

23AB

357F

D21B

38AC

23F4

????

????

????

high memory

low memory

SP

AX = 38AC BX = D21B CX = 357F

after all POPs

pop AXpop BXpop CX

Page 9: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 9

Stack Overflow, Underflow

• If you keep pushing data on the stack without taking data off the stack, then the stack can eventually grow larger than your allocated space– Can begin writing to memory area that your code is in or other

non-stack data

– This is called stack OVERFLOW

• If you take off more data than you placed on the stack, then stack pointer can increment past the ‘start’ of the stack. This is stack UNDERFLOW.

• Bottom line: You should allocate sufficient memory for your stack needs, and pop off the same amount of data as pushed in.

Page 10: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 10

Stack (summary)

• Temporary storage

• Segment and pointer SS:SP

• Push and Pop (LIFO)

• SP : top of the stack

• After push SP is decremented

Page 11: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 11

Addressing Modes

• Operands in an instruction

– Registers AX

– Numbers immediate 12H

– Memory

» Direct addressing [3965]

» Register indirect [BX]

» Based relative addressing mode [BX+6], [BP]-10

» Indexed relative addressing mode [SI+5], [DI]-8

» Based indexed addressing mode

Page 12: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 12

Operand types

1) Register - Encoded in instruction • Fastest executing • No bus access (in instr. queue) • Short instruction length

2) Immediate - Constant encoded in instruction • 8 or 16 bits • No bus access (in instr. queue) • Can only be source operand

3) Memory – in memory, requires bus transfer• Can require computation of address• Address of operand DATA is Called

EFFECTIVE ADDRESS

Page 13: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 13

Effective Address

• Computed by EU

• In General, Effective address = displacement + [base register]+ [index register]

(if any) (if any)

• Any Combination of These 3 Values

– Leads to Several Different Addressing Modes

• Displacement– 8 or 16 bit Constant in the Instruction– “base register” Must be BX or BP – “index register” Must be SI or DI

Page 14: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 14

Direct Addressing

mov [7000h], ax

mov es:[7000h], ax

opcode mod r/m displacement

effective address

ds:7000h ax

es:7000h ax

26 A3 00 70

A3 00 70

prefix byte - longer instruction - more fetch time

Page 15: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 15

Register Indirect Addressingmov al, [bp] ;al gets 8 bits at SS:BP

mov ah, [bx] ;ah gets 8 bits at DS:BX

mov ax, [di] ;ax gets 16 bits at DS:SI

mov eax, [si] ;eax gets 32 bits at DS:SI

opcode mod r/m

BX

effective addressBP

SI

DI

Page 16: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 16

Based Indirect Addressing

mov al, [bp+2] ;al gets 8 bits at SS:BP+2

mov ah, [bx-4] ;ah gets 8 bits at DS:BX-4

BX

effective address

BP+

opcode mod r/m displacement

Page 17: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 17

Indexed Indirect Addressingmov ax, [si+1000h] ;ax gets 16 bits at DS:SI+1000h

mov eax, [si+300h] ;eax gets 32 bits at DS:SI+300h

Mov [di+100h], al ;DS:DI+100h gets 8 bits in al

DI

effective address

SI+

opcode mod r/m displacement

Page 18: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 18

Based Indexed Indirect Addressing

mov ax, [bp+di] ;ax gets 16 bits at SS:BP+DI

mov ax, [di+bp] ;ax gets 16 bits at DS:BP+DI

mov eax, [bx+si+10h] ;eax gets 32 bits at DS:BX+SI+10h

mov cx, [bp+si-7] ;cx gets 16 bits at SS:BP+SI-7

DI

effective address

SI+

opcode mod r/m displacement

BX

BP+

Page 19: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 19

Addressing Mode Examplesmov al, bl ;8-bit register addressingmov di, bp ;16-bit register addressingmov eax, eax ;32-bit register addressingmov al, 12 ;8-bit immediate, al<-0chmov cx, faceh ;16-bit immediate, cx<-64,206mov ebx, 2h ;32-bit immediate, ebx<-00000002hmov al, LIST ;al<-8 bits stored at label LISTmov ch, DATA ;ch<-8 bits stored at label DATAmov ds, DATA2 ;ds<-16 bits stored at label DATA2mov al, [bp] ;al<-8 bits stored at SS:BPmov ah, [bx] ;ah<-8 bits stored at DS:BXmov ax, [bp] ;ax<-16 bits stored at SS:BPmov eax, [bx] ;eax<-32 bits stored at DS:BXmov al, [bp+2] ;al<-8 bits stored at SS:(BP+2)mov ax, [bx-4] ;ax<-16 bits stored at DS:(BX-4)mov al, LIST[bp] ;al<-8 bits stored at SS:(BP+LIST)mov bx, LIST[bx] ;bx<-16 bits stored at DS:(BX+LIST)mov al, LIST[bp+2] ;al<-8 bits stored at SS:(BP+2+LIST)mov ax, LIST[bx-12h] ;ax<-16 bits stored at DS:(BX-

18+LIST)

Register

Immediate

Direct

Based

Page 20: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 20

More Addressing Mode Examplesmov al, [si] ;al<-8 bits stored at DS:SImov ah, [di] ;ah<-8 bits stored at DS:DImov ax, [si] ;ax<-16 bits stored at DS:SImov eax, [di] ;eax<-32 bits stored at DS:DImov ax, es:[di] ;ax<-16 bits stored at ES:DImov al, [si+2] ;al<-8 bits stored at DS:(SI+2)mov ax, [di-4] ;ax<-16 bits stored at DS:(DI-4)mov al, LIST[si] ;al<-8 bits stored at DS:(SI+LIST)mov bx, LIST[di] ;bx<-16 bits stored at DS:(DI+LIST)mov al, LIST[si+2] ;al<-8 bits stored at DS:(SI+2+LIST)mov ax, LIST[di-12h] ;ax<-16 bits stored at DS:(DI-18+LIST)mov al, [bp+di] ;al<-8 bits from SS:(BP+DI)mov ah, ds:[bp+si] ;ah<-8 bits from DS:(BP+SI)mov ax, [bx+si] ;ax<-16 bits from DS:(BX+SI)mov eax, es:[bx+di] ;eax<-32 bits from ES:(BX+DI)mov al, LIST[bp+di] ;al<-8 bits from SS:(BP+DI+LIST)mov ax, LIST[bx+si] ;ax<-16 bits from DS:(BX+SI+LIST)mov al, LIST[bp+di-10h] ;al<-8 bits from SS:(BP+DI-16+LIST)mov ax, LIST[bx+si+1AFH] ;ax<-16 bits from DS:(BX+SI+431+LIST)

Indexed

BasedIndexed

Page 21: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 21

Instruction Format

opcode d w

mod reg r/m

optional

optional

optional

optional

07

low addr

high addr

Low Displacement or Immediate

High Displacement or Immediate

Low Immediate

High Immediate

opcode 6-bit value that specifies instruction type

d is 1-bit value that specifies destinationd=0 for memory and d=1 for register

w is 1-bit value that specifies if destination is word or bytew=0 for byte and w=1 for word

Page 22: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 22

Instruction Format (Cont.)

opcode d w

mod reg r/m

optional

optional

optional

optional

07

low addr

high addr

Low Displacement or Immediate

High Displacement or Immediate

Low Immediate

High Immediate

mod is 2-bit value that indicates addressing mode(along with r/m value)

reg is 3-bit value that specifies a (destination) register(see table to right) or opcode extension

r/m is 3-bit value that specifies operand location(r/m means register/memory)

reg w=1 w=0

000 ax al

001 cx cl010 dx dl

011 bx bl

100 sp ah

101 bp ch

110 si dh

111 di bh

Page 23: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 23

Instruction Format (Cont.)

opcode d w

mod reg r/m

optional

optional

optional

optional

07

low addr

high addr

Low Displacement or Immediate

High Displacement or Immediate

Low Immediate

High Immediate

Displacement may be either 8 or 16 bits- signed integer encoded into instruction- used in computation of operand address

Immediate may be 8, 16 or 32 bits- signed integer- used as an actual operand

Page 24: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 24

Instruction Format Example

opcode d w

mod reg r/m

optional

optional

optional

optional

07

low addr

high addr

Low Displacement or Immediate

High Displacement or Immediate

Low Immediate

High Immediate

Consider the Instruction: mov ax, bxThe Assembler translates this into: 8B C3

opcode is: 100010 movd is: 1 destination is registerw is: 1 destination size = 1 wordmod is: 11 this indicates that r/m specifies a registerreg is: 000 destination register is axr/m is: 011 source register is bx

Page 25: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 25

Assembler versus Machine Code

ADD AX, BX ;AX gets value AX+BXSUB AX, BX ;AX gets value AX-BXAND AX, BX ;AX gets bitwise AND of AX and BXINC AX ;AX gets its original value plus 1DEC BX ;BX gets its original value minus 1MOV AX, BX ;AX gets values in BX

01 D829 D821 D8404B8B C3

01 D829 D821 D8404B8B C3

01D829D821D8404B8BC3

a19fea19ffa1a00a1a01a1a02a1a03a1a04a1a05a1a06a1a07

93ee:db1e93ee:db1f93ee:db2093ee:db2193ee:db2293ee:db2393ee:db2493ee:db2593ee:db2693ee:db27

logicaladdress

physicalmemory

physicaladdress

ASSEMBLER

LINKER LOADER

Page 26: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 26

I/O Port Addressing• x86 family has 65,536 I/O ports

• Each port has address (like memory)– Referred to as “I/O memory space”

• I/O port is 1 byte or 2 bytes– with 386+ also 4 bytes

• Two addressing modes1) Immediate port address

- Can only be 1 byte- Can only be address ports 00h through ffh

2) Port address present in DX- Can address all ports 0000h through ffffh

• Can only use DX for port addresses

• Can only use AL,AX,EAX for port data

Page 27: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 27

Flag Register

x x x xOF

DF

IFTF

SF

ZF

xAF

xPF

xCF

015

CF Carry Flag Arithmetic Carry/BorrowOF Overflow Flag Arithmetic OverflowZF Zero Flag Zero Result; Equal CompareSF Sign Flag Negative Result; Non-Equal ComparePF Parity Flag Even Number of “1” bitsAF Auxiliary Carry Used with BCD ArithmeticDF Direction FlagAuto-Increment/Decrement

used for “string operations”IF Interrupt Flag Enables Interrupts

allows “fetch-execute” to be interruptedTF Trap Flag Allows Single-Step

for debugging; causes interrupt after each op 

Page 28: University of Tehran 1 Microprocessor System Design Omid Fatemi 80x86 Addressing modes (omid@fatemi.net)

University of Tehran 28

Summary

• Stack data structure

• Operands

• Addressing modes

• IO ports

• Flag