Tải bản đầy đủ (.ppt) (83 trang)

Điện tử viễn thông chuong 2 cau truc va hoat dong cua 8086 khotailieu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (413.38 KB, 83 trang )

Nguyên tắc làm việc
của
Intel 8088/8086
Phạm Thế Duy
()


External BUS

SƠ ĐỒ KHỐI 8088/8086

BUS Interface
BIU
EU

+
6 byte
queue
ES
CS
DS
SS
IP

AH
BH
CH
DH

Execution Unit Control System


AL
BL
CL
DL
SP
BP
SI
DI

ALU

Flags
EU

Hình 2.14: Sơ đồ khối vi xử lý 8086/8088.


Các khối chức năng


Sơ đồ khối của 8088/8086 bao gồm hai khối
chính:




BIU (Bus Interface Unit): Thực hiện tất cả các giao
tiếp với thế giới bên ngoài.
EU (Execution Unit): Giải mã và thực hiện các
lệnh được lấy vào từ bộ nhớ



Khối giao tiếp BUS (BIU)






BU cung cấp các tín hiệu địa chỉ, dữ liệu và điều khiển để truy
cập các bộ nhớ và vào ra. Khối này cũng cho phép giao tiếp với
bộ đồng xử lý hoặc các bộ vi xử lý khác.
Chức năng quan trọng nhất của BU là tự động kích hoạt quá
trình lấy lệnh từ bộ nhớ bằng bộ tiền truy cập lệnh (Prefetch).
BU còn có chức năng cho phép quá trình lấy lệnh từ bộ nhớ
thực hiện song song với các quá trình khác nhớ hàng đợi lệnh
6 byte (Queue).
BIU tạo ra địa chỉ vật lý cung cấp ra bên ngoài, bằng quá trình
tính toán từ các địa chỉ logic quản lý trong chương trình. Các
địa chỉ mà BIU tạo ra cung cấp tới các bộ cài (Address Latch)
và sẽ được định thời cung cấp ra bên ngoài tại các thời điểm
thích hợp. Dữ liệu truyền với CPU sẽ được chuyển qua các
cổng đệm hai chiều (Data Transceivers).


Khối giải mã lệnh (IU)







Lệnh được BU lấy vào hàng đợi, trong khi IU lấy
lệnh đã lấy trước đó giải mã và chuyển tới hàng
đợi lệnh đã giải mã (Decoded Istruction queue) để
EU thực hiện.
Với chức năng giải mã lệnh, các lệnh ngoài bộ nhớ
có thể mã hoá ngắn nhất có thể, IU sẽ tạo ra các
tín hiệu điều khiển cần thiết từ các mã lệnh này.
Bằng cách sử dụng hộ giải mã lệnh, dung lượng
nhớ của hệ thống sẽ yều cầu ít hơn, thời gian lấy
lệnh sẽ được giảm ngắn.


Khối thực hiện lệnh (EU)






Trước hết EU giải mã các lệnh từ hàng đợi lệnh bằng khối control
system, sau đó khối này cung cấp các tín hiệu cần thiết điều khiển
các khối khác trong CPU để thực hiện lệnh. Với các lệnh cần giao
tiếp với bên ngoài nó sẽ thực hiện thông qua BIU.
Các khối chức năng của EU bao gồm:
- Bộ điều khiển (Control System) thực hiện việc điều khiển việc
thực hiện các lệnh.
- ALU là khối thực hiện các phép toán số học logic, cấu trúc của
ALU thông thường có hai ngõ vào nhận hai toán hạng và một ngõ

ra cung cấp kết quả.
Các thanh ghi sử dụng làm nơi lưu trữ dữ liệu sử dụng trong các
phép tính và các giá trị địa chỉ cho phép EU lấy các toán hạng từ
bên ngoài.


Các thanh ghi của 8088/8086
Các thanh ghi đa năng: AX, BX,
CX, DX, DI, SI, BP, SP.
 Các thanh ghi đoạn: CS, DS, ES,
SS.
 Thanh ghi cờ (Flags).
 Các thanh ghi đặc biệt: IP, MSW.



Các thanh ghi đa năng (16 bit)




Đều có thể sử dụng chứa dữ liệu 16 bit.
AX, BX, CX và DX có thể chia thanh hai phần 8 bit.


Các thanh ghi đa năng









AX (Accumulator) thanh chứa cho lệnh nhân và chia.
MUL BL
; AX = AL * BL
BX (Base): Sử dụng làm thanh ghi địa chỉ cơ sở.
MOV AL,[BX] ;chép nội dung ô nhớ BX giữ địa chỉ.
MOV AH,[BX+03] ;chép nội dung ô nhớ có địa chỉ [BX+3] vào AH.
MOV CH,[BX+DI+9]
CX (Counter): Sử dụng làm bộ đếm số vòng lặp.
LOOP N ;trừ CX đi 1, lặp lại nhãn N khi CX ≠0.
DX (Data): Làm thanh ghi chứa dữ liệu trong các lệnh nhân chia
16 bit. Làm thanh ghi giữ địa chỉ cổng vào ra.
MUL BX
; DX AX = AX*BX
OUT DX,BL ; chuyển BL ra cổng có địa chỉ DX


