CU TRÚC VI X LÝ 8086/8088
I. CU TRÚC BÊN TRONG CA VI X LÝ 8086/8088 :
1. Sơ đồ khi :
- Vi x lý INTEL 8086 / 8088 là các vi x lý 16 bit.
- Các phép toán x lý bên trong CPU là phép toán thc hin trên s nh phân 8 và 16
bit.
- Tuyến địa ch có 20 đường nên có th qun lý lên đến 1 MB b nh (tm địa ch t
00000h đến FFFFFh).
- Tuyến d liu ca 8086 có 16 bit.
- Tuyến d liu ca 8088 có 8 bit. Đây là mt ci tiến v mt thương mi so vi 8086
để vic giao tiếp vi b nh xut nhp đơn gin hơn, d dàng thiết kế hơn.
B thanh ghi
tng quát
(8 t 16 bit)
B thanh ghi
đon và
con tr lnh
(
5 t 16 bit
)
ALU 16 bit
C
KHI GIAO
TIP BUS INTA, RD, WR
Tuyến d liu
Tuyến địa ch
DT / R, DEN
ALE, M / IO
Đuôi lnh (6 bytes)
KHI ĐIU KHIN & ĐỊNH THÌ
INTR, NMI, TEST
S2, S1, S0
CLK, RESET READY
MN/MX
HOLD
HLDA
LOCK
QS1, QS0
(Bus Interface Unit)
BIU
(Execution Unit)
EU
Biên son : Nguyn Xuân Minh Đại hc Bách khoa tp.HCM
Tr.18
T chc và cu trúc máy tính
CPU INTEL 8086/8088
- Cho phép s dng h thng ngt quãng và cơ chế DMA (Direct Memory Access).
- Sơ đồ khi vi x lý 8086 gm hai phn chính : khi giao tiếp Bus (BIU:Bus interface
unit) và khi thc thi (EU:Execution unit).
- Khi BIU chu trách nhim ly lnh và giao tiếp ra bên ngoài để điu khin b nh
xut nhp.
- Khi EU có nhim v thi hành lnh, định thì, kim tra các tín hiu trng thái, các tín
hiu yêu cu ngt quãng, cơ chế DMA, tín hiu RESET, tín hiu READY.
- Các lnh trong b nh được khi BIU ly vào liên tc và ct trong đuôi lnh (có chiu
dài 6 byte đối vi 8086 hoc 4 byte đối vi 8088). Sau đó khi EU ly lnh t đuôi
lnh ra để gii mã và thi hành.
- Hot động ca hai khi BIU và EU din ra độc lp vi nhau nên quá trình ly lnh và
thi hành lnh được vi x lý thc hin đồng thi theo cơ cu đường ng (pipeline).
Điu này tuy không làm tăng tc độ x lý ca CPU (gii hn bi tn s xung đồng
b) nhưng làm gim bt thi gian thi hành ca c chương trình.
- Hình sau minh ha v s phân phi thi gian cho hai quá trình ly lnh và thi hành
lnh ca CPU bình thường và ca CPU dùng cơ cu đường ng.
- Tuyến địa ch d liu dùng chung AD15 ÷ AD0 cn có tín hiu điu khin ALE để
phân bit lúc nào là địa ch lúc nào là d liu. Ch khi ALE = 1, tín hiu trên tuyến
chung được xem là địa ch. Trường hp còn li xem là tuyến d liu.
- Thường thì phi nh mt mch cài địa ch và mt mch đệm 2 chiu để tách tuyến
chung ra thành hai tuyến phân bit.
L
y lnh
Thi hành lnh
Lnh 1
t
t
L
y lnh
Thi hành lnh
t
t
CPU thường
CPU dùng cơ c
u đường
ng Thi
g
ian
tiết kim được
Đã có l
nh 2
Lnh 2 Lnh 3
Lnh 1 Lnh 2 Lnh 3
Lnh 1 Lnh 2 Lnh 3
Lnh 1 Lnh 2 Lnh 3
Đã có l
nh 3
DT/R
DEN
Cài
Đ
m
2 chiu
AD15 ÷ AD0
A
15
÷
A
0
D15
÷
D0
ALE L
DIR
OE
Đại hc Bách khoa tp.HCM Biên son : Nguyn Xuân Minh
C
PU INTEL 8086/8088
T chc và cu trúc máy tính
Tr.19
2. B thanh ghi :
2.1 B thanh ghi đa dng :
- Gm 8 thanh ghi 16 bit.
- Các thanh ghi AX, BX, CX, DX có th dùng
phân na như các thanh ghi 8 bit AH, AL, BH,
BL, CH, CL, DH, DL.
- Thanh ghi AH là na cao ca thanh ghi AX.
Thanh ghi AL là na thp ca thanh ghi AX.
Chng hn nếu AX= 1234h thì AH=12h và
AL=34h.
- AX là thanh ghi b tích lũy 16 bit (ACC).
- AL là thanh ghi b tích lũy 8 bit.
- BX là thanh ghi nn (base register).
- CX là thanh ghi b đếm (counter).
- DX là thanh ghi d liu (data).
- SI là thanh ghi ch s ngun (source index).
- DI là thanh ghi ch s đích (destination index).
- BP là thanh ghi con tr nn (base pointer).
- SP là thanh ghi con tr chng (stack pointer).
2.2 B thanh đon và con tr lnh :
- Gm 4 thanh ghi đon 16 bit dùng để qun lý b
nh theo phương pháp phân đon.
- CS là thanh ghi đon chương trình (code segment).
- DS là thanh ghi đon d liu (data segment).
- SS là thanh ghi đon chng (stack segment).
- ES là thanh ghi đon m rng (extra segment).
- IP là thanh ghi con tr lnh (instruction pointer).
2.3 Thanh ghi trng thái :
- SF c du (sign flag).
- CF c nh (carry flag).
- ZF là c không (zero flag).
- OF là c tràn (overflow flag).
- AF c trung gian (auxiliary flag) hay còn gi là c nh na (half-carry flag).
AF = 0 khi không có s tràn v dung lượng 4 bit.
AF = 1 khi có s tràn v dung lượng 4 bit.
Ví d : phép toán 00001001 + 00000111 = 00010000 s lp c AF lên 1.
- C AF thường được dùng trong các phép toán BCD (là các s dùng h nh phân 4
bit để biu din s thp phân t 0 ÷ 9).
- PF c kim tra chn l (parity flag).
PF = 1 nếu s bit 1 ca kết qus chn.
PF = 0 nếu s bit 1 ca kết qus l.
Ví d : sau khi thc hin (00000101 AND 00000101) thì PF = 1.
- DF c định hướng (direction flag).
DF = 0 : định hướng gim địa ch cho các lnh x lý chui.
DF = 1 : định hướng tăng địa ch cho các lnh x lý chui.
- IF c ngt quãng (interrupt enable flag).
IF = 0 : cm ngt cng INTR.
IF = 1 : cho phép ngt cng INTR.
CS
DS
SS
ES
IP
OF DF × × × ×IF TF SF ZF
×
AF
×
PF
×
CF
A
H
BH
CH
DH DL
CL
BL
AL
DX
CX
BX
A
X
SI
DI
BP
SP
Biên son : Nguyn Xuân Minh Đại hc Bách khoa tp.HCM
Tr.20
T chc và cu trúc máy tính
CPU INTEL 8086/8088
- TF c by (trap flag). Dùng để chy tng bước khi cn kim tra hot động ca
CPU.
II. QUN LÝ B NH CA VI X LÝ 8086/8088 :
1. Phân đon và phân loi địa ch :
1.1. S phân đon b nh :
- CPU 8086 dùng phương pháp phân đon b nh để qun lý b nh 1MB ca nó.
- Địa ch 20 bit ca b nh 1MB không th cha đủ trong các thanh ghi 16 bit ca
CPU 8086 vì vy b nh 1 MB được chia ra thành các đon (segment) 64KB.
- Địa ch trong các đon 64KB ch có 16 bit nên CPU 8086 d dàng x lý bng các
thanh ghi ca nó.
- Như vy phương pháp phân đon b nh là cách dùng các thanh ghi 16 bit để biu
din cho địa ch 20 bit.
1.2. Địa ch vt lý và địa ch lun lý :
- Địa ch 20 bit được gi là địa ch vt lý. Địa ch vt lý được dùng trong thiết kế
các mch gii mã địa ch cho b nh và xut nhp.
- Ngược li, trong lp trình, địa ch vt lý không th dùng được mà nó được thay thế
bng địa ch lun lý.
- Địa ch lun lý là địa ch gm có hai thành phn : địa ch đon (segment) địa
ch trong đon (offset).
- Mi địa ch thành phn ch có 16 bit và được viết theo cách sau :
SEGMENT:OFFSET
- Segment và offset là các s h 16.
- Cách tính địa ch vt lý t địa ch lun lý như sau :
Hoc theo công thc :
Ví d : tính địa ch vt lý tương ng vi địa ch lun lý B001:1234
địa ch vt lý = B0010h + 1234 = B1244h
- Địa ch segment còn được gi là địa ch nn ca đon. Nó cho biết đim bt đầu
ca đon trong b nh.
- Trong khi đó, địa ch offset th hin khong cách k t đầu đon ca ô nh cn
tham kho. Do offset có 16 bit nên chiu dài ti đa ca mt đon là 64K. Trong
mi đon, ô nh đầu tiên có offset là 0000h và ô nh cui cùng có offset là
FFFFh.
địa ch vt lý = (segment x 16) + offset
segment
offset
0
+
địa ch vtlý
(segment dch trái 4 bit hay nhân 16)
(offset gi nguyên)
(địa ch vt lý 20 bit)
Đại hc Bách khoa tp.HCM Biên son : Nguyn Xuân Minh
C
PU INTEL 8086/8088
T chc và cu trúc máy tính
Tr.21
- Mi ô nh ch có duy nht mt địa ch vt lý nhưng có th có nhiu địa ch lun
lý. Chng hn các địa ch lun lý 1234:1234, 1334:0234, 1304:0534, ... đều có
chung địa ch vt lý 13574h.
- Để hiu rõ ti sao, ta ln lưt xem quan h gia địa ch vt lý vi các thành phn
segment và offset.
- Vi địa ch lun lý 0000:0000 ta có địa ch vt lý là 00000h.
- Bây gi ta gi nguyên phn segment và tăng phn offset lên 1 thành ra địa ch
lun lý 0000:0001. Địa ch vt lý tương ng là 00001h.
- Tương t vi địa ch lun lý 0000:0002 ta có địa ch vt lý 00002h.
- Ta nhn thy khi offset tăng 1 đơn v thì địa ch vt lý tăng 1 địa ch hoc là tăng 1
byte. Như vy ta th xem đơn v ca offset là byte.
- Bây gi ta làm li quá trình trên nhưng không tăng offset na mà tăng phn
segment. Ta có :
địa ch lun lý 0001:0000 tương ng vi địa ch vt lý 00010h.
địa ch lun lý 0002:0000 tương ng vi địa ch vt lý 00020h.
- Ta nhn thy khi segment tăng 1 đơn v thì địa ch vt lý tăng 10h địa ch hoc là
tăng 16 byte. Người ta gi đơn v ca segment là paragraph.
1 paragraph = 16 bytes
- Điu này cũng có th được gii thích là do cách tính địa ch vt lý t địa ch lun
đã nêu trên.
- T các địa ch vt lý tính ra trên, ta thy segment 0000 nm đầu vùng nh
nhưng segment 0001 bt đầu cách đầu vùng nh ch có 16 bytes, segment 0002
bt đầu cách đầu vùng nh 32 bytes . . .
segment
offset
64KB
0000
FFFF
B nh
Ô nhđịa ch
lun lý
se
g
ment:offset
Segment 0000: 00000h
Phn chng chp
ca 3 segment
0000, 0001, 0002.
00010h
00020h
0FFFFh
1000Fh
1001Fh
Segment 0001:
Segment 0002: