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

Điện tử viễn thông chuong 2 cau truc va hoat dong cua 80x86 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 (549.9 KB, 81 trang )

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


Sơ đồ khối
ADDRESS UNIT (AU)

ADDRESS
LATCH AND DRIVER
PHYSICAL
ADDRESS
ADDER

OFFSET
ADDER
SEGMENT
BASE

PREFETCH

PROCESSOR
EXTENTION
INTERFACE

BUS CONTROL

SEGMENT SEGMENT
LIMIT


SIZE
CHECK

DATA
TRANSCEIVERS
6 BYTE
PREFETCH
QUEUE
BUS
UNIT (BU)

ALU
REGISTER
CONTROL
LIMIT
CHECK
EXECUTION UNIT (EU)

3 DECODER
INSTRUCTION
QUEUE

INSTRUCTION
DECODER
INSTRUCTION UNIT (IU)


Khối tạo địa chỉ (AU)





AU đảm bảo việc quản lý, bảo vệ bộ nhớ, tuỳ
theo chế độ địa chỉ các chương trình sẽ sử dụng
các loại địa chỉ logic khác nhau, AU có nhiệm
vụ chuyển các địa chỉ logic quản lý trong
chương trình phần mềm thành địa chỉ vật lý,
cung cấp tới BU để giao tiếp với bên ngoài.
Địa chỉ vật lý là địa chỉ cung cấp trực tiếp
cho bộ nhớ và vào ra, còn địa chỉ logic là các
giá trị được chương trình quản lý sử dụng để
tạo ra địa chỉ vật lý, đó chính là các địa chỉ
đoạn (segment) và địa chỉ độ dời (offset).


Khối giao tiếp BUS (BU)






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 (Prefetch queue).
Các địa chỉ mà AU 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 Instruction 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 bộ 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)






EU thực hiện các lệnh xử lý dữ liệu mà IU đã giải
mã, nó giao tiếp dữ liệu với bên ngoài thông qua
BU.
Các khối chức năng của EU bao gồm:
- Bộ điều khiển (Control) thực hiện việc điều
khiển việc thực hiện các lệnh trong EU.
- 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 80286
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 (16bit)




Có thể sử dụng chứa dữ liệu 16 bit.
Có thể chia thanh hai phần 8 bit truy
cập riêng rẽ.


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, chuyển tớ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]
;chuyển nội dung ô nhớ có địa chỉ chứa trong DI vào AH.
MOV BH,[DI+7] ;Chuyển nội dung ô nhớ [DI+7] vào thanh ghi BH
MOVSB
; Chuyển nội dung [SI] vào địa chỉ [DI]

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ỉ thấp
????
????
????
????
????
????
????
????
Last value
Địa chỉ cao

Địa chỉ thấp

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

← SP

????

????
????
????
????
????
????
ahal
Last value
Địa chỉ cao

← SP

(SP mới = SP cũ -1)


Nhiều lệnh PUSH liên tiếp
Trước lệnh PUSH

Địa chỉ thấp
????
????
????
????
????
????
????
????
Last value
Địa chỉ cao


Sau các lệnh PUSH
Địa chỉ thấp

PUSH AX
PUSH BX
PUSH CX

← SP

????
????
????
????
????
cx
bx
ax
Last value
Địa chỉ cao

← 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

Sau POP AX

Địa chỉ thấp

????
????
????
????
????
????
????
23AB
FF65
Địa chỉ cao

Địa chỉ thấp

Mỗi ô nhớ 16
bit, ngăn xếp

truy cập 16 bit
hoặc 32 bits.

← SP

????
????
????
????
????
????
????
23AB
FF65 ← SP
AX = 23AB
Địa chỉ cao


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

Địa chỉ thấp
????
????
????
23F4
38AC ← SP
D21B

357F
23AB
FF65
Địa chỉ cao

Địa chỉ cao

pop AX
pop BX
pop CX

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

AX = 38AC
BX = D21B
CX = 357F
← SP









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 First

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
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ỉ logic 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 → 65419

Data
Segment

00000h

System
Memory


Thanh ghi cờ
D15

*














D0

NT

IO

PL

O

D

I

T

S

Z

*


A

*

P

*

C

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.


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á.


×