Các thanh ghi đa năng (tiếp)






DI (Destination Index): thanh ghi chỉ số đích – giữ địa chỉ đích dữ
liệu trong các lệnh về chuỗi. Làm thanh ghi địa chỉ.
MOV AH,[DI]

MOV BH,[DI+7]
MOVSB
SI (Source Index): thanh ghi chỉ số nguồn – giữ địa chỉ nguồn dữ
liệu trong các lệnh về chuỗi. Làm thanh ghi địa chỉ.
MOV AH,[SI]
MOV BH,[SI+7]
MOVSW
BP (base pointer): thanh ghi con trỏ cơ sở – Làm thanh ghi địa chỉ.
MOV AL,[BP]
MOV AH,[BP+03]
MOV CH,[BP+DI+9]


Ngăn xếp


Ngăn xếp là một vùng nhớ sử dụng cho việc chứa
các giá trị tạm thời.



Ngăn xếp trong chế độ địa chỉ thực được truy xuất
bằng cặp thanh ghi SS:SP segment/offset
(StackSegment: StackPointer)



Một số lệnh tác động tới vùng nhớ ngăn xếp như:
push, pop, call, ret, và nhiều lệnh khác nữa.




Ngăn xếp là nơi tốt nhất để lưu trữ các giá trị tạm
thời vào bộ nhớ.


Chứa dữ liệu vào ngăn xếp
Từ ‘stack-ngăn xếp’ được sử dụng là do cách lưu trữ và lấy lại
dữ liệu trong vùng nhớ ngăn xếp cũng giống như việc sử dụng
một ngăn xếp trong thực tế.
Có thể thực hiện ngăn xếp bằng các hộp. Để tạo thành ngăn xếp
trước hết đặt hộp A, sau đó tới B và cuối cùng là C.

A

B
A

C
B
A

Chú ý rằng chúng ta chỉ có thể lấy được hộp xếp vào ngăn xếp
cuối cùng (Đỉnh ngăn xếp - Top of Stack – TOS). Như vậy
trình tự phục hồi lại dữ liệu theo trình tự ngược lại khi xếp vào
ngăn xếp (C tới B và cuối cùng là A).


Chứa dữ liệu vào ngăn xếp
bằng lệnh PUSH



Thanh ghi con trỏ ngăn xếp SP (Stack Pointer) được sử
dụng để truy cập ngăn xếp. SP luôn trỏ tới giá trị cuối
cùng được cất vào ngăn xếp.



Lệnh PUSH chứa dữ liệu vào đỉnh ngăn xếp.
PUSH AX

; SP= SP-1, M[SP]  AX



Lệnh “push AX” tương ứng với:
SUB SP, 1
; giảm SP đi 1
MOV [SP], AX ; ghi giá trị của AX vào đỉnh ngăn xếp



Các lệnh truy cập ngăn xếp có thể thực hiện với 16
hoặc 32 bit.


Quan sát hoạt động lệnh
PUSH
Trước
lệnh PUSH AX

Sau lệnh PUSH AX
Địa chỉ cao
lastvalu
e
????
????
????
????
????
????
????
????
Địa chỉ thấp

 SP
Mỗi ô nhớ 16
bit, ngăn xếp
được truy cập 16
hoặc 32 bit.

Địa chỉ cao
lastval
ue
ahal
 SP
???? (SP mới =
SP cũ -1)
????
????
????

????
????
????
Địa chỉ thấp


Nhiều lệnh PUSH liên tiếp
Trước
Địa chỉ cao
lastval
ue
????
????
????
????
????
????
????
????
Địa chỉ thấp

Sau các lệnh PUSH
Địa chỉ cao

 SP
PUSH AX
PUSH BX
PUSH CX

lastval

ue
ax
bx
cx
????
????
????
????
????
Địa chỉ thấp

 SP


Đọc dữ liệu trong ngăn xếp bằng lệnh POP
Lệnh POP phục hồi một giá trị từ ngăn xếp:
POP AX

; AX  M[SP] , SP= SP+1

Lệnh “pop AX” tương đương với các lệnh:
mov AX, [SP]
add sp, 1

; đọc giá trị từ đỉnh ngăn xếp
; tăng SP lên 1.


Hoạt động của lệnh POP
Trước POP AX

Địa chỉ cao
FF65
23AB  SP
Mỗi ô nhớ 16
????
bit, ngăn xếp
????
truy cập 16 bit
????
hoặc 32 bits.
????
????
????
????
Địa chỉ thấp

Sau POP AX
Địa chỉ cao

FF65  SP
23AB
???? AX = 23AB
????
????
????
????
????
????
Địa chỉ thấp



Hoạt động nhiều lệnh POP liên
Trước
Sau các lệnh POP
tiếp

Địa chỉ cao
FF65
23AB
357F
D21B
38AC
23F4
????
????
????
Địa chỉ thấp

Địa chỉ cao

pop AX
pop BX
pop CX
 SP

FF65
23AB  SP
357F
D21B AX = 38AC
38AC BX = D21B

