1
B thanh ghi trong 8086
Các thanh ghi trong b vi x 8086 u các thanh ghi 16 bit ưc chia thành các
nhóm như sau:
- Các thanh ghi công dng chung
AX (accumulator), BX (base), CX (counter), DX (data): có th ưc truy xut c
lp như 2 thanh ghi 8 bit : AH và AL, BH và BL, CH và CL, DH và DL.
- Các thanh ghi con tr và ch mc (xem chi tit các phn sau)
SP (Stack Pointer), BP (Base Pointer): con tr dùng khi làm vic vi stack
SI (Source Index), DI (Destination Index): ch s mng khi xmng (chui)
- Các thanh ghi phân on
CS (Code Segment), DS (Data Segment), ES (Extra data Segment), SS (Stack
Segment): tương ng lưu a ch phân on lnh, phân on d liu, phân on d liu
b sung, phân on ngn xp. a ch phân on này s ưc kt hp vi a ch offset 
truy xut ô nh. (xem chi tit các phn sau)
- Các thanh ghi con tr lnh và trng thái
IP (Intruction Pointer): thanh ghi cha a ch offset ca lnh k tip cn thc
hin. Thanh ghi này không th ưc truy xut trc tip.
FLAGS: thanh ghi c trng thái, dùng  cha các bit t trng thái ca lnh
v!a ưc thc hin, ho"c cha các bit iu khin cn thit lp trưc khi g#i lnh. Bao g$m
các bit c sau ây: (xem chi tit các phn sau)
CF (Carry Flag): bt khi phép tính v!a thc hin có s dng bit nh
PF (Parrity Flag): bt khi kt qu ca phép tính v!a thc hin có ch%n bit 1
AF (Auxilary Flag): bt khi phép tính v!a thc hin có s dng bit nh ph
ZF (Zero Flag): bt khi kt qu ca phép tính v!a thc hin là 0
SF (Sign Flag): bt khi kt qu ca phép tính v!a thc hin có bit du bt
TF (Trace Flag): bt  chuyn sang ch  chy t!ng bưc
IF (Interrupt Flag): bt  cho phép các ng&t xy ra
DF (Direction Flag): bt  ch#n ch  gim ch s t ng khi làm vic vi mng
OF (Overflow Flag): bt khi phép tính v!a thc hin gây ra tràn s
2
Cu trúc mã lnh – Các kiu nh v d liu
Cu trúc mã lnh (Instruction format) trong 8086
Mt lnh (instruction) b vi x th hiu ưc thư ng rt ơn gin. d như di
chuyn d liu t! mt ô nh vào thanh ghi, cng thanh ghi th hai vào thanh ghi th nht,
Trong 8086 mi lnh thư ng tác ng n 0,1 ho"c 2 i tưng (operand, tm g#i toán hng).
Toán hng có th là mt thanh ghi, mt h'ng s ho"c mt ô nh.
Thông thư ng, mt lnh (instruction) có cu trúc như sau:
Hình 1. Cu trúc mã lnh
Trư ng Prefix dùng  thay i thanh ghi phân on m"c nh ho"c ch nh s l"p li ca
lnh trong thao tác x lí chui.
Trư ng Opcode là mã ca thao tác, cho bit lnh này làm gì.
Bit D (direction) cho bit hưng tác ng ca lnh.
Bit W (width) cho bit kích thưc ca toán hng.
Hai trư ng REGR/M mô t hai toán hng chu tác ng ca lnh.
Trư ng REG cha mã s ca mt thanh ghi.
Trư ng R/M có th s ca mt thanh ghi (trư ng hp toán hng thanh ghi) ho"c
mô t cách tính a ch ca mt ô nh trong b nh (trư ng hp toán hng là ô nh).
Trư ng MOD cho bit trư ng R/M mô t thanh ghi hay ô nh, c(ng như cho bit trư ng
Displacement phía sau hay không.
Trư ng Displacement ưc s dng khi toán hng ô nh. Trư ng này ưc s dng kt
hơp vi các thông tin lưu trong trư ng R/M nh a ch ca toán hng.
Trư ng Immediate ưc s dng khi toán hng là mt h'ng s.
Không phi lnh nào c(ng có  các trư ng ưc miêu t trên.
Chi tit v các trư ng như sau:
D = 1
REG là ích n
D = 0
REG là ngu$n
W = 1
Toán h
ng l
à word
W = 0
Toán hng là byte
REG
W = 1
W = 0
Segment
000
AX
AL
ES
001
CX
CL
CS
010 DX DL SS
011 BX BL DS
100 SP AH
101 BP CH
110
SI
DH
111
DI
BH
Bng 1 Mã trưng REG và các bit D, W
3
MOD
Ý ngha ca R/M và Displacement
00 Nu R/M = 110 thì EA = disp-high _ disp-low
Nu R/M ) 110 thì phn displacement không có.
01 DISP = disp-low, s ưc signed extended
10 DISP = disp-high _ disp-low
11 R/M mô t thanh ghi
Bng 2. Mã trưng MOD
R/M
Cách tính a ch (Effective Address)
000
EA = BX + SI + DISP
001
EA = BX + DI + DIS
P
010
EA = BP + SI + DISP
011 EA = BP + DI + DISP
100 EA = SI + DISP
101 EA = DI + DISP
110 EA = BP + DISP (tr! trư ng hp MOD = 00, xem trên)
111
EA = BX + DISP
Bng 3. Mã trưng R/M
d: Lnh chép ni dung thanh ghi DX vào CX 8BCAh, lnh chép ni dung thanh
ghi CX vào DX có mã 8BD1h.
Hình 2. Mã lnh MOV gia hai thanh ghi
d: Lnh chép ni dung bin var (có a ch DS:1234h) vào thanh ghi CX có
8B0E1234h. (Xem Hình 3). Lnh chép ngưc li mã 890E1234h. Hai này ch khác nhau
bit D. Trư ng hp th nht, D = 1 vì thanh ghi CX ích n. Trư ng hp th hai, D = 0
thanh ghi CX là ngu$n. Trong c hai trư ng hp, a ch (EA) ca ô nh (bin var) ưc ly trc
tip t! 2 bytes ca vùng Displacement (MOD = 00 R/M = 110, xem bng phía trên). Hai
byte disp-high disp-low ca vùng Displacement cha offset ca bin var trong phân on d
liu.
4
Hình 3. Mã lnh MOV gia thanh ghi và b nh
Mt s lnh cu trúc "c bit, d, ghép chung trư ng opcode vi trư ng reg, nh'm
giúp rút ng&n  dài lnh. Ví d: lnh gán AX b'ng 4567h có mã B84567h.
a) Cu trúc chung
b) Ví d: MOV AX, 4567h
Hình 4. Mã lnh MOV gia Accumulator và hng s
Khi toán hng mt thanh ghi phân on, ch cn 2 bit ch nh mt trong bn thanh ghi
phân on. Ngh*a là trư ng REG luôn có dng 0xx. Bit xx ưc nh ngh*a như trong Bng 1. Ví
d, lnh chép ni dung thanh ghi AX vào thanh ghi phân on DS có mã là 8ED8h.
Hình 5. Mã lnh MOV gia thanh ghi thưng và thanh ghi phân on
Khi có ch nh thanh ghi phân on dùng  truy xut b nh khác vi thanh ghi phân on
m"c nh thì trong lnh xut hin thêm Prefix. d: lnh chép ni dung ô nh ES:2345h
vào thanh ghi DS có mã 268E1E2345h, trong ó 26h là prefix.
Hình 6. Mã lnh MOV gia thanh ghi phân on và ô nh, có s dng segment override prefix
5
Stack và ng dng trong vic gi chương trình con, gi ngt
Khái nim stack
Stack mt vùng b nh mà ó, ngoài vic truy xut trc tip các ô nh b'ng a ch,
ngư i ta nh ngh*a thêm hai thao tác PUSH (b o) POP (ly ra). Stack thư ng ưc
dùng làm nơi lưu tr tm th i các giá tr trung gian ho"c dùng trong vic g#i chương trình con.
Nu ch s dng hai thao tác PUSH & POP  truy xut d liu trong stack thì stack ging
như mt cái thùng ng tài liu. Nhng gì b vào sau s n'm trên nhng b vào trưc, do ó
khi ly ra thì bao gi c(ng phi ly cái b vào sau cùng. Ngư i ta g#i cu trúc như vy LIFO
(last in first out).
 ghi li a ch offset nơi b d liu vào sau cùng, ngư i ta dùng thanh ghi SP, còn a ch
segment thì ưc lưu trong thanh ghi SS. Ví d: (Xem Hình 7, Hình 8)
Thao tác PUSH AX bao g$m: gim SP i 2, ưa giá tr ca AX vào ô nha ch SS:SP.
Thao tác POP AX bao g$m: ưa giá tr t! ô nh có a ch SS:SP vào AX, tng SP lên 2.
Như th, stack ưc s dng (còn g#i n ra”) theo chiu gim ca a ch, khác vi các
vùng nh thông thư ng ưc s dng theo chiu tng ca a ch.
Nu không khai báo phân on stack, theo m"c nh, on stack code s chung nhau,
khi chương trình b&t u thc hin, SP ưc khi ng giá tr 0. vy, thao c
PUSH xx ln u tiên s "t giá tr xx ti a ch SS:FFFEh (vì 0 2 = FFFEh), thao c
PUSH yy lin tip theo s "t giá tr yy ti a ch SS:FFFCh. (Xem Hình 9)
Nu có khai báo phân on stack, d: .stack 200h”, on stack s ưc cp phát riêng,
khi chương trình b&t u thc hin, SP ưc khi ng giá tr 200h. vy, thao tác
PUSH xx ln u tiên s "t giá tr xx ti a ch SS:01FEh, thao tác
PUSH yy lin tip theo s "t giá tr yy ti a ch SS:01FCh. (Xem Hình 10)
a) AX có giá tr 3412h, trưc thao tác PUSH AX b) Sau thao tác PUSH AX
Hình 7. Thc hin PUSH AX
a) Trưc thao tác POP AX b) Sau thao tác POP AX, thanh ghi AX có giá tr A020h
Hình 8. Thc hin POP AX