Tải bản đầy đủ (.doc) (26 trang)

Nghiên cứu tìm hiểu về thế hệ VXL 8086

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 (476.81 KB, 26 trang )

Page | 1
Trêng ®¹i häc c«ng nghiÖp hµ néi
Khoa c«ng nghÖ th«ng tin
B¸o c¸o bµi tËp lín m«n häc
KiÕn tróc m¸y tÝnh
Nhóm Thực Hiện: Nhóm 15
Trang 1
Page | 2
Lớp: KTPM2-K6
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Ý

Trang 2
Page | 3
BỘ VI XỬ LÝ INTEL 8086
I. LỊCH SỬ RA ĐỜI BỘ VI XỬ LÝ 8086
Cách đây 30 năm, Intel tung ra bộ vi xử lý 8086, giới thiệu kiến trúc x86, làm nền
tảng cho tất cả các PC bao gồm Windows, Mac hay Linux được sản xuất ngày nay.
Sự ra đời của bộ vi xử lý Intel 8086 năm 1978 là một sự kiện trọng đại đối với ngành
công nghiệp máy tính. Bộ vi xử lý 8086 là trung tâm của bất kỳ máy tính nào, từ
Windows, Mac hay Linux, đã biến Intel từ một công ty sản xuất chip bán dẫn nhỏ
thành một tên tuổi nổi tiếng nhất trên thế giới.
Đ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ộ
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ành
CPU, 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 ty
Zilog (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
Trang 3
Page | 4
l nhng tớnh nng gỡ chỳng ta cú th phỏt trin m l nhng tớnh nng gỡ chỳng ta
mun lm cho phn mm hiu qu hn. Morse núi. Hng tip cn tp trung vo
phn mm ó chng minh cho cuc cỏch mng trong ngnh cụng nghip ny.

Mc dự 8086 l d ỏn con cng ca Morse, nhng ụng ta khụng lm vic n c.
Tham gia vo nhúm ca Morse l cỏc nhõn viờn ca Intel, bao gm Bill Pohlman, Jim
McKevitt v Bruce Ravenel, tt c ó gúp sc a 8086 bc ra th trng vo mựa hố
nm 1978.
Vt ra ngoi vic ch dng li mt s yờu cu c bn, 8086 tng thớch vi cỏc
phn mm vit cho 8080 v cú kh nng h tr 128KB b nh - cỏc nh lónh o ca
Intel khụng can thip vo cụng vic ca Morse. Bi vỡ khụng ai mong i thit k s
tn ti lõu di, khụng ro cn no ngỏng chõn cụng vic ca tụi, tụi t do lm nhng gỡ
mỡnh mun ụng núi.
ii.Tổ CHứC Bộ Xử Lý INTEL 8086
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 ra
ngoà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ới
bao 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 4
Page | 5
Execution Unit (EU)
Thùc hiÖn lÖnh
Bus Interface
Unit (BIU)
Giao tiÕp Bus
AH AL
A
X

BH BL
B
X
CH CL
C
X
DH DL
D
X
PC
SP CS
0
00
0
BP DS
0
00
0
Trang 5
Page | 6
SI ES
0
00
0
DI SS
0
00
0
Điều
khiển

bus
Bus ngoại
ALU
(Bộ làm tính &
luận lý)
1

Hàng
chờ
2
3
CU
4
5
Thanh ghi trạ
ng
thái
6
Thanh ghi lệnh
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 (Execution
Unit: 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ên
ngoà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 EU
truy 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

Trang 6
Page | 7
ô 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 đều
dù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ệnh
tí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 trong
mộ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ính
toá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ăn
xế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.
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ày
dới đây.
Trang 7
Page | 8
CF: thể hiện số giữ thoát ra từ bit cao nhất của thanh ghi kết quả sau một
phé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
1
4
1
3
1
2
1
1
1
0
9 8 7 6 5 4 3 2 1 0

O D I T S Z A P C
3. Tổ chức bộ nhớ trong
Bộ nhớ trong đợc tổ chức thành từng mảng gồm các ô nhớ 8 bit. Các dữ liệu có
thể cất giữ hoặc lấy ra từ bất kỳ ô nhớ nào. Mỗi ô nhớ có một địa chỉ.
Theo qui ớc của Intel các dữ kiện 16 bit cất giữ vào ô nhớ với byte cao ở địa chỉ
cao và byte thấp ở ô nhớ có địa chỉ thấp.
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ậy
CPU 8086 có thể quản lý bộ nhớ trong là 2
20
= 1 MB.
Trang 8
Để dành dùng
sau
CF cờ số giữ
PF cờ chẳn lẽ
AF cờ số giữ phụ
ZF cờ zero
SF cờ dấu
* TF cờ bẩy
* IF cờ ngắt
* DF cờ h{ớng
OF cờ tràn
Page | 9
Bộ nhớ 1MB này có thể chia thành nhiều đoạn 64 KB. Các đoạn có thể chồng lên
nhau.
Mỗi địa chỉ ô nhớ xác định bởi 2 số:
Đoạn 16 bit.
Độ dời (offset).
Địa chỉ cụ thể còn gọi là địa chỉ vật lý đợc tính bằng cách dịch trái thanh

ghi đoạn 4 bit (nhân cho 16) rồi cộng vào độ dời.
Ví 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
500H
10520H
Đây là địa chỉ vật lý của ô nhớ K
Trong ví dụ ta thấy đoạn CS có điểm bắt đầu ở địa chỉ vật lý 10020H. Độ
dời 500H 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
Độ dời 500H
Đ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ạn
CS=0FFFFH và độ dời 0) để lấy lệnh. Địa chỉ này ứng với địa chỉ ROM của bộ nhớ
trong.
Trang 9
Page | 10
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êng
biệt để truy xuất ngoại vi và bộ nhớ trong. Muốn truy xuất ngoại vi, BIU chỉ cần đa địa

chỉ của ngoại vi lên 16 bit thấp của bus địa chỉ (không có đoạn).
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 đến
AD15 đợc đa hợp (multiplex) với bus số liệu, các chân từ AD16 đến AD19 đợc đa hợp
với các nhiệm vụ về trạng thái thể hiện ở các chân S3, S4, S5, S6.

Hình: Vi mạch CPU 8086.
Sau chu kỳ máy thứ nhất S3, S4 cho ta biết đoạn nào đợc dùng để tạo địa chỉ.
S3 S4 ý nghĩa
0 0 Đoạn ES
Trang 10
Page | 11
0 1 Đoạn SS
1 0 Đoạn CS hoặc không đoạn nào
1 1 Đoạn DS
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.
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ông
che 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ác
chân tơng ứng với 2 chế độ vận hành nh sau:
MIN
(MN)
MAX (
MX
)
HOLD
0/ GTRQ
HALD
1/ GTRQ
WR
Lock
IOM /
2S
RDT /
1S
DEN
0S
ALE QS0
INTA
QS1
Chế độ MN (hiệu điện thế ở chân
MXMN /
cao)
DEN
(data enable): Cho phép số liệu đợc nhận vào CPU hoặc đa ra bus số liệu

tuỳ theo tín hiệu ở chân
RDT /
. Nếu chân
RDT /
có hiệu thế cao, CPU đa số liệu ra
bus hệ thống. Nếu
RDT /
có hiệu thế thấp, CPU nhận số liệu từ bus hệ thống.
Trang 11
Page | 12
IOM /
(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
MXMN /
thấp)
S0, S1, S2 kết hợp, ý nghĩa nh sau:
S0 S1 S2 ý nghĩa
0 0 0 Công nhận ngắt
0 0 1 Đọc từ ngoại vi

0 1 0 Viết ra ngoại vi
0 1 1 Trạng thái dừng (HALT)
1 0 0 Tìm lệnh
1 0 1 Đọc bộ nhớ
1 1 0 Viết vào bộ nhớ
1 1 1 Không có hoạt động
0/ GTRQ
(request / grant): Ngoại vi tạo một xung thấp ở chân này để báo cho
CPU biết nó cần sử dụng bus hệ thống. CPU báo lại bằng một xung âm cho biết nó đã
thả nổi bus hệ thống.
1/ GTRQ
giống nh
0/ GTRQ
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:
QS0 QS1 ý nghĩa
0 0 Cha có tác vụ
0 1 Byte thứ nhất của lệnh đợc thực hiện
1 0 Hàng chờ lệnh đã đầy
1 1
Byte kế tiếp của lệnh đang đợc lấy đi từ hàng chờ
lệnh
Trang 12
Page | 13
LOCK: Đây là tín hiệu báo CPU đang sử dụng bus hệ thống.
GND (ground): là chân mass (0 volt). V
cc
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
I. Gii thiu
Bộ xử lý 8086 có tập lệnh gồm 111 lệnh, chiều dài của lệnh từ 1 byte đến vài
byte.
Tập lệnh của bộ xử lý Intel 8086 ngày càng có nhiều lệnh mạnh và phức tạp
(CPU- 8086 có 206 lệnh, Pentium cú hn 400 lnh).
Các lệnh có chiều dài từ 1 đến 15 byte, một số lệnh cần 1000 chu kỳ xung nhịp để
thực hiện. Lnh ca CPU-8086 cú ti a 2 toỏn hng, mi lnh cú s toỏn hng v loi
toỏn hng ó c xỏc nh trc. Cỳ phỏp tng quỏt nh sau:
<tỏc v lnh> TH1,TH2
Tỏc v lnh cho bit cụng vic m CPU s thc hin ( l thnh phn bt
buc ) toỏn hng ( TH1v TH2) phi ngn cỏch nhau bng du phy (,).
i vi lnh cú 2 toỏn hng, thụng thng TH2 s l toỏn hng ngun cũn TH1
s l toỏn hng ớch v cng l toỏn hng ngun cũn li. Kớch thc cỏc toỏn hng phi
bng nhau:
-Nu TH1 l 8 bit thỡ TH2 cng phi 8 bit v ngc li.
-Nu TH2 L 16 bit thỡ TH1 cung phi 16 bit v ngc li.
Tp lnh CPU-8086 c sp xp theo cỏc nhúm nh sau:
Sao chộp d liu v a ch
Tớnh toỏn s hc
Tớnh toỏn lụgic, ghi dch v quay
Truy xut ngoi vi
Lnh h thng
R nhỏnh v vũng lp
Chng trỡnh con
X lý chui
Trang 13
Page | 14
II. Các Tập lệnh
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, Reg16
MOV Reg16, SegReg
Nguồ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=CX
MOV DX, 1234h ; DL34h, DH12h
MOV DS, AX ; DS  AX
MOV AH, [1234h] ; AHM[ 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:1237h
DS:1236h
DS:1235h
DS: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.
Trang 14
DH DL
Page | 15

Ý 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]; ALM[DS:12345h],
AHM[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:1A2C6h
bienA DS:1A2Bh
DS:1A2Ah
DX
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
Cú pháp: ADD Nguồn, Đích ; đích  đích

+ nguồ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
Cú pháp: SUB Nguồn, Đích ; đích  đích


- nguồn
Nguồn: Reg, Mem, Immed.
Đích: Reg, Mem.
Trang 15
1Ah 2Bh
Page | 16
Ý 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 ; ALAL+15
ADD AX, DX ; AXAX+DX
SUB BX, 15h ; BXBX-15h
SUB 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)
Cú pháp: DEC đích ; đíchđích-1
Đích: Reg, Mem.
Ý nghĩa: giảm nôi dung của toán hạng đích đi 1 đơn vị.
Ví dụ: INC AL ; ALAL+1
DEC AX ; AXAX-1
 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 ; AXAL*BL (nhân 8 bit)
MUL BX ; DX:AXAX*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
Trang 16
Page | 17
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, AHAX÷DL
DIV BX ;AX,DXDX: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
cú pháp: AND đích, nguồn ; đích đích ∧ nguồn
OR đích nguồn ; đích đích ∨ nguồn
XOR đích nguồn ; đích đích ⊕nguồn
TEST đích nguồn ; cờ đích ∧ nguồn
Nguồn: Reg, Mem, Immed.
Đích: Reg, Mem.

Ý nghĩa: thực hiện phép toán logic (and, or, xor) theo từng bit tương ứng giữa toán
hạng đích và toán hạng nguồn, lưu giữ kết quả ở toán hạng đích.
-Lệnh TEST thực hiện kiểm tra bit, giống lệnh AND nhưng không giữ lại
kết quả mà kết quả của phép toán chỉ ảnh hưởng tới các cờ trạng thái.
Ví dụ: MOV AL, 01101110b ; AL01101110b
AND AL, 01101110b ; AL AL ∧01101110b (AL=01101110b)
XOR AX, AX ; AX AX ⊕AX (kết quả AX=0)
TEST DH, 01101110b ; Kiểm tra giá trị của 4 bit trong thanh ghi DH. Kết
quả kiểm tra sẽ ảnh hưởng tới cờ zero (ZF)
 NOT- đảo bit (lấy bù 1)
Cú pháp: NOT đích ; đíchđích
Đích: Reg, Mem
Trang 17
Page | 18
Ý nghĩa: đảo ngược từng bít (lấy bù 1) toán hạng đích
Ví dụ: MOV AH, 0Fh : AH0Fh (00001111b)
NOT AH ; AH0F0h (11110000b)
 SHL- dịch trái logic
Cú pháp: SHL đích, 1 ; dịch toán hạng đích sang trái 1 bit
SHL đích, CL ; dịch sang trái CL bit
Đích: Reg, Mem
Ý nghĩa: Dịch toán hạng đích sang trái, có thể dịch 1 bit hoặc nhiều hơn (CL chứa số
bit dịch). LSB được nạp vào logic 0, con MSB được dịch sang cờ Carry
(CF)
CF 7 2 1 0
0
Hình3: Dịch toán hạng đích bit sang trái 1 bit
Ví dụ: MOV AL, 01101101b ; AL= 01101101b
SHL Al, 1 ; AL=11011010b và CF=0
 SHR- dịch phải logic

Cú pháp: SHR đích,1 ; dịch phải toán hạng đích 1 bit
SHR đích, CL ; dịch sang phải toán hạng đích CL bit
Đích: Reg, Mem
Ý nghĩa: giống hệt SHL nhưng bây giờ dịch toán hạng đích sang phải
7 6 1 0 CF
0
Hình4: dịch toán hạng đích 8 bit sang phải 1 bit
Ví dụ: MOV AL, 01101101b ; AL=01101101b
SHR AL,1 ; AL=00110110b và CF=1
 SAL- Dịch trái số học
Cú pháp: SAL đích,1 ; dịch toán hạng đích sang trái 1 bit
SAL đích, CL ; dịch toán hạng đích sang trái CL bit
Đích: Reg, Mem
Trang 18
Page | 19
Ý nghĩa: Lệnh này giống SHL nhưng LSB (bit thấp nhất) vừa được dịch lên bít 1 và
giữ nguyên (bảo toàn bit 0).
CF 7 2 1 0
Hình5: dịch toán hạng đích sáng trái 1 bit
Ví dụ: MOV AL, 01101101b ; AL= 01101101b
SAL Al, 1 ; AL=11011010b và CF=0
 SAR- Dịch phải số học
Cú pháp: SAR đích,1 ; dịch phải toán hạng đích 1 bit
SAR đích, CL ; dịch sang phải toán hạng đích CL bit
Đích: Reg, Mem
Ý nghĩa: Lệnh này giống SHR nhưng MSB (bit cao nhất) vừa được dịch xuống bít
thấp hơn và giữ nguyên (bảo toàn bit MSB- bit dấu).
7 6 0 CF
Hình6: dịch toán hạng đích 8 bit sang phải 1 bit
Ví dụ: MOV AL, 01101101b ; AL=01101101b

SAR AL,1 ; AL=00110110b và CF=1
 ROL-Quay vòng sang trái
Cú pháp: ROL đích,1 ;quay vòng toán hạng đích sang trái 1 bit
ROL đích,CL ; quay vòng toán hạng đích sang trái CL vòng
Ý nghĩa: Giống SHL, nhưng thực hiện việc quay vòng, MSB dịch vào LSB
CF 7 2 1 0
Hình7:quay toán hạng đích 8 bit sang trái 1 bit.
 ROR- Quay vong sang phải
Cú pháp: ROR đích,1 ;quay vòng toán hạng đích sang phải 1 bit
Trang 19
Page | 20
ROR đích,CL ; quay vòng toán hạng đích sang phải CL vòng
Ý nghĩa: Giống ROL, nhưng quay vòng sang phải, LSB vừa được dịch đến MSB
7 6 0 CF
Hình8: Quay vòng toán hạng đích 8 bit sang phải 1 bit
 RCL- Quay trái qua cờ carry
Cú pháp : RCL Đích,1 ; quay vòng toán hạng qua cờ sang trái 1 bit
RCL đích,CL ; quay vòng qua cờ sang trái số vòng bằng CL
Ý nghĩa : giống như ROL, nhưng có sự tham gia của cờ carry (CF). Xem
hình 9. Như vậy CF cũng là 1 bit tham gia vào vòng quay
CF 7 2 1 0
Hình9 : Quay toán hạng đích 8 bit qua cờ sang trái 1 bit.
 RCR- Quay vòng qua cờ sang phải
Cú pháp : RCR Đích,1 ; quay vòng toán hạng qua cờ sang phải 1 bit
RCR đích,CL ; quay vòng qua cờ sang phải số vòng bằng CL
Đích: Reg, Mem
Ý nghĩa : giống như RCL, nhưng quay vòng sang phải
7 6 0 CF
Hình10 : Quay toán hạng đích 8 bit qua cờ sang phải 1 bit.
4. Lệnh ra vào ngoại vi

 IN- lấy số liệu từ ngọa vi
Cú pháp: IN AL , địa chỉ cổng 8 bit
IN AL,DX ;DX chứa địa chỉ cổng 16 bit
Ý nghĩa: lấy dữ liệu ở ngoại vi có địa chỉ 8 bit đưa vào thanh ghi AL. Nếu địa chỉ của
ngoại vi là 16 bit thì phảo dùng DX để lưu địa chỉ này
Ví dụ: - Đọc dữ liệu ở ngoai vi 3Fh
IN AL,3Fh ;AL  port(3Fh) (3Fh là địa chỉ cổng 8 bit)
- Đọc dữ liệu ở ngoại vi 3F8h
MOV DX,3F8h ; DX 3F8h (3F8h là địa chỉ cổng 16 bit)
IN AL,DX ;ALport(DX)
 OUT- Đưa số liệu ra ngoại vi
Cú pháp: OUT địa chỉ cổng 8 bit, AL ; port(8 bit) AL
Trang 20
Page | 21
OUT DX, AL ;DX chứa địa chỉ cổng 16 bit ; port(DX) AL
Ý nghĩa: Giống IN nhưng là xuất dữ liệu trong AL ra ngoại vi
Ví dụ: MOV DX,04A5h ; DX04A5h
OUT DX, AL ; port(DX) AL
5. Lệnh hệ thống
Nhóm lệnh hệ thống bao gồm các lệnh điều khiển hoạt động của CPU hay thiết
lập các giá trị cờ. Các lệnh này không có toán hạng do đó cú pháp của lệnh rất đơn
giản chỉ gồm các tác vụ lệnh sau:
CLC (clear carry flag) : Xóa cờ CF (CF=0)
CMC (complement carry flag) :Đảo ngược cờ
CLD (clear diresion flag) :Xóa cờ hướng (DF=0)
STD (set diresion flag) : Đặt cờ hướng (DF=1)
CLI (clear interrupt flag):Xóa cờ ngắt (IF=0)
STI (set interrupt flag): Đặt cờ ngắt (IF=0)
HLT ( halt ) :Dừng mọi hoạt động của CPU (treo máy)
INT (interrupt) : Gọi ngắt phần mềm

IRET (– return from interrupt) : Trở về chương trình chính từ chương trình
phục vụ ngắt
LOCK; Khóa BUS ngoài. CPU sẽ không giao tiếp với BUS
NOP ( No operation) : Không có tác vụ
WAIT; Tạm dừng CPU cho đến khi có tín hiệu điện ở chân TEST của CPU-
8086 thì hoạt động tiếp
6. Lệnh vòng lặp
Vòng lặp là đoạn chương trình được thực hiện nhiều lần cho đến khi thỏa
mãn một điều kiện nào đó thì dừng lại, do đó vòng lặp thường được kết thúc
bằng một vòng lặp có điều kiện. Tuy nhiên ngoài các lệnh đã biết Inter 8086
còn cung cấp thêm các lệnh vòng lặp như LOOP, LOOPE, LOOPZ, LOOPNE,
LOOPNZ…các lệnh này đều có cú pháp giống nhau.
Cú pháp: LOOP đích
Đích : Reg, Mem, Immed
Ý nghĩa: tự động giảm CX một đơn vị, nếu CX khác 0 thì nhảy đến đích, ngược lại
nếu CX=0 thì không nhảy đến đích mà thực hiện lếnh sau LOOP. Nói cách
khác vòng lặp LOOP dừng lại khi CX=0. Đây là vòng lặp for có số lần lặp
lưu trữ trong CX.
Cấu trúc vòng lặp for viết bằng LOOP:
MOV CX,n ;n là số lần lặp
Nhan : ; các lệnh cần lặp nhan

LOOP nhan
Ví dụ : đoạn lệnh in ra màn hình các ký tự rừ
A  Z
MOV DL, ‘A’ ; DL ‘A’
MOV CX, 26 ; AZ;26 ký tự
inkytu MOV AH,02h
INT 21h
INC DL; DL tăng lên 1 để có ký tự kế S

Trang 21
Các lệnh cần lặp
CXCX-1
CX=0
CXn
Page | 22
LOOP inkytu
Hỡnh: lu loop
LOOPZ\LOOPE
T ng gim CX mt n v, nu CX khỏc 0 v
ZF=1 thỡ nhy n ớch thc hin lnh, Ngc
li nu CX=0 hay ZF=0 thỡ khụng nhy, khi ú
lnh vit sau lnh nhy c thc hin.
d
Cu trỳc vũng lp dowhile vit bng LOOPZ nhón
MOV CX, n
nhan: <cỏc lnh cn lp>
LOOPZ nhan
S

S

Hỡnh: Lu LOOPE/LOOPZ
Lu ý: Khi s dng cỏc vũng lp cn chỳ ý n giỏ tr ca CX
- Nu CX=0, vỡ LOOP gim CX trc khi kim tra nờn khi thc hin lnh
LOOP thỡ CX= CX-1=0-1= -1 =0FFFFh. Nh vy LOOP s thc hin
thờm 65535 ln na.
- Lnh JCXZ nhy khi CX=0 thng c dựng kim tra giỏ tr CX trc
khi thc hin vũng lp.
7. Lnh gi chng trỡnh con

CALL (call: gọi): lệnh gọi chơng trình con.
CALL Nhản (hoặc tên chơng trình con)
Lệnh gọi chơng trình con là một lệnh đặc biệt vì trớc khi nhảy tới nhãn thì CPU tự
động lu địa chỉ trở về (là địa chỉ sau lệnh CALL) vào ngăn xếp.
RET (return: trở về). Lệnh kết thúc chơng trình con.
Khi gặp lệnh này thì CPU 8086 lấy địa chỉ trở về ở ngăn xếp để tiếp tục thi hành
lệnh ở chơng trình chính.
Ví dụ: Chơng trình sau sử dụng Macro, Procedure.
INCHU Macro
Trang 22
CX s ln lp
Cỏc lnh cn lp
CXCX-1
CX # 0
ZF=1?
Page | 23
mov ah,02
mov dl, 'A'
int 21h
ENDM
dulieu segment
thongbao db 'hello!$'
dulieu ends
malenh1 segment
P2 Proc far
mov ah,02
mov dl, 'C'
int 21h
ret
P2 Endp

malenh1 ends
malenh2 segment
malenh group malenh1, malenh2
assume cs: malenh, ds: dulieu
batdau: mov ax, dulieu
mov ds, ax ; khoi dong
lea dx, thongbao ; in thong bao nhap chuoi
mov ah, 09h
int 21h
inchu ;goi macro
call pinchu ;goi ctrinh con
call p2;goi ctrinh con
mov ah, 4ch
int 21h
PINCHU Proc near
mov ah,02
Trang 23
Page | 24
mov dl, 'B'
int 21h
ret
PINCHU Endp
malenh2 ends
end batdau
Nhãm lÖnh dÞch chuyÓn vµ quay
8. Lệnh xử lý chuỗi
Khái niệm chuỗi trong máy tính không giới hạn ở chuỗi kí tự, mà là khái niệm
mảng gồm nhiều phần tử, kiểu kí tự của mảng là byte hay word. Các phần tử có
thể chứa số liệu hay ký tự. Do đó các lệnh thao tác trên chuỗi cho phép thao tác
trên các mảng hay bất kì vùng đệm dữ liệu nào.

Chuỗi lưu trữ trong bộ nhớ có địa chỉ đầu và địa chỉ cuối chính là địa chỉ của
phần tử đầu tiên và phần tử cuối trong chuỗi. Như vậy thông số của 1 chuỗi trong
bộ nhớ bao gồm: Địa chỉ đầu, địa chỉ cuối, số phần tử của chuỗi phải thỏa mãn
công thức sau.
(Số byte của phần tử x số phần tử)= ĐC cuối – ĐC đầu +1
Trong đó: (Số byte của phần tử x số phần tử)= số byte của chuỗi.
Hình: mô tả chuỗi gồm 14 phần tử, mỗi phần tử là 1 byte được lưu trữ trong
bộ nhớ bắt đầu tại địa chỉ 12h.
Đầu chuỗi 14 phần tử (14 byte nhớ) Cuối chuỗi
0 1 2 3 4 5 6 7 8 9 10 11 12 13
12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh
Hình: Chuỗi trong bộ nhớ.
Intel-8086 cung cấp nhiều lệnh xử lí chuỗi để thực hiện các thao tác như:
chuyển chuỗi, so sánh chuỗi, dò tìm trong chuỗi…Khi sử dụng những lệnh này
thì việc viết chương trình sẽ ngắn hơn và thi hành nhanh hơn là sử dụng các lệnh
MOV, CMP…trong các thao tác chuỗi. các lệnh xử lý chuỗi gồm 3 nhóm trong
bảng 7.1
Các lệnh xử lý chuỗi không có toán hạng trên dòng lệnh, nên việc sử dụng các
toán hạng mặc nhiên phải tuân thủ quy định của từng lệnh.
Trang 24
Địa chỉ đầu chuỗi Địa chỉ cuối chuỗi
Page | 25
LỆNH Ý NGHĨA
Nhóm di chuyển chuỗi
MOVSB Di chuyển chuỗi từng byte ( Move String Byte)
MOVSW Di chuyển chuỗi từng word ( Move String Word)
LODSB Nạp chuỗi từng byte ( Load String Byte)
LODSW Nạp chuỗi từng word ( Load String Word)
STOSB Ghi chuỗi từng byte (Store String Byte)
STOSW Ghi chuỗi từng word ( Store String Word)

Nhóm so sánh chuỗi
CMPSB So Sánh chuỗi từng byte (Compare String Byte)
CMPSW So Sánh chuỗi từng word ( Compare String Word)
Nhóm dò tìm giá trị trong chuỗi
SCASB Dò tìm trong chuỗi từng byte (Scan String Byte)
SCASW Dò tìm trong chuỗi từng word ( Scan String Word)
Bảng: Lệnh xử lý chuỗi.
Cách dùng các lệnh giống nhau và thường trải qua các bước sau:
Bước1: Xác định chiều xử lý chuỗi.
DF=0: chuỗi xử lý theo chiều địa chỉ tăng.
DF=1: chuỗi xử lý theo chiều địa chỉ giảm.
Bước2: Số lượng phần tử cần xử lý được nạp vào thanh ghi đếm CX.
Bước3: Đưa địa chỉ của chuổi vào đúng vị trí.
Địa chỉ chuỗi nguồn đưa vào DS:SI.
Địa chỉ chuỗi đích đưa vào ES:DI.
Bước4: Chọn một vòng lặp thích hợp REP, REPE, REPENE.
Lệnh REP (repeat): lặp lại lệnh theo sau nó đến khi CX=0.
Lệnh REPE (repeat if equal): lặp lại lệnh theo sau nó nếu ZF=0.
Lệnh REPENE ( repeat if not equal): lặp lại lệnh theo sau nó nếu ZF=0.
Bước5: Đặt lệnh xử lý chuỗi thích hợp.
CÁC KIỂU ĐỊNH VIỊ CỦA CPU 8086
Tùy vào toán hạng CPU 8086 cung cấp các kiểu định vị sau:
- Định vị tức thì
- Định vị thanh ghi
- Định vị trực tiếp
- Định vi gián tiếp
- Định vị nền
Trang 25

×