Đề tài: tìm hiểu về CPU8086 Bộ vi xử lý 8086 đã mang lại sự bùng nổ công nghệ với sự có mặt trong hầu hết các máy tính ở thời kỳ này. Sau đây chúng ta sẽ cùng đi tìm hiểu rõ hơn về thành phần, cấu tạo và chức năng của CPU 8086. Sơ đồ chân, chức năng các chân tín hiệu của 8086
Trang 1Bộ Môn Kiến Trúc Máy Tính
Đề tài: tìm hiểu về CPU-8086
Bộ vi xử lý 8086 đã mang lại sự bùng nổ công nghệ với sự có mặt trong
hầu hết các máy tính ở thời kỳ này Sau đây chúng ta sẽ cùng đi tìm hiểu rõ hơn về thành phần, cấu tạo và chức năng của CPU 8086
I Sơ đồ chân, chức năng các chân tín hiệu của 8086
1, Sơ đồ chân và chức năng các chân của 8086 như sau:
Hình 1.1 Sơ đồ chân của 8086
8086 có thể hoạt động ở 2 chế độ (2 mode): MAX hoặc MIN.
- Mode MIN: CPU tự phát ra các tín hiệu điều khiển cho các bus
- Mode MAX: CPU chỉ phát ra các tín hiệu trạng thái tới một chip gọi là bộ điều khiển bus (bus controller), tiếp đó các chip này sẽ dịch các tín hiệu trạng
thái và phát ra các tín hiệu điều khiển tới các bus Mode này đảm bảo ít trục trặc hơn trong quá trình đọc dữ liệu
+ AD0 AD7 {I/O - tín hiệu vào/ra}: Các chân dồn kênh cho các tín hiệu (Bit) phần thấp của Bus địa chỉ và Bus dữ liệu Xung ALE sẽ báo cho
Trang 2mạch ngoài biết khi nào trên các đường đó có tín hiệu dữ liệu (ALE = 0) hoặc tín hiệu địa chỉ (ALE = 1) Các chân này ở trạng trở kháng cao khi CPU chấp nhận treo
+ AD8 AD15 {I/O - tín hiệu vào/ra}: Các Bit phần cao của Bus địa chỉ và Bus dữ liệu Xung ALE sẽ báo cho mạch ngoài biết khi nào trên các đường đó có tín hiệu dữ liệu (ALE = 0) hoặc tín hiệu địa chỉ (ALE = 1) Các chân này ở trạng trở kháng cao khi CPU chấp nhận treo
+ A16/S3 A19/S6 {O - tín hiệu ra}: Các chân dồn kênh của địa chỉ phần cao và trạng thái
Các trạng thái như sau:
S4 S3 Thanh ghi được truy
xuất
S5: chỉ thị trạng thái cờ ngắt (S5 = 1, cho phép ngắt) S6: luôn = 0
Xung ALE = 1: tín hiệu địa chỉ tại các chân đó
Xung ALE = 0: tín hiệu trạng thái S3-S6 có tại các chân đó
Các chân này ở trạng thái trở kháng cao khi CPU chấp nhận treo
+ RD {O - tín hiệu ra}: Xung cho phép đọc Khi RD = 0 thì Bus dữ liệu sẵn sàng nhận số liệu từ bộ nhớ hoặc thiết bị ngoại vi
Chân RD ở trạng thái trở kháng cao khi CPU chấp nhận treo
+ READY {I - tín hiệu vào}: Tín hiệu báo cho CPU biết tình trạng sẵn sàng của thiết bị ngoại vi hay bộ nhớ
- READY = 1: CPU thực hiện ghi/đọc mà không cần chèn thêm chu kỳ đợi
Trang 3- READY = 0: CPU tự kéo dài thời gian thực hiện lệnh ghi/đọc bằng cách chèn thêm các chu kỳ đợi vì thiết bị ngoại vi hay bộ nhớ có tốc
độ chậm nên chúng đưa tín hiệu READY = 0 để CPU biết mà chờ + INTR {I}: Tín hiệu yêu cầu ngắt che được Khi có yêu cầu ngắt mà cờ cho phép ngắt IF = 1 thì CPU kết thúc lệnh đang làm dở, sau đó nó đi vào chu
kỳ chấp nhận ngắt và đưa ra bên ngoài tín hiệu INTA = 0
+ TEST {I}: Tín hiệu tại chân này được kiểm tra bởi lệnh WAIT
- TEST = 1, CPU nó sẽ chờ cho đến khi tín hiệu TEST = 0
- TEST = 0, CPU tiếp tiếp tục thực hiện chương trình
+ NMI {I}: Tín hiệu yêu cầu ngắt không che được Tín hiệu này không bị khống chế bởi cờ IF và nó sẽ được CPU nhận biết bằng tác động của sườn lên của xung yêu cầu ngắt (thay đổi từ 0–>1) Nhận được yêu cầu này CPU kết thúc lệnh đang làm dở, sau đó nó chuyển sang thực hiện chương trình phục vụ ngắt kiểu INT 2H Ví dụ sai số chẵn lẻ của bộ nhớ (memory parity error) sẽ phát tới CPU một tín hiệu NMI
+ RESET {I}: Tín hiệu khởi động lại 8086 Khi RESET = 1, kéo dài ít nhất trong thời gian 4 nhịp đồng hồ thì 8086 buộc phải khởi động lại Nó xóa các thanh ghi DS, ES, SS, IP và FR về 0, rồi bắt đầu thực hiện chương trình tại địa chỉ :
CS : IP = F000:0000 (địa chỉ vật lý = F0000h)
(Lúc này cờ IF 0 để cấm các yêu cầu ngắt khác tác động vào CPU
và cờ TF 0 để CPU không bị đặt trong chế độ chạy từng lệnh) + CLK {I}: Tín hiệu đồng hồ (xung nhịp) Xung nhịp có độ rỗng là 77% và cung cấp nhịp làm việc cho CPU Xung này được gửi từ chân CLK của mạch tạo xung nhịp 8284 đến CPU
+ Vcc {I}: Chân nguồn Tại đây CPU được cung cấp điện áp +(5V10%), dòng điện 340 mA
+ GND {O}: 2 chân nguồn để nối với điểm 0 của nguồn nuôi
+ MN/MX {I}: Chân điều khiển hoạt động của CPU theo chế độ MIN/MAX
* Do CPU có thể làm việc ở 2 chế độ khác nhau, nên có một số chân tín hiệu phụ thuộc vào các chế độ đó:
# Chế độ MIN:
Trang 4Chân MN/MX cần được nối thẳng với +5V mà không qua điện trở Trong chế độ này, tất cảc các tín hiệu điều khiển liên quan đến thiết bị ngoại vi truyền thống và bộ nhớ đều có sẵn bên trong 8086 Vì vậy việc phối ghép với các thiết bị đó sẽ rất dễ dàng và chính vì tận dụng được các phối ghép ngoại vi sẵn có nên có thể giảm giá thành hệ thống
+ IO/M {O}: tín hiệu này phân biệt trong thời điểm đã định, phần tử nào trong các thiết bị vào/ra (I/O) hoặc bộ nhớ (M) được chọn làm việc với CPU Trên Bus địa chỉ lúc đó sẽ có các địa chỉ tương ứng của các thiết bị
đó Chân này ở trạng thái trở kháng cao khi CPU chấp nhận treo
+ WR {O}: Xung cho phép ghi Khi CPU đưa ra WR = 0 thì trên Bus dữ liệu, các dữ liệu ổn định và chúng sẽ được ghi vào bộ nhớ hay thiết bị ngoại vi tại thời điểm đột biến 0-> 1 Chân này ở trạng thái trở kháng cao khi CPU chấp nhận treo
+ INTA {O}: Tín hiệu báo cho các mạch bên ngoài biết CPU chấp nhận yêu cầu ngắt INTR{I} Lúc này CPU đưa ra INTA = 0 để báo là nó đang chờ mạch ngoài đưa vào số hiệu ngắt (kiểu ngắt) trên Bus dữ liệu
+ ALE {O}: Xung cho phép chốt địa chỉ Khi ALE = 1 có nghĩa là trên Bus dồn kênh AD có các địa chỉ của thiết bị ngoại vi hoặc ô nhớ, ALE không bao giờ bị thả nổi (trong trạng thái trở kháng cao) Khi CPU bị treo thì ALE = 0
+ DT/R {O}: Tín hiệu điều khiển các đệm 2 chiều của Bus dữ liệu để chọn chiều vận chuyển dữ liệu trên Bus dữ liệu Chân này ở trạng thái trở kháng cao khi CPU chấp nhận treo
+ DEN {O}: Tín hiệu báo cho bên ngoài biết là lúc này trên Bus dồn kênh AD có dữ liệu ổn định Chân này ở trạng thái trở kháng cao khi CPU chấp nhận treo
+ HOLD {I}: Tín hiệu yêu cầu treo CPU để mạch ngoài thực hiện việc trao đổi dữ liệu với bộ nhớ bằng cách thâm nhập trực tiếp (Direct Memory Access – DMA) Khi HOLD = 1, CPU 8086 sẽ tự tách khỏi hệ thống bằng cách treo tất các Bus A, D, một số tín hiệu của Bus C của nó (Các Bus lúc này ở trạng thái trở kháng cao) để bộ điều khiển DMA (DMA Controller – DMAC) có thể lấy được quyền điều khiển hệ thống
để làm các công việc trao đổi dữ liệu
Trang 5+ HLDA {O}: Tín hiệu báo cho bên ngoài biết yêu cầu treo CPU đã được chấp nhận và CPU đã chấp nhận treo các Bus A, D, và một số tín hiệu của Bus C
+ SSO {O}: Tín hiệu trạng thái Tín hiệu này giống như S0 trong chế độ MAX và được dùng kết hợp với IO/M và DT/R để giải mã các chu kỳ hoạt động của Bus Ta có bảng sau:
Các chu kỳ của Bus qua các tín hiệu SSO, IO/M và DT/R:
IO/M DT/R SSO Chu kỳ điều khiển của Bus
0 0 0 Chấp nhận yêu cầu ngắt (INTA = 0)
0 0 1 Đọc thiết bị ngoại vi
0 1 0 Ghi thiết bị ngoại vi
# Chế độ MAX:
Chân MN/MX nối đất
Trong chế độ này, một số tín hiệu điều khiển cần thiết được tạo ra trên cơ
sở các tín hiệu trạng thái nhờ dùng thêm ở mạch bên ngoài một mạch điều khiển Bus 8288
Chế độ MAX được sử dụng khi trong hệ thống có mặt bộ đồng xử lý toán học 8087 (Chíp 8087 được thiết kế để thực hiện các thao tác các số học trong hệ thống cơ sở 8086/8088 Nó có thể thao tác các dạng số liệu kép, BCD hay dấu phảy động)
+ S2, S1, S0 {O}: Các chân trạng thái dùng trong chế độ MAX để ghép với mạch điều khiển Bus 8288
Trang 6Các tín hiệu này được 8288 dùng để tạo ra các tín hiệu điều khiển trong các chu kỳ hoạt động của Bus Các tín hiệu điều khiển được chỉ ra như sau:
+ RQ/GT0 & RQ/GT1 {I/O}: Các tín hiệu yêu cầu dùng Bus của các bộ
vi xử lý khác, khi một bộ vi xử lý khác muốn giành quyền điều khiển bus, phải đưa ra một tín hiệu yêu cầu qua các chân này tới bus master hiện hành Nếu có thể chuyển nhượng quyền được, thì sau khi thực hiện xong lệnh hiện tại, bus master hiện hành sẽ phát ra tín hiệu Acknowledge qua các chân này để thông báo chấp nhận treo của nó, nhờ vậy các bộ vi xử lý khác được dùng Bus và trở thành bus master Cách thức này là rất cần thiết khi có một vài CPU và các chip I/O sử dụng cùng một không gian địa chỉ nhớ và địa chỉ I/O
RQ/GT0 có mức ưu tiên cao hơn RQ/GT1
+ LOCK {O}: Tín hiệu do CPU đưa ra để cấm các bộ vi xử lý khác trong
hệ thống dùng Bus khi nó đang thi hành 1 lệnh nào đó đặt sau lệnh tiếp đầu LOCK, LOCK = 1 bus master không chuyển nhượng quyền sử dụng bus
+ QS0 & QS1 {O}: Tín hiệu thông báo các trạng thái khác nhau của đệm lệnh (hàng đợi lệnh – Prefetch Queue)
Bảng mã hóa các trạng thái của đệm lệnh:
Trang 7QS0 QS1 Trạng thái đệm lệnh.
0 0 Không hoạt động
0 1 Đọc Byte mã lệnh đầu tiên từ đệm lệnh
1 0 Đệm lệnh rỗng
1 1 Đọc Byte tiếp theo từ đệm lệnh
Hình 3.3 là sơ đồ chân của bộ điều khiển bus 8288 Nó là chip bổ trợ cho
8086/8088 và có trách nhiệm phát ra tất cả các tín hiệu cần thiết cho việc điều khiển bus
+ MB (chân số 1)/ IOB (Input / Output Bus Mode): dùng cho Multibus - điều
khiển để 8288 làm việc ở các chế độ bus khác nhau
+ CLK (chân số 2): lối vào của xung đồng hồ
+ S2, S1, S0 (chân 19, 18, 3): Lối vào cho các chân tín hiệu tương ứng từ 8086
+ DT/R (ch©n 4- Data Transmit/Receive)[O]:
= 1 đang ghi dữ liệu (truyền), = 0 đang đọc dữ liệu (nhận)
+ ALE (chân 5 - Address Latch Enable) [O]: = 1 thì địa chỉ từ CPU gửi tới
bộ đệm địa chỉ chỉ được chốt Tín hiệu này thường được nối với chân G của
74573 để điều khiển chốt địa chỉ
+ AEN (Address Enable)[O]: chờ thời gian trễ khoảng 150 ns sẽ tạo các tín
hiệu điều khiển ở đầu ra của 8288 để đảm bảo rằng địa chỉ sử dụng đã hợp lệ + MRDC (chân 7)[O]: Đọc dữ liệu từ bộ nhớ vào CPU
+ MWTC (chân 9) [O]: Ghi dữ liệu từ CPU vào bộ nhớ
+ AMWC[O]: giống như MWTC nhưng hoạt động sớm hơn một chút dùng
cho các bộ nhớ chậm đáp ứng kịp tốc độ CPU
+ IOWC (chân 11) [O]: ghi dữ liệu từ CPU tới cổng vào/ra
+ AIOWC[O]: giống như IOWC nhưng hoạt động sớm hơn một chút dùng
cho các ngoại vi chậm đáp ứng kịp tốc độ CPU
Trang 8+ IORC (chân 13) [O]: Đọc dữ liệu từ cổng vào/ra đưa về CPU.
+ INTA (chân 14) [O]: =0, thông báo CPU chắc chắn chấp nhận yêu cầu ngắt
+ CEN (Command Enable) [O]: cho phép đưa ra tín hiệu DEN và các tín
hiệu điều khiển khác của 8288
+ DEN (chân 16 – Data Enable) [O]: Nếu = 0, dữ liệu được ghi vào bộ đệm
dữ liệu và được chốt ở đó
+ MCE / PDEN (Master Cascade Enable/Peripheral Data Enable) [O]: định
chế độ làm việc cho mạch điều khiển ngắt PIC 8259 để nó làm việc ở chế
độ master
1.2.Sơ đồ chân của chip điều khiển bus
Trang 9II Sơ đồ khối, chức năng các khối.
1 Cấu trúc bên trong của bộ vi xử lý 8086
Hình 1.1 Sơ đồ khối bên trong của vi xử lý 8086
EU - Execution Unit: Khối thực hiện lệnh
BIU - Bus Interface Unit: Khối phối ghép Bus
ALU - Arithmetic and Logic Unit: Khối số học và logic
2 Các khối chức năng
Theo sơ đồ khối trên, ta thấy bên trong CPU 8086 có 2 khối chính: BIU (Bus Interface Unit) và EU (Execution Unit) Việc chia CPU ra thành 2
phần làm việc đồng thời có liên hệ qua đệm lệnh làm tăng đáng kể tốc độ
xử lý của CPU Các Bus bên trong có nhiệm vụ chuyển tải tín hiệu giữa
các khối
- Khối BIU (Khối phối ghép Bus):
Trang 10Có nhiệm vụ đưa ra địa chỉ, đọc mã lệnh từ bộ nhớ, đọc (ghi) dữ liệu
từ (vào) cổng (bộ nhớ) Nói cách khác BIU chịu trách nhiệm đưa địa chỉ ra Bus và trao đổi dữ liệu với Bus.
Trong BIU còn có 1 bộ nhớ đệm lệnh với dung lượng 6 byte để chứa các mã lệnh đọc được nằm sẵn để chờ EU xử lý
- Khối EU (Khối thực hiện):
Trong khối này ta thấy có 1 khối điều khiển (Control Unit - CU), chính khối này có mạch giải mã lệnh Mã lệnh đọc vào từ bộ nhớ được đưa đến đầu vào của mạch giải mã lệnh, các thông tin thu được từ đầu
ra của nó được đưa đến mạch tạo xung điều khiển, kết quả thu được dãy xung khác nhau (tùy theo mã lệnh) để điều khiển hoạt động của các bộ phận bên trong và bên ngoài CPU
Trong khối EU còn có khối ALU (khối số học và logic) dùng để thực hiện các thao tác khác nhau với các toán hạng của lệnh
- Tóm lại: Khi CPU hoạt động EU sẽ cung cấp thông tin về địa chỉ cho BIU để khối này đọc lệnh và dữ liệu, còn bản thân nó thì giải mã lệnh và thực hiện lệnh.
2 Cấu trúc bên ngoài của bộ vi xử lý 8086
2.1 Sơ đồ khối
Hình 2.1: Cấu trúc chung của vi sử lý
III. Các thanh ghi của vi xử lý 8086.
1 Các thanh ghi đoạn:
Trang 11Khối BIU đưa ra trên Bus địa chỉ 20 Bit địa chỉ, như vậy 8086 có khả năng phân biệt được 220 = 1.048.576 = 1M ô nhớ = 1 Mbyte
Nói cách khác: Không gian địa chỉ của 8086 là 1 Mbyte Trong không gian 1 Mbyte này, bộ nhớ cần được chia thành các vùng khác nhau (điều này có lợi khi làm việc ở chế độ nhiều người sử dụng hoặc đa nhiệm) dành riêng để:
- Chứa mã chương trình
- Chứa dữ liệu và kết quả trong không gian của chương trình
- Tạo ra vùng nhớ đặc biệt gọi là ngăn xếp (Stack) dùng vào việc quản
lý các thông số của bộ vi xử lý khi gọi chương trình con hoặc trở về từ chương trình con
Bộ vi xử lý 8086 có các thanh ghi 16 Bit liên quan đến địa chỉ đầu của các vùng (các đoạn) kể trên và chúng được gọi là các thanh ghi đoạn (Segment Registers) Đó là:
CS - Code Segment: Thanh ghi đoạn mã.(Chứa địa chỉ đầu của đoạn mã lệnh trong bộ nhớ)
DS - Data Segment: Thanh ghi đoạn dữ liệu.(Chứa địa chỉ đầu của đoạn dữ liệu nguồn trong bộ nhớ)
SS - Stack Segment: Thanh ghi đoạn ngăn xếp.(Chứa địa chỉ đầu của đoạn ngăn xếp Stack trong bộ nhớ)
ES - Extra Segment: Thanh ghi đoạn dữ liệu phụ.(Chứa địa chỉ đầu của đoạn dữ liệu đích trong bộ nhớ)
- Chức năng của thanh ghi đoạn: Các thanh ghi đoạn sẽ xác định địa chỉ của các ô nhớ nằm ở đầu đoạn Địa chỉ này gọi là địa chỉ cơ sở
2.Các thanh ghi con trỏ và chỉ số:
Trong 8086 có 3 thanh ghi con trỏ và 2 thanh ghi chỉ số 16 Bit, các thanh ghi này được ngầm định như là thanh ghi lệch cho các đoạn tương ứng,
cụ thể:
IP - Instruction Pointer (Con trỏ lệnh): IP luôn trỏ vào lệnh tiếp theo sẽ được thực hiện nằm trong đoạn mã CS Địa chỉ đầy đủ của lệnh tiếp theo này ứng với: CS : IP
Trang 12BP - Base Pointer (Con trỏ cơ sở): BP luôn trỏ vào 1 dữ liệu nằm trong đoạn ngăn xếp SS Địa chỉ đầy đủ của 1 phần tử trong đoạn ngăn xếp ứng với: SS : BP
SP - Stack Pointer (Con trỏ ngăn xếp): SP luôn trỏ vào đỉnh hiện thời của ngăn xếp SS Địa chỉ đầy đủ của đỉnh ngăn xếp ứng với:
SS : SP
SI - Source Index (Chỉ số gốc/nguồn): SI trỏ vào 1 dữ liệu nằm trong đoạn dữ liệu DS Địa chỉ đầy đủ của 1 phần tử trong đoạn DS: DS : SI DI - Destination Index (Chỉ số đích): DI trỏ vào 1 dữ liệu nằm trong đoạn dữ liệu DS Địa chỉ đầy đủ cụ thể ứng với ES : DI
Địa chỉ của các ô nhớ khác nằm trong đoạn được tính bằng cách cộng
thêm vào địa chỉ cơ sở 1 giá trị gọi là địa chỉ lệch hay độ lệch (địa chỉ
offset /địa chỉ tương đối) Độ lệch này được xác định bởi các thanh ghi
16 Bit khác đóng vai trò thanh ghi lệch (offset register) - được nói rõ trong phần thanh ghi con trỏ và chỉ số
Cụ thể, để xác định địa chỉ vật lý 20 Bit của 1 ô nhớ cụ thể nào đó trong 1 đoạn bất kỳ, CPU 8086 phải dùng đến 2 thanh ghi 16 Bit (1 thanh ghi chứa địa chỉ cơ sở, 1 thanh ghi chứa địa chỉ lệch) Từ nội dung của cặp thanh ghi trên, tạo ra địa chỉ vật lý theo công thức sau:
Địa chỉ vật lý = thanh ghi đoạn *16 +thanh ghi lệch.
= segment * 16 + offset
Và địa chỉ logic được ký hiệu như sau:
3.Thanh ghi đoạn : thanh ghi lệch
Hay:
Segment : offset.
Địa chỉ kiểu Segment : offset là địa chỉ Logic vì nó tồn tại dưới dạng giá
trị của các thanh ghi cụ thể bên trong CPU Khi cần thiết truy nhập ô nhớ nào đó, CPU phải đổi địa chỉ logic này ra địa chỉ vật lý để rồi đưa lên Bus địa chỉ Việc chuyển đổi này do 1 bộ tạo địa chỉ thực hiện (Khối ∑ trong hình vẽ)