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

Nguyên tắc làm việc của Intel 80x86

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 (540.93 KB, 81 trang )

Nguyên tă c la m viêc cuá ̀ ̣ ̉
Intel 80x86
Phạm Thế Duy
()
Sơ đồ khối

EXECUTION UNIT (EU)
ADDRESS UNIT (AU)
INSTRUCTION UNIT (IU)
INSTRUCTION
DECODER
3 DECODER
INSTRUCTION
QUEUE
ADDRESS
LATCH AND DRIVER
PREFETCH
PROCESSOR
EXTENTION
INTERFACE
BUS CONTROL
DATA
TRANSCEIVERS
6 BYTE
PREFETCH
QUEUE



BUS
UNIT (BU)


PHYSICAL
ADDRESS
ADDER
SEGMENT
BASE
SEGMENT
SIZE
SEGMENT
LIMIT
CHECK
OFFSET
ADDER
REGISTER
LIMIT
CHECK
CONTROL
ALU
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ẽ.
Ca c thanh ghi đa nănǵ

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
Ca 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ê ṕ

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 va o ngăn xê ṕ ̃ ̀ ́ư ư ̣
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 A
B
A
B
C
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 va o ngăn xê p bă ng ́ ̃ ̀ ́ ̀ư ư ̣
lênh PUSḤ

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 sa t hoat đông lênh PUSH́ ̣ ̣ ̣
????

????
????
????
????
????
????
????
Last value
Địa chỉ thấp
Địa chỉ cao
← SP
Trước lệnh PUSH AX
????
????
????
????
????
????
????
ahal
Last value
Địa chỉ thấp
Địa chỉ cao
← SP
(SP mới = SP cũ -1)
Sau lệnh PUSH AX
Mỗi ô nhớ 16 bit,
ngăn xếp được
truy cập 16 hoặc
32 bit.

Nhiê u lênh PUSH liên tiê p̀ ̣́
????
????
????
????
????
????
????
????
Last value
Địa chỉ thấp
Địa chỉ cao
← SP
Trước lệnh PUSH
????
????
????
????
????
cx
bx
ax
Last value
Địa chỉ thấp
← SP
Sau các lệnh PUSH
PUSH AX
PUSH BX
PUSH CX
Địa chỉ cao

Đoc 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] ; đọc giá trị từ đỉnh ngăn xếp
add sp, 1 ; tăng SP lên 1.
Hoat đông cua lênh POP̣ ̣ ̉ ̣
????
????
????
????
????
????
????
23AB
FF65
Địa chỉ thấp
Địa chỉ cao
← SP
Trước POP AX
FF65
23AB
????
????
????
????
????
????
????

Địa chỉ thấp
Địa chỉ cao
← SP
AX = 23AB
Sau POP AX
Mỗi ô nhớ 16 bit,
ngăn xếp truy
cập 16 bit hoặc
32 bits.
Hoat đông nhiê u lênh POP liên tiê p̀ ̣́ ̣ ̣
FF65
23AB
357F
D21B
38AC
23F4
????
????
????
Địa chỉ thấp
Địa chỉ cao
← SP
Trước
FF65
23AB
357F
D21B
38AC
23F4
????

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

AX = 38AC
BX = D21B
CX = 357F
Sau các lệnh POP
pop AX
pop BX
pop CX
← SP
Ngăn xê p Overflow, Underfloẃ

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ê ṕ ̀ ́̉

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.
Ca c thanh ghi đoań ̣

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 đoan bô nh ̣́ ̣ ơ
CS
ES
SS
DS
Data

Segment
Stack
Segment
Extra
Segment
Code
Segment
Segment
Registers

ia chi logic va đia chi đoan (̀Đ ̣ ̉ ̣ ̉ ̣ Logical,
Segmented):
0FE6:012Bh

ia chi đô d i, chi sô (offset, index):̀ ́Đ ̣ ̉ ̣ ơ ̉
012Bh

ia chi vât ly :́Đ ̣ ̉ ̣
0FE60h → 65120
+012Bh → 299
0FF8Bh → 65419
System
Memory
00000h
FFFFFh
Thanh ghi c ̀ơ
** PA*ZSTI CDOPL* IONT
D15 D0

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.
Ca 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)

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á.
MPTS EM PE

D15 D0

×