Direct Addressing
Module M18.1
Sections 12.1-12.2
Introduction to Computer Engineering by Richard E. Haskell
8086 Postbyte
mod
PBOC
r/m
mod
reg
r/m
Introduction to Computer Engineering by Richard E. Haskell
Table 12.1
Postbyte mod,r/m Fields
r/m
000
001
010
011
100
101
110
111
mod = 11
byte
word
AL
AX
CL
CX
DL
DX
BL
BX
AH
SP
CH
BP
DH
SI
BH
DI
mod = 00
mod = 01
mod = 10
BX + SI
BX + DI
BP + SI
BP + DI
SI
DI
Direct
BX
BX + SI + disp8
BX + DI + disp8
BP + SI + disp8
BP + DI + disp8
SI + disp8
DI + disp8
BP + disp8
BX + disp8
BX + SI + disp16
BX + DI + disp16
BP + SI + disp16
BP + DI + disp16
SI + disp16
DI + disp16
BP + disp16
BX + disp16
Introduction to Computer Engineering by Richard E. Haskell
Table 12.2
Postbyte reg Field
reg
000
001
010
011
100
101
110
111
byte (b)
AL
CL
DL
BL
AH
CH
DH
BH
word (w)
AX
CX
DX
BX
SP
BP
SI
DI
mod
PBOC
r/m
mod
reg
r/m
Introduction to Computer Engineering by Richard E. Haskell
Table 12.3
8086 Operand Addressing Modes
Addressing Mode
Direct
Register Indirect
Indexed
Based
Based Stack
Based + Indexed
Based + Indexed
Stack
r/m
110
100
101
111
100
101
111
110
000
001
010
011
mod = 00
Direct
SI
DI
BX
BX + SI
BX + DI
BP + SI
BP + DI
mod = 01
mod = 10
SI + disp8
DI + disp8
BX + disp8
BP + disp8
BX + SI + disp8
BX + DI + disp8
BP + SI + disp8
BP + DI + disp8
SI + disp16
DI + disp16
BX + disp16
BP + disp16
BX + SI + disp16
BX + DI + disp16
BP + SI + disp16
BP + DI + disp16
Introduction to Computer Engineering by Richard E. Haskell
Direct Addressing
Listing 12.1
joe.lst
title Direct addressing example
0000
0000
stack segment para stack
db
64 dup(?)
40 [
??
]
0040
stack ends
0000
0000
0001
data
joe
data
segment public
db
?
ends
0000
code
0000
0000
0003
0005
000A
000E
0010
0012
main
segment public
assume cs:code,ds:data
proc
far
mov
ax,data
;set ds
mov
ds,ax
mov
joe,0fdh
;joe = fd
inc
joe
;joe = joe + 1
js
m2
;repeat until joe=0
je
m1
;do again
endp
0012
??
B8
8E
C6
FE
78
74
---- R
D8
06 0000 R FD
06 0000 R
FA
F3
m1:
m2:
main
code
ends
end
main
Introduction to Computer Engineering by Richard E. Haskell
0
Table A2.a
Opcode Map
1
2
3
4
6
7
ADD w
AX,imm
PUSH
ES
POP
ES
ADC b
ADC b
ADC w
ADC w
ADC b
r/m,reg r/m,reg reg,r/m reg,r/m AL,imm
ADC w
AX,imm
PUSH
SS
POP
SS
2
AND b
AND w
AND b
AND w
r/m,reg r/m,reg reg,r/m reg,r/m
AND b
AL,imm
AND w
AX,imm
SEGMENT
ES
DAA
3
XOR b
XOR w
XOR b
XOR w
r/m,reg r/m,reg reg,r/m reg,r/m
XOR b
AL,imm
XOR w
AX,imm
SEGMENT
SS
AAA
0
ADD b
ADD w
ADD b
ADD w
ADD b
r/m,reg r/m,reg reg,r/m reg,r/m AL,imm
1
4
INC
AX
INC
CX
INC
DX
INC
BX
5
PUSH
AX
PUSH
CX
PUSH
DX
PUSH
BX
5
INC
SP
INC
BP
INC
SI
INC
DI
PUSH
SP
PUSH
BP
PUSH
SI
PUSH
DI
6
7
JO
JNO
8
*
*
JB/JNAE JNB/JAE
JC
JNC
*
*
JE/JZ
JNE/JNZ JBE/JNA JNBE/JA
TEST b TEST w
XCHG b XCHG w
r/m,reg r/m,reg r/m,reg r/m,reg
NOP
XCHG
CX,AX
XCHG
DX,AX
XCHG
BX,AX
XCHG
SP,AX
XCHG
BP,AX
XCHG
SI,AX
XCHG
DI,AX
A
MOV b
AL,mem
MOV w
AX,mem
MOV b
mem,AL
MOV w
mem,AX
MOVS b
MOVS w
CMPS b
CMPS w
B
MOV
AL,imm
MOV
CL,imm
MOV
DL,imm
MOV
BL,imm
MOV
AH,imm
MOV
CH,imm
MOV
DH,imm
RET
intra+
RET
intra
LES
LDS
MOV b
MOV w
reg.r/m reg.r/m r/m,imm r/m,imm
*
*
*
LOOPZ/
LOOPE
LOOP
JCXZ
9
C
D
*
E
LOOPNZ/
LOOPNE
F
LOCK
REP/REPNE REPE/
REPNZ
REPZ
AAM
MOV
BH,imm
XLAT
AAD
OUT b
OUT w
IN b
IN w
AL,port AX,port port,AL port,AX
HLT
CMC
*
Introduction to Computer Engineering by Richard E. Haskell
*
C6
MOV b
r/m,imm
Table 12.1
Postbyte mod,r/m Fields
r/m
000
001
010
011
100
101
110
111
mod = 11
byte
word
AL
AX
CL
CX
DL
DX
BL
BX
AH
SP
CH
BP
DH
SI
BH
DI
MOV
mod = 00
mod = 01
mod = 10
BX + SI
BX + DI
BP + SI
BP + DI
SI
DI
Direct
BX
BX + SI + disp8
BX + DI + disp8
BP + SI + disp8
BP + DI + disp8
SI + disp8
DI + disp8
BP + disp8
BX + disp8
BX + SI + disp16
BX + DI + disp16
BP + SI + disp16
BP + DI + disp16
SI + disp16
DI + disp16
BP + disp16
BX + disp16
JOE,0FDH
r/m
mod
0
0
0 0 0
1
1 0
Direct Addressing
C6 06 00 00 FD
primary opcode
8-bit immediate data
postbyte
offset
address 0000H
Introduction to Computer Engineering by Richard
E. Haskell
data
joe
jane
mary
jim
data
segment public
db
12h
dw
3456h
db
78h
dw
9abch
ends
0000
0001
0002
0003
0004
0005
12
34
56
78
9a
bc
joe
jane
mary
jim
mov ax,joe Error: operand types must match
mov ax,word ptr joe
will move 1234 into ax
mov bl,jane Error: operand types must match
mov bl,byte ptr jane
will move 34 into bl
mov jane,mary
Error: operand types must match
mov byte ptr jane,mary
will move
78 tointo
offset
address
0001
Introduction
Computer
Engineering
by Richard
E. Haskell
Scarica

M18.1