“Nếu ban giám đốc Intel có một ý niệm mơ hồ nào đó rằng kiến trúc này sẽ tồn tại cho rất nhiều thế hệ và trong các bộ vi xử lý… ngày nay thì họ sẽ không bao giờ tin tưởng giao công việc
Trang 2Page | 2
Thành viên trong nhóm:
1 HOÀNG VĂN QUỲNH
2 NGUYỄN ĐÌNH QUÝ
3 NGUYỄN VĂN QUÝ
4 CHU THANH QUÝ
5 DƯƠNG VĂN QUÝ
Điều ngạc nhiên về sự thành công kỳ diệu của 8086 là rất ít người kỳ vọng về nó khi
8086 còn đang được “thai nghén” Lịch sử của bộ vi xử lý cách mạng này là một câu chuyện kinh điển về một nhóm nhỏ các kỹ sư thiên tài có thể đạt được thành công khi
họ được tự do làm công việc nghiên cứu theo những cách sáng tạo
Khi sự phát triển của 8086 bắt đầu vào tháng 5 năm 1976, các giám đốc điểu hành của Intel chưa bao giờ tưởng tượng được sự tác động ngoạn mục mà 8086 mang lại Công
ty xem 8086 như một dự án lấp chỗ trống trong khi công ty đang kỳ vọng vào một bộ
Trang 3Page | 3
vi xử lý phức tạp và khác biệt là 8800 (tên sau đó là iAPX 432) Trong một kỷ nguyên
mà hầu hết các dòng chip đều sử dụng 8-bit dữ liệu, 8800 đã nhảy vọt lên 32 bit Khả năng xử lý đa nhiệm nâng cao và mạch quản lý bộ nhớ có thể được xây dựng tạo thànhCPU, cho phép hệ điều hành chạy ít dòng mã điều khiển hơn
Nhưng dự án 8800 gặp khó khăn Dự án này đã vấp phải rất nhiều sự trì hoãn khi các
kỹ sư Intel nhận thấy rằng thiết kế phức tạp của chip rất khó có thể chế tạo với công nghệ chip hiện thời Vấn đề của Intel chưa dừng ở đó, Intel bị “chọc sườn” bởi công tyZilog (công ty được thành lập từ những kỹ sư xuất phát từ Intel) Zilog nhanh chóng chiếm thị phần cho dòng vi xử lý bậc trung với sản phẩm Z80 CPU Ra đời tháng 7, năm 1976 Z80 là phiên bản nhái nâng cao của dòng chip Intel 8080 - dòng chip đã khởi nguồn cho cuộc cách mạng máy tính cá nhân Intel đã phải đưa ra câu câu trả lời cho Z80
Kỹ sư kì cựu của Intel – Stephen Morse là tác giả của những đoạn mã trong 8086.Các giám đốc điều hành của Intel vẫn duy trì niềm tin vào 8800 nhưng biết rằng công
ty cần câu trả lời cho mối nguy từ Zilog Họ quay sang Stephen Morse, người kỹ sư điện tử 36 tuổi, người đã gây ấn tượng với họ về sự nghiên cứu kỹ càng tới các lỗi trong thiết kế chip 8800 Công ty chỉ định Morse làm kỹ sư duy nhất cho dự án 8086
“Nếu ban giám đốc Intel có một ý niệm mơ hồ nào đó rằng kiến trúc này sẽ tồn tại cho rất nhiều thế hệ và trong các bộ vi xử lý… ngày nay thì họ sẽ không bao giờ tin tưởng giao công việc này cho duy nhất một người” ông Morse hồi tưởng lại
Bổ nhiệm Morse là một lý do ngạc nhiên khác Ông ta là kỹ sư phần mềm Trước đây, thiết kế CPU ở Intel là miền đất chỉ cho các kỹ sư phần cứng “Lần đầu tiên, chúng tôi nhìn các tính năng của bộ vi xử lý từ các khía cạnh của phần mềm Câu hỏi không phải
là những tính năng gì chúng ta có thể phát triển mà là những tính năng gì chúng ta muốn để làm cho phần mềm hiệu quả hơn.” Morse nói Hướng tiếp cận tập trung vào phần mềm đã chứng minh cho cuộc cách mạng trong ngành công nghiệp này
Mặc dù 8086 là dự án “con cưng” của Morse, nhưng ông ta không làm việc đơn độc Tham gia vào nhóm của Morse là các nhân viên của Intel, bao gồm Bill Pohlman, Jim McKevitt và Bruce Ravenel, tất cả đã góp sức đưa 8086 bước ra thị trường vào mùa hènăm 1978
Vượt ra ngoài việc chỉ dừng lại ở một số yêu cầu cơ bản, 8086 tương thích với các phần mềm viết cho 8080 và có khả năng hỗ trợ 128KB bộ nhớ - các nhà lãnh đạo của Intel không can thiệp vào công việc của Morse “Bởi vì không ai mong đợi thiết kế sẽ tồn tại lâu dài, không rào cản nào ngáng chân công việc của tôi, tôi tự do làm những gìmình muốn” ông nói
ii.Tæ CHøC Bé Xö Lý INTEL 8086
Trang 4Page | 4
Bộ Xử Lý (CPU) INTEL 8086
1 Tổ chức tổng quát
CPU 8086 là CPU 16 bit (bus số liệu có 16 dây) Nó đợc dùng để chế tạo các máy
vi tính đầu tiên của hãng IBM Thật ra IBM dùng CPU 8088 với đờng bus số liệu rangoài là 8 bit
Cho đến nay, CPU đã không ngừng cải tiến và đã trải qua các dạng 80186, 80286,
80386, 80486, 80586 (Pentium), Pentium Pro, Pentium II, PIII, PIV
Các CPU tơng thích từ trên xuống (downward compatible) nghĩa là tập lệnh mớibao gồm tập lệnh của CPU cũ và thêm nhiều lệnh mới nữa
Hình ảnh CPU 8086:
Trang 5Page | 5
Execution Unit (EU)
Thùc hiÖn lÖnh
Bus Interface Unit (BIU) Giao tiÕp Bus
0 00 0
0 00 0
0 00 0
§iÒu khiÓn bus
Bus ngo¹i
ALU (Bé lµm tÝnh &
luËn lý)
1
Hµng chê lÖnh
2 3 CU
(Bé ®iÒu khiÓn)
4 5 Thanh ghi tr¹ng
th¸i
6
Thanh ghi lÖnh
Trang 6Page | 6
Hình: Sơ đồ khối của CPU 8086
Ta thấy CPU 8086 chia thành 2 bộ phận chính: Bộ phận thực hiện lệnh (ExecutionUnit: EU) và bộ phận giao tiếp Bus (Bus Interface Unit: BIU)
Bộ phận thực hiện lệnh EU: Kiểm soát các thanh ghi, giải mã và thi hành lệnh tức
là làm các tác vụ mà lệnh yêu cầu Nh vậy EU làm hầu hết công việc của CPU cổ điển.Các thanh ghi và đờng bus trong EU điều là 16 bit EU không nối với bus hệ thống bênngoài, nó lấy lệnh từ hàng chờ lệnh mà BIU cung cấp Khi có yêu cầu truy xuất bộ nhớhay ngoại vi thì EU yêu cầu BIU làm việc BIU có thể tái định địa chỉ cho phép EUtruy xuất đầy đủ 1MB (8086 có 20 đờng địa chỉ ngoại)
Bộ phận giao tiếp bus (BIU): BIU thực hiện tất cả các tác vụ về bus của EU.Trong khi EU đang thực hiện lệnh thì BIU lấy lệnh từ bộ nhớ trong và cất giữ vào trong
ô nhớ (gọi là hàng chờ lệnh) bên trong CPU Do đó, EU không phải đợi lấy lệnh từ bộnhớ Đây là một cách đơn giản của cache
2 Các thanh ghi của 8086
a Thanh ghi đa dạng: CPU 8086 có 4 thanh ghi đa dụng 16bit, có thể chia
đôi thành 8 thanh, mỗi thanh 8 bit
AX (accumulator): là thanh ghi tích luỹ cơ bản, mọi tác vụ vào/ra đềudùng thanh ghi này, tác vụ dùng số liệu tức thời, một số tác vụ chuỗi ký tự và các lệnhtính toán đều dùng thanh ghi AX
BX (base register): là thanh ghi nền thờng dùng để tính toán địa chỉ ônhớ
CX (count register): là thanh ghi đếm thờng dùng để đếm số lần trongmột lệnh vòng lặp hoặc xử lý chuỗi ký tự
DX (data register): thờng chứa địa chỉ của một số lệnh vào ra, lệnh tínhtoán số học (kể cả nhân và chia)
b Thanh ghi con trỏ: Dùng để thâm nhập số liệu trên ngăn xếp.
SP (stack pointer): Thanh ghi con trỏ ngăn xếp
BP (base pointer): Thanh ghi con trỏ nền dùng để lấy số liệu từ ngănxếp
c Thanh ghi chỉ số
SI (source index): Thanh ghi chỉ số nguồn
DI (destination index): Thanh ghi chỉ số đích
d Thanh ghi đoạn: Đợc dùng trong mọi tính toán địa chỉ ô nhớ Mỗi thanh
ghi đoạn xác định 64 KB ô nhớ trong bộ nhớ trong
CS (code segment): Thanh ghi đoạn mã lệnh
DS (data segment): Thanh ghi đoạn dữ liệu
ES (extra segment): Thanh ghi đoạn thêm Các pháp tính chuỗi dùng DI
đều liên quan đến ES
Trang 7Page | 7
SS (stack segment): Thanh ghi đoạn ngăn xếp Con trỏ SP luôn trỏ tới
đỉnh của ngăn xếp
e Thanh ghi cờ: Phản ảnh kết quả của phép tính toán số học và luận lý, xác
định trạng thái hoạt động của CPU Các bit trên thanh ghi cờ có ý nghĩa đợc trình bàydới đây
CF: thể hiện số giữ thoát ra từ bit cao nhất của thanh ghi kết quả sau mộtphép tính toán
OF: thể hiện việc tính toán vợt quá khả năng của CPU
AF: thể hiện số giữ thoát ra từ bít thứ 4 (bit 3) của thanh ghi kết quả
PF: bằng 1 nếu 8 bít thấp của thanh ghi kết quả một phép tính toán có sốcon số 1 chẳn (và ngợc lại)
ZF: bằng 1 khi kết quả phép tính bằng 0 (và ngợc lại)
DF: có thể lập trình đợc, bằng 1 thì SI và DI giảm 1 cho mỗi vòng lặp
IF: có thể lập trình đợc, bằng 1 cho phép ngắt
TF: có thể lập trình đợc, bằng 1 khi cho phép chơng trình chạy từng bớc
để phục vụ sửa sai một chơng trình
1
5
14
13
12
11
4. Sự phân đoạn trong bộ nhớ trong
CPU 8086 có không gian địa chỉ là 1 MB (ứng với 20 đờng dây địa chỉ) VậyCPU 8086 có thể quản lý bộ nhớ trong là 220 = 1 MB
Để dành dùng sau
Trang 8Ví dụ: Đoạn CS có giá trị là 1002H, thì địa chỉ vật lý của ô nhớ K trong đoạn CS
có độ dời 500H (thờng viết CS:500H) là:
+ 10020H Vì 1002H dịch trái 4bit = 10020H
500H10520H Đây là địa chỉ vật lý của ô nhớ KTrong ví dụ ta thấy đoạn CS có điểm bắt đầu ở địa chỉ vật lý 10020H Độ dời500H là khoảng cách từ địa chỉ của điểm bắt đầu của đoạn CS đến ô nhớ K
Ô nhớK
Địa chỉ vật lý của ô nhớ K: 10520H
Địa chỉ 10020H
Điểm bắt đầu của đoạn CS
Chính BIU quyết định sẽ dùng đoạn nào theo tính chất của số liệu
Nếu số liệu là mã lệnh thì BIU sẽ dùng đoạn CS
Nếu số liệu là dữ liệu của chơng trình thì BIU sẽ dùng đoạn DS
Nếu số liệu là dữ liệu nằm trên ngăn xếp thì BIU sẽ dùng đoạn SS
Nếu dùng các phép tính chuỗi thì thanh ghi DI luôn chứa độ dời của ônhớ trong đoạn ES
Lúc khởi động CPU 8086 đến địa chỉ vật lý cao của bộ nhớ trong (đoạnCS=0FFFFH và độ dời 0) để lấy lệnh Địa chỉ này ứng với địa chỉ ROM của bộ nhớtrong
5. Địa chỉ các ngoại vi
Các ngoại vi đều có địa chỉ riêng từ 0 đến 64 KB CPU 8086 dùng các lệnh riêngbiệt để truy xuất ngoại vi và bộ nhớ trong Muốn truy xuất ngoại vi, BIU chỉ cần đ a địachỉ của ngoại vi lên 16 bit thấp của bus địa chỉ (không có đoạn)
Trang 9Page | 9
6. Các chân của vi mạch 8086
AD0 … AD15 + AD16 … AD19 là 20 chân của bus địa chỉ, các chân từ AD0 đếnAD15 đợc đa hợp (multiplex) với bus số liệu, các chân từ AD16 đến AD19 đợc đa hợpvới các nhiệm vụ về trạng thái thể hiện ở các chân S3, S4, S5, S6
S5 thể hiện trạng thái cờ ngắt (interrupt flag)
S6 đợc giữ ở trạng thái thấp nếu CPU đang sử dụng hệ thống bus ngoài
S7 lu giữ trạng thái của BHE ở chu kỳ máy thứ nhất
Trang 10Page | 10
RD: CPU dùng tín hiệu này để đọc số liệu từ ô nhớ hay từ các thiết bị ngoại vi.Ready: Ô nhớ hoặc ngoại vi có thể dùng tín hiệu này để báo cho CPU biết nó
đang sẳn sàng chuyển dữ liệu
TEST: Khi ta dùng lệnh WAIT thì CPU ở trạng thái nghỉ cho đến khi tín hiệu ởchân này xuống thấp thì CPU mới thi hành lệnh kế sau lệnh WAIT
INTR: Các ngoại vi tác động vào chân này khi cần ngắt CPU
NMI (non maskable interrupt): Đây là ngã vào của ngắt không che, ngắt khôngche có u tiên tuyệt đối
Reset: Khởi động lại hệ thống
CPU 8086 có hai chế độ vận hành MAX (MX ) và MIN (MN) Nhiệm vụ của cácchân tơng ứng với 2 chế độ vận hành nh sau:
MIN (MN)
Chế độ MN (hiệu điện thế ở chân MN / MX cao)
DEN (data enable): Cho phép số liệu đợc nhận vào CPU hoặc đa ra bus số liệutuỳ theo tín hiệu ở chân DT / R Nếu chân DT / R có hiệu thế cao, CPU đa số liệu rabus hệ thống Nếu DT / R có hiệu thế thấp, CPU nhận số liệu từ bus hệ thống
IO
M / (memory / input output): Chân này ở trạng thái cao nếu CPU liên hệ với
bộ nhớ Nó ở trạng thái thấp nế CPU làm việc với ngoại vi
HOLD: Các ngoại vi tác động vào chân này nếu muốn sử dụng bus hệ thống.HLDA (hold acknowledge): CPU dùng tín hiệu này để báo cho ngoại vi biết nó
đang thả nổi bus hệ thống
ALE (address latch enable): Tín hiệu ở chân này cho biết địa chỉ của ô nhớ đã đợc
đa ra bus hệ thống
INTA (interrupt latch enable): Đây là tín hiệu cho biết CPU đã công nhận ngắt
mà ngoại vi yêu cầu
WR: Tín hiệu dùng để viết số liệu vào bộ nhớ
Chế độ MX (hiệu điện thế ở chân MN / MX thấp)
S0, S1, S2 kết hợp, ý nghĩa nh sau:
Trang 11/ GT
RQ gièng nh RQ / GT0 nhng u tiªn thÊp h¬n
QS0 vµ QS1 cho biÕt tr¹ng th¸i cña hµng chê lÖnh nh sau:
GND (ground): lµ ch©n mass (0 volt) Vcc lµ hiÖu ®iÖn thÕ nguån 5 volt
CPU 8086 ph¶i dïng chung víi mét sè vi m¹ch kh¸c nh: vi m¹ch ®iÒu khiÓn bus,
vi m¹ch t¹o xung nhÞp (clock),… míi t¹o thµnh mét m¸y vi tÝnh
C¸C LÖNH THƯêNG DïNG CñA CPU 8086
<tác vụ lệnh> TH1,TH2
Tác vụ lệnh cho biết công việc mà CPU sẽ thực hiện ( là thành phần bắt buộc ) toán hạng ( TH1và TH2) phải ngăn cách nhau bằng dấu phẩy (,).
Trang 12Page | 12
Đối với lệnh có 2 toán hạng, thông thường TH2 sẽ là toán hạng nguồn còn TH1
sẽ là toán hạng đích và cũng là toán hạng nguồn còn lại Kích thước các toán hạng phảibằng nhau:
-Nếu TH1 là 8 bit thì TH2 cũng phải 8 bit và ngược lại
-Nếu TH2 Là 16 bit thì TH1 cung phải 16 bit và ngược lại
Tập lệnh CPU-8086 được sắp xếp theo các nhóm như sau:
Sao chép dữ liệu và địa chỉ
Tính toán số học
Tính toán lôgic, ghi dịch và quay
Truy xuất ngoại vi
1 Lệnh sao chép dữ liệu địa chỉ:
MOV- di chuyễn dữ liệu
Cú pháp: MOV Đích, Nguồn
MOV SegReg, Reg16MOV Reg16, SegRegNguồn (toán hạng nguồn): Reg, Mem, Immed
Đích (toán hạng đích): Reg, Mem
Ý nghĩa: Sao chép dữ liệu (xác định bởi toán hạng nguồn) vào vùng nhớ hoặc thanh
ghi ( xác định bởi toán hạng đích) Sau khi thực hiện xong thì giá trịtoán hạng nguồn và đích bằng nhau
Lưu ý: - Lệnh MOV không ảnh hưởng tới thanh ghi trạng thái.
- Một trong hai toán hạng là thanh ghi
Ví dụ: MOV, CX, BX : Sao chép nội dung thanh ghi BX vào thanh ghi CX Sau
khi thực hiện xong BX=CXMOV DX, 1234h ; DL34h, DH12h
Trang 13Page | 13
MOV DS, AX ; DS AX MOV AH, [1234h] ; AHM[ DS:1234h]
MOV [1235h], DX ; M[ DS:1235h] DL, M[DS:1236h]DH
MOV AH, CX ; SAI vì AH có 8 bit trong khi CX có 16 bit.
Bộ nhớ: DS:1237hDS:1236hDS:1235hDS:1234h
Hình1: mô tả lệnh MOV [1235h] DX
Hoán chuyển dữ liệu- XCHG
Cú pháp: XCHG Đích, Nguồn ; Đích Nguồn
Nguồn, đích : reg, mem
Ý nghĩa: Lệnh XCHG hoán chuyển dữ liệu giữa nguồn và đích Cả 2 toán hạng
không đồng thời là Mem
Ví dụ: XCHG AL, BH ; AL BH
XCHG AL, [12345h]; ALM[DS:12345h],
AHM[DS:12346h]
XCHG bienA, BienB ; SAI vì cả A và B đều là vùng nhớ
LEA- lấy địa chỉ độ rời
Cú pháp: LEA Reg16, Mem16 ; Reg16 địa chỉ độ rời
Ý nghĩa: lấy địa chỉ độ rời của biến hay nhãn (Mem16) đưa vào thanh ghi đích
Reg16
Ví dụ: LEA DX, bienA ; lấy độ rời của bienA đưa vào DX
Bộ nhớ địa chỉ
DS:1A2C6hbienA DS:1A2Bh
DS:1A2Ah DX
Trang 14Page | 14
Hình2: mô tả lệnh LEA DX, bienA
BienA được ccáp phát vùng nhớ là 1A2Bh, sau khi thực hiện lệnh thì thanh
ghi DX=1A2Bh
2 Lệnh tính toán số học.
ADD- Cộng hai số nguyên
Nguồn: Reg, Mem, Immed
Đích: Reg, Mem
Ý nghĩa: Lấy toán hạng nguồn công toán hạng đích và lưu kết quả lưu toán hạng
đích
SUB- Trừ hai số nguyên
Nguồn: Reg, Mem, Immed
Đích: Reg, Mem
Ý nghĩa: Lấy toán hạng đích (số bị trừ) trừ toán hạng nguồn (số trừ) và lưu kết quả
ở toán hạng đích
Ví dụ: ADD AL, 15 ; ALAL+15
ADD AX, DX ; AXAX+DXSUB BX, 15h ; BXBX-15hSUB DX, CL ; SAI vì DX là 16 bit trong khi CL chỉ có 8 bit
INC- Tăng 1 đơn vị (Increment)
cú pháp : INC đích ; đích đích +1
Đích: Reg, Mem
Ý nghĩa : tăng nội dung toán hạng đích lên 1 đơn vị.
DEC-giảm 1 đơn vị (Decrment)
Trang 15Page | 15
MUL- nhân 2 số nguyên
Cú pháp: MUL nguồn
Nguồn: Reg, Mem
Ý nghĩa: nhân thanh ghi tích lũy với toán hạng nguồn Tùy theo kích thước của
toán hạng nguồn mà CPU thực hiện phép nhân 8 hay 16 bit
- Nhân 8 bit: dành cho toán hạng nguồn là 8 bit Khi đó CPU sẽ lấy thanh ghi AL
nhân với toán hạng nguồn rồi lưu kết quả vào thanh ghi AX
- Nhân 16 bit: dành cho toán hạng nguồn là 16 bit Khi đó CPU sẽ lấy thanh ghi
AL nhân với toán hạng nguồn rồi lưu kết quả vào thanh ghi DX:AX
(nghĩa là kết quả có 32 bit, 16 bit cao lưu vào DX, 16 bit thấp lưu vào AX)
Ví dụ: MUL BL ; AXAL*BL (nhân 8 bit)
MUL BX ; DX:AXAX*BX ( nhân 16 bit)
MUL [12345H] ; AX AL*M[DS:12345h] (nhân 8 bit)
DIV-chia hai số nguyên
Cú pháp: DIV nguồn
Nguồn: Reg, Mem
Ý nghĩa: lấy thanh ghi tích lũy (số bị chia) chia cho toán hạng nguồn (số chia) Tùy
theo kích thước của toán hạng nguồn mà CPU thực hiện phép nhân 8 hay
16 bit
- Chia 8 bit: dành cho toán hạng nguồn là 8 bit Khi đó CPU sẽ lấy thanh ghi AX
chia cho toán hạng nguồn rồi lưu kết quả vào thanh ghi AL phần con dư lưu vào AH
- Chia 16 bit: dành cho toán hạng nguồn là 16 bit Khi đó CPU sẽ lấy thanh ghi
DX:AX (số32 bit) chia cho toán hạng nguồn rồi lưu kết quả vào thanh ghi
AX phần còn lại lưu vào DX.
Ví dụ: DIV DL ; AL, AHAX÷DL
DIV BX ;AX,DXDX:AX÷BX
3 Nhóm lệnh logic và ghi dịch
AND, OR, XOR, TEST : và, hoặc, cộng không nhớ, kiểm tra bit
OR đích nguồn ; đích đích ∨ nguồnXOR đích nguồn ; đích đích ⊕nguồn