CX = 357F
23F4
????
????
????
Địa chỉ thấp








Ngăn xếp Overflow,
Underflow
Nếu liên tục cất dữ liệu vào ngăn xếp mà không lấy dữ liệu ra thì
ngăn xếp cuối cùng sẽ lớn hơn khoảng dung lượng dành cho nó.
 Có thể dữ liệu ngăn xếp sẽ ghi tràn qua vùng nhớ chứa
mã lệnh hoặc vùng nhớ chứa dữ liệu khác (không phải
ngăn xếp).
 Việc này gọi là tràn trên ngăn xếp (OVERFLOW).
Nếu lấy dữ liệu ra khỏi ngăn xếp nhiều hơn các giá trị đã cất vào
ngăn xếp, con trỏ ngăn xếp có thể tăng lớn hơn giá trị điểm khởi
động ngăn xếp. Điều này được gọi là tràn dưới (UNDERFLOW).
Để ngăn xếp được sử dụng tốt cần phải lấy dữ liệu ra khỏi ngăn
xếp bằng đúng số dữ liệu đã cất vào ngăn xếp.


Tổng kết về ngăn xếp



Là nơi chứa dữ liệu tạm thời.



Đoạn và con trỏ ngăn xếp SS:SP



Push và Pop (LIFO-Last In Fist Out)



SP : Giữ địa chỉ đỉnh ngăn xếp



Sau lệnh PUSH con trỏ SP sẽ giảm.


Các thanh ghi đoạn
(16 BIT)
CS: Code Segment – Đoạn mã lệnh.
 DS: Data Segment – Đoạn dữ liệu.
 SS: Stack Segment – Đoạn ngăn xếp.
 ES:Extra Segment – Đoạn mở rộng.


Chế độ địa chỉ thực:

Physical address = Segment * 10H +offset


Phân đoạn bộ nhơ
FFFFFh

• Địa chỉ OFFSET và địa chỉ đoạn (Logical,

Code
Segment

Segmented):
0FE6:012Bh

Segment
Registers
CS

Extra
Segment

• Địa chỉ độ dời, chỉ số (offset, index):

Stack
Segment

• Địa chỉ vật lý:

012Bh


ES
SS
DS

0FE60h  65120
+ 012Bh 
299
0FF8Bh  65149

Data
Segment

00000h

System
Memory


Thanh ghi cờ
D15

*














D0

NT

IO

PL

O

D

I

T

S

Z

*

A

*


Cờ nhớ CF (Carry Flag).
CF=1 khi cộng tràn, trừ mượn.
Cờ chẵn lẻ PF (Parity Flag).
PF = 1 khi số bit 1 là một số chẵn.
Cờ dấu SF ( Sign Flag).
SF =1 khi kết quả có bit cao nhất là 1
Cờ tràn OF (Overflow Flag) .
OF = 1 khi tràn bit 1 từ MSB-1 qua MSB.
Cờ ZERO ZF (Zero Flag).
ZF = 1 khi kết quả bằng 0.
Cờ nhớ phụ AF (Auxiliary Carry Flag ).
AF=1 khi tràn bit 1 từ D3 qua D4.

P

*

C


Các cờ điều khiển trong thanh
ghi
cờ.
Cờ định hướng DF (Direction Flag).












Xác định hướng địa chỉ của các lệnh xử lý chuỗi.
Cờ ngắt IF : (Interrupt Flag).
IF=1 cho phép ngắt.
Cờ bẫy TF: (Trap Flag).
Sử dụng chạy từng bước để sửa sai chương trình.
Cờ nhiệm vụ lồng nhau NT (Nested Tast).
Cho phép tiến triển hoặc chuyển nhiệm vụ.
Cờ chỉ thị mức đặc quyền vào ra (IOPL).
Chỉ thị mức đặc quyền của nhiệm vụ đang thực hiện.


Các thanh ghi đặc biệt.


Thanh ghi con trỏ lệnh: (IP - Instruction Pointer).






Giữ địa chỉ độ dời của vùng nhớ chứa mã lệnh.
Tự động tăng lên 1 khi đọc xong một ô nhớ lệnh.
Khi điều khiển chương trình IP được thay đổi giá trị mới, (các lệnh

CALL giá trị hiện hành sẽ được cất vào đỉnh ngăn xếp trước khi nạp
giá trị mới. Lệnh RET phục hồi giá trị của IP).

Thanh ghi trạng thái máy: (MSW – Machine Status Word)
D15

D0

TS









EM

MP

PE

TS (Task Set): là bit chuyển nhiệm vụ. TS=1 1 xảy ra việc chuyển
nhiệm vụ.
EM (Emulate Processor Extention): Cho phép mô phỏng bộ đồng xử
lý toán học.
MP (Monitor Coprocesor Extention): Cho biết hệ thống có bộ đồng
xử lý toán học đang làm việc.

PE (Protect Mode Enable): Cho phép chế độ bảo vệ, khi bit này
được lập 80286 chuyển qua hoạc động ở chế độ bảo vệ. Khi đã thiết
lập, chỉ khi RESET bit này mới được xoá.


×