You are on page 1of 101

BÀI GIẢNG MÔN HỌC

KỸ THUẬT VI XỬ LÝ
Giáo viên giảng dạy : Chu Thị Ngọc Quỳnh
Bộ môn : Điện tử máy tính
Khoa : Điện tử - Viễn thông
Điện thoại DĐ : 0988831450
Email : ctnquynh@gmail.com
NỘI DUNG MÔN HỌC

TỔNG QUAN VỀ BỘ VI XỬ LÝ VÀ HỆ VI XỬ LÝ

BỘ VI XỬ LÝ INTEL 8086

GHÉP NỐI 8086 VỚI BỘ NHỚ VÀ THIẾT BỊ NGOẠI VI

CÁC PHƯƠNG PHÁP VÀO RA DỮ LIỆU

MỘT SỐ BỘ VI XỬ LÝ THÔNG DỤNG


CHƯƠNG 1: TỔNG QUAN VỀ BỘ VI XỬ LÝ VÀ HỆ VI XỬ LÝ

1.1. BỘ VI XỬ LÝ
Khái niệm về quá trình phát triển

Phân loại bộ vi xử lý

Cấu trúc và hoạt động của bộ vi xử lý

1.2. HỆ VI XỬ LÝ
Cấu trúc phần cứng

Phần mềm

Hoạt động của hệ vi xử lý

Các bước thiết kế một hệ vi xử lý


BỘ VI XỬ LÝ

Bộ vi xử lý (MP-Microprocessor) là
một vi mạch logic chế tạo theo công
nghệ LSI cho đến VLSI, hoạt động
dưới sự điều khiển của chương trình
đặt trong bộ nhớ. Bộ vi xử lý là hạt
nhân của hệ vi xử lý, kiểm soát toàn
bộ các thành phần có trong hệ thống,
thực hiện các phép toán số học, logic,
đưa ra các quyết định và thông tin với
thế giới bên ngoài qua các cổng
vào/ra dưới sự điều khiển của chương
trình cài đặt trong bộ nhớ.
Bộ vi xử lý đầu tiên của Intel là
4004, được giới thiệu vào năm
1971. Bộ vi xử lý này xử lý dữ
liệu 4 bit và có 45 lệnh.
4004 chứa 2300 transistor.
Bộ vi xử lý Pentium 4 chứa 55
triệu transistor.
Bộ vi xử lý mới nhất hiện nay là
core i9 dùng cho các máy tính
để bàn PC
QUÁ TRÌNH PHÁT TRIỂN

GIAI ĐOẠN 1971-1973

• Intel cho ra đời bộ vi xử lý 4004 với độ dài từ là 4 bít.


• Tốc độ thực hiện lệnh: 10-16us/lệnh với tần số đồng hồ Fclk = 0,1-
0,8Mhz.

GIAI ĐOẠN 1974-1977

• Các bộ vi xử lý đại diện cho thế hệ này là 8 bít: 8080 và 8085 của
intel, z80 của Zilog…
• Tốc độ từ 1-8us/lệnh với tần số đồng hồ Fclk = 1-5Mhz.
GIAI ĐOẠN 1978-1982

• Các bộ VXL đại diện cho thế hệ này 16 bít: 8086/80186/80286 của
intel, 86000/86100 của motorola.
• Tốc độ đạt từ 0,1-1us/lệnh với tần số đồng hồ Fclk = 1-10MHZ.

GIAI ĐOẠN 1983 - 1999

• Các bộ vi xử lý trong thế hệ này là 32 bít 80386/80486 và 64 bít


pentium của intel.
GIAI ĐOẠN 2002 - 2006

• Các vi xử lý intel trong thời gian này thể hiện quan điểm nâng
cao hiệu năng của bộ vi xử lý và hệ thống máy tính bằng việc
nâng cao xung nhịp. Phiên bản Pentium 4 đã tăng xung nhịp từ
1,5Ghz năm 2000 tới 3 Ghz năm 2002.

• Một sự kiện quan trọng trong giai đoạn này là sự ra đời của các
bộ vi xử lý 2 nhân cho các máy vi tính. Năm 2005 Intel đưa ra vi
xử lý đa nhân đầu tiên Pentium D với hai nhân vi xử lý riêng
biệt trên cùng một vi mạch.
GIAI ĐOẠN 2007 ĐẾN NAY

• Giai đoạn này các hãng Intel hay AMD tiếp tục ra tăng số nhân
bên trong bộ vi xử lý.

• Intel giới thiệu vi kiến trúc nhân thay thế vi kiến trúc netburst và
đưa ra bộ vi xử lý 2 nhân thế hệ mới Core-2.

• Phát triển dòng vi xử lý nhúng cho các thiết bị tính toán các
nhân. Ưu thế của các vi xử lý nhúng so với vi xử lý kể trên là
mức tiêu thụ điện năng, năng lực xử lý và chi phí.
PHÂN LOẠI BỘ VI XỬ LÝ

• Bộ vi xử lý đa năng: bao gồm tất cả các


phần tử tính toán trên một chip (trừ bộ nhớ
và các cổng vào ra)
• Bộ vi xử lý on – chip: bao gồm cả bộ nhớ
và các cổng vào ra.
CẤU TRÚC VÀ HOẠT ĐỘNG CỦA BỘ VI XỬ LÝ
KHỐI ĐỆM VÀ GIẢI MÃ LỆNH

• Khối đệm lệnh: gồm 1 hay vài thanh ghi tùy theo từng loại bộ
vi xử lý để chứa tạm thời các byte lệnh trước khi đưa vào giải
mã lệnh.

• Khối giải mã lệnh: chức năng giải mã byte mã lệnh, xác định
thao tác của lệnh để đưa thông tin đến khối điều khiển. Các
thông tin này là các vi lệnh hay vi chương trình.
KHỐI ĐIỀN KHIỂN (CU – Control Unit

 Điều khiển và đồng bộ toàn bộ hoạt động của hệ thống,


nhiệm vụ của khối là:

 Nhận tín hiệu xung đồng bộ từ bên ngoài để đồng bộ hoạt


động của CPU.

 Điều khiển hệ thống thực hiện lệnh khi chạy một chương
trình.

 Nhận tín hiệu yêu cầu điều khiển từ bên ngoài, tạo ra tín
hiệu điều khiển đáp ứng yêu cầu đó.
CÁC THANH GHI (REGISTERS)
 Thanh ghi là nơi mà bộ vi xử lý có thể lưu trữ được một
số nhị phân (Kích cỡ của thanh ghi tính bằng bit).

 Bộ vi xử lý dùng các thanh ghi để lưu trữ dữ liệu tạm


thời trong quá trình thực hiện chương trình.

 Các thanh ghi có thể được truy cập bằng các câu lệnh
ngôn ngữ máy.

 Các thanh ghi điều khiển và các thanh ghi trạng thái được
CU dùng để điều khiển việc thực hiện chương trình.
CÁC THANH GHI CƠ BẢN

 Thanh ghi lệnh: chức năng lưu mã lệnh đang thực hiện. Mã lệnh
được nạp vào bộ vi xử lý và lưu vào thanh ghi lệnh. Kích cỡ của
VXL quyết định kích cỡ của thanh ghi này.

 Thanh ghi điều chỉnh bộ nhớ: Chứa địa chỉ dữ liệu VXL, sử
dụng địa chỉ này như là các con trỏ trực tiếp tới bộ nhớ. Nội
dung của ô nhớ có địa chỉ này chính là dữ liệu được trao đổi và
xử lý.

 Thanh ghi tích lũy: kích thước 8,16,32,64 bit thường dùng để
lưu kết quả tính toán của đơn vị xử lý số học và logic ALU,
dùng để trao đổi dữ liệu với các thiết bị vào ra.
KHỐI SỐ HỌC VÀ LOGIC (ALU

 ALU(Arithmetic and logic unit):


Kích cỡ ALU tương ứng với kích cỡ của VXL.
Chức năng:
Thực hiện các phép toán số học và các phép toán logic
(AND, OR, NOT, XOR)
Tính số bù của một dữ liệu.
Dịch hoặc quay trái các thanh ghi dùng chung.
BUS TRUYỀN THÔNG TIN

 Bus: tập hợp các đường kết nối dùng để vận chuyển
thông tin giữa các thành phần.
 Độ rộng bus: là số đường dây của bus có thể truyền

thông tin đồng thời. Tính bằng bit.


 Phân loại bus theo chức năng:

◦ Bus địa chỉ (Address Bus)


◦ Bus dữ liệu (Data Bus)
◦ Bus điều khiển (Control Bus)
BUS ĐỊA CHỈ

 Chức năng: vận chuyển địa chỉ từ bên trong bộ vi xử lý


đến bộ nhớ chính hay mạch nối ghép vào-ra để xác
định ngăn nhớ hay cổng vào-ra cần trao đổi thông tin.
 Độ rộng bus địa chỉ: xác định dung lượng bộ nhớ cực

đại của hệ thống.


 Nếu độ rộng bus địa chỉ là N bit (gồm N đường dây A
N-

1, AN-2, ... , A2, A1, A0) thì:


 có khả năng vận chuyển được N bit địa chỉ đồng thời
 có khả năng đánh địa chỉ tối đa được 2N ngăn nhớ = 2N Byte
 gọi là không gian địa chỉ bộ nhớ.
VÍ DỤ

 Độ rộng bus địa chỉ của một số bộ vi xử lý của Intel:


 8088/8086 : N = 20 bit  KGĐCBN = 220 Byte = 1 MB
 80286 : N = 24 bit  KGĐCBN = 224 Byte = 16 MB
 80386, 80486, Pentium : N = 32 bit  KGĐCBN = 232
Byte = 4 GB
 Pentium II, III, 4 : N = 36 bit  KGĐCBN = 236 Byte =
64 GB
BUS DỮ LIỆU

 Chức năng:
◦ Vận chuyển lệnh từ bộ nhớ chính đến bộ vi xử lý.
◦ Vận chuyển dữ liệu giữa các thành phần của hệ vi xử lý với
nhau.
 Độ rộng bus dữ liệu: Xác định số bit dữ liệu có thể
được trao đổi đồng thời.
◦ Nếu độ rộng bus dữ liệu là M bit (gồm M đường dây
DM-1, DM-2, ... , D2, D1, D0) thì nghĩa là đường bus dữ liệu đó
có thể vận chuyển đồng thời được M bit dữ liệu.
◦ M thường là 8, 16, 32, 64 bit.
VÍ DỤ

 Độ rộng bus dữ liệu của một số bộ vi xử lý của Intel:


◦ 8088 : M = 8 bit
◦ 8086, 80286 : M = 16 bit
◦ 80386, 80486 : M = 32 bit
◦ Các bộ xử lý Pentium : M = 64 bit

Copyright (c) 1/2007 by DTB 21


BUS ĐIỀU KHIỂN

 Chức năng: vận chuyển các tín hiệu điều khiển


 Các loại tín hiệu điều khiển:

◦ Các tín hiệu điều khiển phát ra từ bộ vi xử lý để


điều khiển bộ nhớ chính hay mạch nối ghép vào-ra.
◦ Các tín hiệu yêu cầu từ bộ nhớ chính hay mạch nối
ghép vào-ra gửi đến bộ vi xử lý.

Copyright (c) 1/2007 by DTB 22


HOẠT ĐỘNG CHUNG CỦA BỘ VI XỬ LÝ

 Các trạng thái hoạt động của một bộ vi xử lý:


 Trạng thái thực hiện chương trình: Là trạng thái mà bộ vi
xử lý đọc từng lệnh từ bộ nhớ vào, giải mã thực hiện
lệnh và bảo vệ kết quả.
 Trạng thái ngắt: là trạng thái mà bộ vi xử lý chuyển từ
chương trình chính sang chương trình con phục vụ một
yêu cầu ngắt nhằm mục đích trao đổi dữ liệu với thiết bị
ngoại vi hoặc xử lý các sự cố.
 Trạng thái bus nghỉ: là trạng thái bus không hoạt động
bao gồm các dạng: trạng thái thả nổi, trạng thái đợi, trạng
thái dừng.
1.2. HỆ VI XỬ LÝ

Các Các thiết bị


chương Hệ thống mạch xuất nhập và
trình phần điện tử số chấp hành
mềm điều khiển
MÔ HÌNH PHẦN CỨNG HỆ THỐNG VXL

Bus địa chỉ (N bit)

Các thiết bị vào


Bộ nhớ Mạch nối
(ROM, ghép
Bộ vi xử lý RAM) vào-ra
(CPU)
Ngăn nhớ Cổng vào-ra

Thanh ghi Các thiết bị ra


Bus điều khiển

Bus dữ liệu (M bit)


CÁC THÀNH PHẦN CƠ BẢN PHẦN CỨNG
HỆ THỐNG VXL
 Bộ VXL hay còn gọi là khối xử lý trung tâm: có vai trò
thực hiện tất cả các lệnh mà chương trình yêu cầu, quyết
định sự hoạt động của các linh kiện trong mạch.
 Khối bộ nhớ: Được thực hiện bằng các chip nhớ bán dẫn
ROM hoặc RAM, lưu trữ chương trình cung cấp cho VXL
thực hiện. Ngoài ra nó còn sử dụng lưu trữ các biến trung
gian cũng như cuối cùng trong các quá trình tính toán.
 Các cổng I/O được thực hiện bằng các chip MSI hoặc
LSI, là phần mạch giao tiếp giữa vi xử lý với các thiết bị
I/O. Bộ vi xử lý cũng phân biệt các cổng I/O theo địa chỉ
của chúng.
BỘ NHỚ CHÍNH

 Chức năng: chứa các chương trình và dữ liệu mà bộ


vi xử lý có khả năng trao đổi trực tiếp.

 Được tổ chức thành các ngăn nhớ (thường theo Byte)


◦ Mỗi ngăn nhớ có một địa chỉ xác định.
◦ Bộ vi xử lý muốn trao đổi thông tin với ngăn nhớ
nào thì phải biết địa chỉ của ngăn nhớ đó.
 Bộ nhớ chính được thiết kế trên cơ sở gồm:
◦ ROM (Read Only Memory):
 Bộ nhớ không khả biến.
 Chứa các chương trình và dữ liệu cố định
với hệ thống.
◦ RAM (Random Access Memory):
 Bộ nhớ khả biến.
 Chứa các thông tin tạm thời.
HỆ THỐNG VÀO RA

 Chức năng: Trao đổi thông tin giữa hệ vi xử lý với thế


giới bên ngoài.
 Các thành phần chính:

◦ Các thiết bị ngoại vi:


 Chuyển đổi dữ liệu giữa bên trong và bên ngoài hệ vi xử lý.
◦ Các mạch nối ghép vào-ra:
 Nối ghép giữa thiết bị ngoại vi với hệ vi xử lý.
 Trên mạch nối ghép vào-ra có các cổng vào-ra (I/O Port).
 Mỗi cổng vào-ra cũng được đánh một địa chỉ xác định.
 Thiết bị ngoại vi được kết nối và trao đổi dữ liệu với hệ vi xử lý
thông qua các cổng vào-ra.
KIẾN TRÚC PHẦN MỀM
NGÔN NGỮ MÁY

 Mỗi bộ vi xử lý có khả năng thực hiện được một tập


hữu hạn các thao tác xác định.
 Mỗi thao tác được mã hóa bằng một lệnh máy

(instruction – còn gọi là chỉ thị).


 Mỗi lệnh máy được mã hóa bằng một chuỗi số nhị

phân.
 Ngôn ngữ chương trình duy nhất mà máy tính hiểu

được ngôn ngữ máy.


 Lập trình trực tiếp bằng ngôn ngữ máy rất vất vả và
dễ xảy ra sai sót.
HỢP NGỮ (ASSEMBLY LANGUAGE

 Là ngôn ngữ lập trình gần với ngôn ngữ máy nhất.
 Sử dụng các kí hiệu gợi nhớ để biểu diễn các lệnh máy.
 Chương trình dịch hợp ngữ sang ngôn ngữ máy gọi là

hợp dịch (Assembler).


 VD:

◦ Ngôn ngữ máy (của bộ vi xử lý Intel 8088):


00000101 00000100 00000000 ; cộng 4 vào AX
◦ Hợp ngữ:
ADD AX, 4 ; cộng 4 vào AX
NGÔN NGỮ LẬP TRÌNH BẬC CAO
 Cho phép người lập trình viết các chương trình gần với ngôn ngữ tự nhiên
hơn so với hợp ngữ.
 Chương trình viết bằng NNLT bậc cao gọi là chương trình nguồn (source
code).
 Chương trình chuyển từ chương trình nguồn sang ngôn ngữ máy gọi là
chương trình dịch.
◦ Chương trình biên dịch (compiler):
 Dịch toàn bộ chương trình nguồn sang mã máy.
 Nếu chương trình nguồn có lỗi thì sẽ ngừng việc biên dịch.
◦ Chương trình thông dịch (interpreter):
 Dịch từng lệnh của chương trình nguồn (và thực hiện)
 Nếu chương trình nguồn có lỗi thì vẫn thực hiện CT cho đến khi gặp
lỗi.
 Ngôn ngữ lập trình trực quan (visual programming language): giúp việc
xây dựng chương trình nhanh chóng và trực quan hơn.

Copyright (c) 1/2007 by DTB 33


PHẦN MỀM HỆ THỐNG

 Là các chương trình điều khiển chung của hệ thống,


bao gồm:
◦ Các chương trình điều khiển được cài đặt sẵn trong bộ nhớ
ROM của hệ vi xử lý.
◦ Hệ điều hành: tập hợp các chương trình, đảm bảo:
 Điều khiển việc thực thi các chương trình khác.
 Quản lý, phân phối tài nguyên của hệ thống.
 Điều khiển các thiết bị và quá trình vào-ra.
 Cung cấp giao diện người dùng.
◦ Các chương trình tiện ích: hỗ trợ thêm cho hệ điều hành.

Copyright (c) 1/2007 by DTB 34


PHẦN MỀM ỨNG DỤNG

 Là các chương trình chạy trên một hệ điều hành cụ thể,


phục vụ cho các ứng dụng cụ thể.

 Ví dụ: một số phần mềm ứng dụng chạy trên hệ điều


hành Microsoft Windows:
◦ Ứng dụng văn phòng: Microsoft Word, Excel, …
◦ Ứng dụng Internet: Internet Explorer, Outlook Express, Opera,

◦ Ứng dụng xử lý ảnh: Photoshop, Corel Draw, …

Copyright (c) 1/2007 by DTB 35


THIẾT KẾ MỘT HỆ VI XỬ LÝ

 Gồm 4 bước:
 Bước 1: Phân tích chức năng nhiệm vụ của hệ vi xử lý cần

thiết kế.
 Bước 2: Tổ chức phần cứng cho hệ vi xử lý cần thiết kế.
 Bước 3: Xây dựng phần mềm cho hệ vi xử lý cần thiết kế.
 Bước 4: Nạp chương trình cho hệ vi xử lý là hiệu chỉnh hệ

thống.
CHƯƠNG 2: BỘ VI XỬ LÝ INTEL 8086

CẤU TRÚC BÊN TRONG BỘ VI XỬ LÝ 8086

TẬP LỆNH CỦA BỘ VI XỬ LÝ 8086

LẬP TRÌNH HỢP NGỮ CHO 8086


CẤU TRÚC BÊN TRONG BỘ VI XỬ LÝ 8086
Địa chỉ 20 bit,
AH AL
d.liệu 16 bit
BH BL
CH CL
DH DL
SP CS
BP DS
SI SS
DI ES
IP

Khối điều
khiển Bus
Các thanh ghi tạm thời Bus
ngoài

Điều khiển
ALU EU

Hàng đợi lệnh


Thanh ghi cờ

EU (Ecutive unit) BIU (bus interface unit)

Sơ đồ khối của bộ vi xử lý 8086


KHỐI GIAO TIẾP BUS (BIU)

 Chức năng:
◦ BIU cung cấp các tín hiệu địa chỉ, dữ liệu và điều khiển để truy
cập tới bộ nhớ và các thiết bị vào ra.
◦ Chức năng quan trọng nhất của BIU 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.
◦ 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.
 BIU bao gồm:
◦ Các thanh ghi đoạn (Registes Segment).
◦ Con trỏ lệnh IP (Instruction Pointer).
◦ Bộ điều khiển logic BUS (Bus Control logic-BCL)
◦ Giao diện BIU con có bộ nhớ đệm cho mã lệnh, bộ nhớ này có
chiều dài 6 byte.
KHỐI THỰC HIÊN LỆNH (EU)

 Chức năng: EU 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ã
thực hiện lệnh.

 EU bao gồm:
◦ Khối điều khiển (CU – Control Unit):
◦ Khối số học và logic(ALU – Arithmatic and Logic Unit)
◦ Các thanh ghi đa năng (dữ liệu) và thanh ghi cờ.
 Khối điều khiển CU: 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
bộ giải mã. Các thông tin thu được từ đầu ra của nó sẽ
được đưa đến mạch tạo xung điều khiển, kết quả thu
được là các dãy xung khác nhau tùy theo mã lệnh để
điều khiển hoạt động bên trong và bên ngoài CPU.

 Khối số học và logic ALU: Thực hiện các phép toán số


học và logic. Mã toán tử của nó nằm trong các thanh
ghi đa năng. Kết quả thường được đặt về thanh ghi AX.
KHỐI THANH GHI

 VXL 8086 có 14 thanh ghi nội, được chia làm 4 nhóm:

 Thanh ghi dữ liệu (Data Registers).


 Thanh ghi chỉ số và con trỏ (Index and Pointer
Register).
 Thanh ghi đoạn (Segment Registers).
 Thanh ghi cờ (Flag Registers).
THANH GHI DỮ LIỆU

 Chức năng: Các thanh ghi dữ liệu được sử dụng trong


các phép toán số học và logic hay trong quá trình
chuyển dữ liệu.
 Các thanh ghi dữ liệu có chiều dài 16 bit.
 Thanh ghi dữ liệu bao gồm:

AX BX CX DX

AH AL BH BL CH CL DH DL
THANH GHI CON TRỎ VÀ CHỈ SỐ

 Chức năng: Các thanh ghi này chứa các giá trị offset
(độ lệch) cho các phần tử định địa chỉ trong một phân
đoạn. Địa chỉ sử dụng trong các phép toán số học và
logic.
 Bao gồm 4 thanh ghi 16 bit:

SP – Stack Pointer Cho phép truy suất dễ dàng đến các phần
tử đang ở trong ngăn xếp hiện hành
BP – Base Pointer

SI – Source Index Là hai thanh ghi chỉ số dùng để truy xuất


các phần tử trong các đoạn dữ liệu và đoạn
DI – Destination thêm, SI và DI dùng trong các phép toán
Index chuỗi
THANH GHI ĐOẠN

 Chức năng: Xác định địa chỉ vùng nhớ bằng cách chia
thành 16 đoạn 64KB.
 Bao gồm các thanh ghi:

IP – Intruction Pointer Xác định độ lệch offset

CS – Code segment Có chức năng xác định địa chỉ


DS – Data segment Chứa dữ liệu chương trình
SS – Stack Segment Định vị Stack
ES – Extra Segment Sử dụng để định địa chỉ các toán hạng dữ liệu
bộ nhớ và các phần tử khác ngoài đoạn dữ liệu
và stack hiện hành.
THANH GHI CỜ

15 0

x x x x OF DF IF TF SF ZF x AF x PF x CF

 Không phải tất cả các bit đều được sử dụng


 Mỗi bit được sử dụng được gọi là một cờ
 Các cờ đều có tên và có thể được Lập/Xoá riêng lẻ.
 Bao gồm các cờ trạng thái và các cờ điều khiển
NHÓM CỜ ĐIỀU KIỆN
 Cờ nhớ - Carry Flag (CF): Cờ này được đặt lên 1 khi tính toán một
số không dấu bị tràn.
 Cờ chẵn lẻ - Parity Flag (PF):
◦ PF = 1: Khi số lượng bit 1 trong kết quả là chẵn.
◦ PF = 0: Khi số lượng bit 1 trong kết quả là lẻ.
 Cờ nhớ phụ - Auxiliary Carry Flag (AF): Có ý nghĩa quan trọng đối
với phép cộng và phép trừ các số BCD.
◦ AF = 1: khi nhóm 4 bit thấp không dấu tràn.
 Cờ không – Zero Flag (ZF): Chỉ thị rằng kết quả của phép toán số
học hay logic = 0.
 Cờ dấu – Sign Flag (SF): Chỉ thị dấu số học của kết quả sau một
phép toán số học.
◦ SF =1: Số âm; SF = 0: Số dương
 Cờ tràn – Over Flag (OF):OF = 1 khi tính toán tràn số âm
◦ OF = 1: Khi số lượng bit 1 trong kết quả là chẵn.
◦ OF = 0: Khi số lượng bit 1 trong kết quả là lẻ.
NHÓM CỜ ĐIỀU KHIỂN

 Các cờ điều khiển được lập hay xóa thông qua các lệnh
đặc biệt trong chương trình người dùng.
 Cờ bẫy – Trap Flag (TF): TF =1 thì CPU sẽ chờ ngắt từ

thiết bị ngoài.
 Cờ ngắt – interrupt flag (IF): được sử dụng để cho phép

hay cấm ngắt của các chương trình


 Cờ hướng – Direction Flag (DF): được sử dụng với các

lệnh chuỗi, mang dữ liệu.


◦ DF = 0: thực thi theo hướng tiến.
◦ DF = 1: thực thi theo hướng lùi.
Không có lệnh riêng để lập cờ DF
PHƯƠNG PHÁP QUẢN LÝ BỘ NHỚ

 Bộ nhớ được xem là một tập hợp các ô nhớ


 Mỗi ô nhớ được nhận dạng bằng một Địa chỉ vật lý duy

nhất 20 bit
 Trong hoạt động truy cập một ô nhớ, Địa chỉ vật lý của

nó được tạo ra từ hai giá trị 16-bit: Địa chỉ segment và


Địa chỉ Offset
 Địa chỉ vật lý = Địa chỉ segment:Địa chỉ offset
 Cách xác định địa chỉ vật lý:
 Địa chỉ vật lý = thanh ghi đoạn x 10H + thanh ghi lệch.
TẬP LỆNH CỦA 8086
 Khái niệm về lệnh: Lệnh của bộ VXL được ghi bằng
các ký tự dưới dạng gợi nhớ (mnemonic) để người sử
dụng có thể nhận biết. Lệnh được mã hóa dưới dạng
các bít nhị phân 0 và 1 và được gọi là mã máy. Một
lệnh có độ dài từ 1 đến 6 byte.
 Mã hóa lệnh:

◦ Ví dụ mã hóa lệnh MOV.


- Mã hóa câu lệnh:
- MOV CL,[BX]

Byte1 Byte 2 Byte 3 Byte 4


1 0 0 0 1 0

MOV D W Mod REG R/M


Bảng mã thanh ghi
Mã Thanh Ghi
W=0 W=1
000 AL AX
001 CL CX
010 DL DX
011 BL BX
100 AH SP
101 CH BP
110 BH SI
111 DH DI

Bảng mã chế độ địa chỉ cho các toán hạng của lệnh:
MOD 00 01 10 11
R/M W=1 W=0

000 [BX] + [SI] [BX] + [SI] +Add8 [BX] + [SI] +Add16 AX AL


001 [BX] + [DI] [BX] + [DI] +Add8 [BX] + [DI] +Add16 CX CL
010 [BP] +[ SI] [BP] +[ SI] + Add8 [BP] +[ SI] + Add16 DX DL
011 [BP] + [DI] [BP] + [DI] + Add8 [BP] + [DI] + Add16 BX BL
100 [SI] [SI] + Add8 [SI] + Add16 SP AH
101 [DI] [DI] + Add8 [DI] + Add16 BP CH
110 Addr16 Addr16 + Add8 Addr16 + Add16 SI DH
111 [BX] [BX] + Add 8 [BX] + Add 16 DI BH
CÁC CHẾ ĐỘ ĐỊA CHỈ CỦA 8086

 Chế độ địa chỉ (addressing mode) là cách để CPU tìm


thấy toán hạng cho các lệnh của nó khi hoạt động.
 Bộ VXL 8086 có 7 chế độ địa chỉ:

◦ Chế độ địa chỉ thanh ghi (register addressing mode)


◦ Chế độ địa chỉ tức thì (immediate addressing mode)
◦ Chế độ địa chỉ trực tiếp (direct addressing mode)
◦ Chế độ địa chỉ gián tiếp qua thanh ghi
◦ Chế độ địa chỉ tương đối cơ sở (based relative addressing mode)
◦ Chế độ địa chỉ tương đối chỉ số (indexed relative addressing
mode)
◦ Chế độ địa chỉ tương đối chỉ số cơ sở (based indexed relative
addressing mode)
 Chế độ địa chỉ thanh ghi: Sử dụng thanh ghi bên trong CPU như là các
toán hạng để chứa dữ liệu cần thao tác.
◦ Ví dụ: MOV BX,DX; chuyển nội dung DX vào BX

 Chế độ địa chỉ tức thì: Toán hạng đích là 1 thanh ghi hay 1 ô nhớ, toán
hạng nguồn là hằng số. Chế độ địa chỉ này có thể được dùng để nạp dữ liệu
cần thao tác vào bất kỳ thanh gi nào hoặc bất kì ô nhớ nào trong đoạn dữ
liệu DS.
◦ Ví dụ: MOV CL,100; chuyển 100 vào CL

 Chế độ địa chỉ trực tiếp: Trong chế độ này một hằng là địa chỉ lệch của ô
nhớ làm một toán hạng, còn toán hạng kia chỉ có thể là thanh ghi mà không
được là ô nhớ.
◦ Ví dụ: MOV AL,[1234]; chuyển nội dung ô nhớ DS:[1234] vào AL

 Chế độ địa chỉ gián tiếp: Trong chế độ địa chỉ này, một toán hạng là một
thanh ghi được sử dụng để chứa địa chỉ lệch của ô nhớ chứa dữ liệu, còn
toán hạng kia chỉ có thể là thanh ghi là không được là ô nhớ.
◦ Ví du: MOV AL,[BX]; chuyển nội dung ô nhớ có địa chỉ DS:BX và AL
 Chế độ địa chỉ tương đối cơ sở: Các thanh ghi cơ sở như BX hoặc BP
và hằng số biểu diễn giá trị dịch chuyển địa chỉ dùng để tính địa chỉ
hiệu dụng của 1 toán hạng trong vùng nhớ DS hoặc SS. Sự có mặt của
các giá trị dịch chuyển xác định tính tương đối của địa chỉ so với địa
chỉ cơ sở.
◦ Ví dụ MOV CX,[BX] + 10;
 Chế độ địa chỉ tương đối chỉ số: Trong chế độ địa chỉ này các thanh
ghi chỉ số như SI hoặc DI và hằng số biểu diễn giá trị dịch chuyển
được dùng để tính địa chỉ hiệu dụng của toán hạng trong vùng nhớ DS
hoặc ES.
◦ Ví dụ MOV CX,[SI] +10;
 Chế độ địa chỉ tương đối chỉ số cơ sở: Là sự kết hợp của địa chỉ tương
đối cơ sở và địa chỉ tương đối chỉ số. Trong chế độ này ta dùng cả
thanh ghi cơ sở lẫn thanh ghi chỉ số và một hằng số biểu diễn sự dịch
chuyển của địa chỉ để tính địa chỉ của toán hạng.
◦ Ví dụ MOV AX,[BX][SI] + 8
TẬP LỆNH TRONG VXL 8086

 Bộ VXL 8086 có tập lệnh gồm 116 lệnh chiều dài của
lệnh từ 1 byte đến vài byte.
 Tập lệnh bao gồm:

◦ Nhóm các lệnh trao đổi dữ liệu.


◦ Nhóm các lệnh tính toán số học
◦ Nhóm các lệnh tính toán logic
◦ Nhóm các lệnh dịch quay toán hạng
◦ Nhóm các lệnh nhảy
◦ Nhóm các lệnh lặp
◦ Nhóm các lệnh điều khiển đặc biệt khác.
NHÓM CÁC LỆNH TRAO ĐỔI DỮ LIỆU
 Chức năng:
◦ Trao đổi dữ liệu giữ thanh ghi và ô nhớ, giữa thiết bị vào ra và
ô nhớ hoặc thanh ghi.
◦ Nạp dữ liệu cần thiết cho các thao tác tính toán của VXL.

Mã gợi nhớ Chức năng


MOV Di chuyển dữ liệu giữa thanh ghi và ô nhớ

XCHG Chuyển đổi dữ liệu giữa 2 toán hạng đích


và nguồn
XLAT Lấy dữ liệu trong bảng vào thanh ghi AL

LEA Nạp địa chỉ hiệu dụng


LDS Nạp con trỏ bộ nhớ vào thành ghi DS
LES Nạp con trỏ bộ nhớ vào thanh ghi ES
PUSH Cất dữ liệu vào ngăn xếp
NHÓM CÁC LỆNH TRAO ĐỔI DỮ LIỆU

 MOV:
◦ Cú pháp: MOV đích, nguồn
◦ Thực hiện: Đích ←Nguồn
◦ Toán hạng sử dụng
 trong lệnh:

Đích Nguồn Ví dụ
Reg Reg MOV AH,BH
Reg Mem MOV CL,
[1000H]
Reg Imm MOV DH,10
Mem Reg MOV table,BX
Mem Imm MOV X1,25H
Seg.reg Reg16 MOV DS,AX
Seg.reg Mem16 MOV ES,X2
NHÓM CÁC LỆNH TRAO ĐỔI DỮ LIỆU

 XCHG:
◦ Cú pháp: XCHG đích,nguồn
◦ Thực hiện đích ↔ nguồn
◦ Các toán hạng sử dụng trong lệnh:
ĐíchXCHG Nguồn Ví dụ
AX Reg XCHG AX,BX
Mem Reg XCHG SUM,BX
Reg Reg XCHG CL,DL
 XLAT:
◦ Cú pháp: XLAT
◦ Thực hiện: AL←[DS*10H+BX+AL]
◦ Lấy giá trị thứ n trong bảng dữ liệu vào thanh ghi AL với BX giữ địa chỉ đầu bảng.
AL giữ khoảng cách từ đầu bảng tới giá trị cần lấy.
NHÓM CÁC LỆNH TRAO ĐỔI DỮ LIỆU

 LEA:
◦ Đây là lệnh để tính địa chỉ lệch của biến hoặc địa chỉ của ô nhớ
chọn làm gốc rồi nạp vào thanh ghi đã chọn, lệnh này không
tác động đến cờ
◦ Cú pháp: LEA đích, nguồn
◦ Trong đó:
 Đích thường là một trong các thanh ghi: BX,CX,DX,BP,SI,DI.
 Nguồn là tên biến trong đoạn DS được chỉ rõ trong lệnh hoặc ô
nhớ cụ thể.
◦ Thực hiện:
 Đích ← địa chỉ lệch của nguồn.
 Đích ← địa chỉ hiệu dụng của nguồn.
NHÓM CÁC LỆNH TRAO ĐỔI DỮ LIỆU

 PUSH:
◦ Cú pháp: PUSH Nguồn
◦ Thực hiện: Cất dữ liệu chỉ thị bởi toán hạng nguồn vào đỉnh ngăn
xếp và tự động giảm SP tùy theo số byte của toán hạng nguồn.
◦ Toán hạng sử dụng: là bộ nhớ hoặc thanh ghi.
◦ Ví dụ: PUSH AX
 POP:
◦ Cú pháp: POP đích
◦ Thực hiện: lấy dữ liệu từ đỉnh ngăn xếp ra toán hạng đích và tăng giá
trị của SP lên một lượng tương ứng với số byte chứa trong toán hạng
đích
◦ Toán hạng sử dụng: là bộ nhớ hoặc thanh ghi.
◦ Ví dụ: POP BX
NHÓM CÁC LỆNH TRAO ĐỔI DỮ LIỆU

 OUT: Ghi dữ liệu từ Acc ra cổng


◦ Cú pháp: OUT port, ACC.
◦ Thực hiện: Port←ACC
◦ Port có giá trị trong khoảng 00 đến FFH. Các trường hợp:
 Nếu Acc là AL thì dữ liệu 8 bit được đua ra Port.
 Nếu Acc là AX thì dữ liệu 16 bit được đưa ra Port và Port +1.
 Ví dụ: OUT [45H],AL
 IN: Đọc dữ liệu từ cổng vào thanh ghi Acc.
◦ Cú pháp: IN Acc,port
◦ Thực hiện: Acc ← port.
◦ Port có giá trị trong khoảng từ 00 đến FFH. Các trường hợp:
 Nếu Acc là AL thì dữ liệu 8 bit được đưa vào từ port.
 Nếu Acc là AX thì dữ liệu 16 bit được đưa vào từ port và port +1.
 Ví dụ: IN AL,[45H]
NHÓM CÁC LỆNH TÍNH TOÁN SỐ HỌC

 Đặc điểm:
◦ Kết quả sau khi thực hiện lệnh chứa trong toán hạng đích.
◦ Trạng thái kết quả ảnh hưởng tới các cờ
 Nhóm các lệnh cộng:
 ADD: Cộng hai toán hạng
◦ Cú pháp: ADD đích, gốc
◦ Thực hiện: Đích ← đích + gốc
◦ Các toán hạng sử dụng trong lệnh: thanh ghi và bộ nhớ
◦ Ví dụ ADD AX, BX
◦ ADD DL,[SI]
◦ ADD CL, 09
◦ Các cờ bị thay đổi AF, CF, OF, PF, SF, ZF
NHÓM CÁC LỆNH TÍNH TOÁN SỐ HỌC

 Nhóm các lệnh cộng


 ADC: cộng có nhớ
◦ Cú pháp: ADC đích, gốc
◦ Thực hiện: đích ← đích + gốc + CF
◦ Các toán hạng: thanh ghi và ô nhớ
◦ Các cờ thay đổi giống lệnh cộng
◦ Ví dụ ADC AL, 74H
 INC:
◦ Cú pháp: INC đích
◦ Thực hiện: đích ← đích + 1
◦ Các toán hạng: thanh ghi và ô nhớ.
◦ Các cờ thay đổi: AF, OF, PF, SF, ZF
◦ Ví dụ INC AL; AL + 1
NHÓM CÁC LỆNH TÍNH TOÁN SỐ HỌC

 AAA: Chỉnh sau khi cộng hai số dạng ASCII


◦ Cú pháp: AAA
◦ Thực hiện: Chỉnh kết quả trong AL bằng lệnh AAA để thu
được kết quả là số BCD không gói.
◦ Nếu giá trị 4 bit thấp của thanh ghi AL>9, AF = 1 thì tiến hành
cộng giá trị 06 vào AL, sau đó cộng 1 vào giá trị của thanh ghi
AH và dựng AF = 1. Tiếp đó đưa 4 bit cao của thanh ghi AL
xuống 0.
◦ Nếu giá trị 4 bit thấp của thanh ghi AL <= 9, giá trị AF = 0 thì
cần đưa 4 bit cao của thanh ghi AL xuống 0.
NHÓM CÁC LỆNH TÍNH TOÁN SỐ HỌC
 Nhóm các lệnh trừ:
 SUB:
◦ Cú pháp: SUB đích, gốc
◦ Thực hiện: đích ← đích – gốc
◦ Các toán hạng giống lệnh cộng.
◦ Các cờ thay đổi giống lệnh cộng.
◦ Ví dụ: SUB AL, 78H
 SBB:
◦ Cú pháp: SBB đích, gốc
◦ Thực hiện: Đích ← đích – gốc + CF
◦ Ví dụ: SBB AL,74H
 DEC:
◦ Cú pháp: DEC đích
◦ Thực hiện: đích ← đích -1; giảm đích đi một
◦ Các toán hạng và các cờ thay đổi giống lệnh cộng
◦ Ví dụ: MOV BX, 1200H
DEC BX
 NEG: Lấy bù hai toán hạng đích
◦ Cú pháp: NEG đích
◦ Thực hiện : Đích ← 0 – đích
NHÓM CÁC LỆNH TÍNH TOÁN SỐ HỌC
 Nhóm các lệnh nhân:
 MUL (lệnh nhân):

◦ Cú pháp: MUL nguồn


◦ Thực hiện: AX ← AL * nguồn 8bit; khi toán hạng nguồn 8
bít
DXAX← AX* nguồn 16bit; khi toán hạng nguồn 16
bít
Ví dụ: MUL CX; AX*CX→DXAX
MUL BL;AL*BL → AX
 IMUL (nhân số nguyên có dấu)
◦ Cú pháp: IMUL nguồn
◦ Thực hiện: tương tự như lệnh nhân với các số nguyên ngoài ra
còn thực hiện nhân các số nguyên có dấu khác
NHÓM CÁC LỆNH TÍNH TOÁN SỐ HỌC

 Nhóm các lệnh chia:


 DIV (Lệnh chia)
◦ Cú pháp: DIV nguồn
◦ Thực hiên: + Với nguồn 8 bit, số bị chia trong AX, thương số trong
AL, số dư trong AH.
+ Với nguồn 16 bít, số bị chia trong DXAX, thương số
trong AX, số dư chứa trong DX
Ví dụ: MOV AX,0033H
MOV BL,25
DIV BL
 IDIV (Lệnh chia số nguyên có dấu):
◦ Cú pháp: IDIV nguồn
◦ Thực hiện: tương tự như lệnh chia với các số nguyên không dấu, ngoài ra
còn thực hiện chia các số nguyên có dấu khác
NHÓM CÁC LỆNH TÍNH TOÁN LOGIC

 AND (Phép và logic):


◦ Cú pháp: AND đích, nguồn
◦ Thực hiện: đích ← đích^nguồn
◦ Các cờ bị thay đổi: CF, OF, PF, SF, ZF
◦ Ví dụ: AND DX,CX; DX and CX theo từng bít
AND AL, 0FH; che 4 bit cao của AL
 NOT (phủ định logic)
◦ Cú pháp: NOT đích
◦ Thực hiện: đảo các giá trị của các bit của toán hạng đích.
◦ Các cờ bị thay đổi không.
NHÓM CÁC LỆNH TÍNH TOÁN LOGIC

 OR (Phép hoặc logic):


◦ Cú pháp: OR đích, nguồn
◦ Thực hiện: đích ← đích ν nguồn
◦ Các cờ bị thay đổi: CF, OF, PF, SF, ZF.
◦ Ví dụ: OR AX,BX; AX← AX ν BX theo từng bit
OR CL,30H; lập bit b4 và b5 của CL lên 1.
 XOR (hoặc đảo)
◦ Cú pháp: XOR đích, nguồn
◦ Thực hiện: đích ← đích nguồn
◦ Các cờ bị thay đổi: CF, OF, PF, SF, ZF.
◦ Ví dụ: XOR AX,AX
XOR BX,BX
MOV AX,5857H
MOV BX,58A8H
XOR AX,BX
NHÓM CÁC LỆNH SO SÁNH

 CMP (so sánh):


◦ Cú pháp: CMP đích, nguồn
◦ CMP trừ toán hạng đích cho toán hạng nguồn, chúng có thể là
các byte hoặc các từ, nhưng không lưu trữ kết quả.
◦ Các cờ bị thay đổi: AF, CF, OF, PF, SF, ZF.
◦ Các cờ chính theo quan hệ đích và nguồn khi so sánh hai số
không dấu:
So sánh CF ZF
Đích = nguồn 0 1
Đích >nguồn 0 0
Đích <nguồn 1 0
NHÓM CÁC LỆNH NHẢY

 JA/JNBE (nhảy nếu cao hơn/nhảy nếu không thấp hơn hoặc bằng)
◦ Cú pháp: JA nhan
JNBE nhan
◦ Thực hiện: IP ← IP + dịch chuyển
◦ Ví dụ: CMP AX, 12ABH; so sánh AX với 12ABH
JA THOI; nhảy đến THOI nếu AX cao hơn 12ABH
 JAE/JNB/JNC (nhảy nếu lớn hơn hoặc bằng/ nhảy nếu không thấp
hơn/ nhảy nếu không có nhớ
◦ Cú pháp: JAE nhan
JNB nhan
JNC nhan
◦ Thực hiện: IP ← IP + dịch chuyển
◦ Ví dụ: CMP AL, 10H; so sánh AL với 10H
JAE THOI; nhảy đến THOI nếu AL lớn hơn hoặc bằng 10H
NHÓM CÁC LỆNH NHẢY

 JB/JC/JNAE (nhảy nếu thấp hơn/ nhảy nếu có nhớ/ nhảy nếu không
cao hơn hoặc bằng.
◦ Cú pháp: JB nhan
JC nhan
JNAE nhan
◦ Thực hiện: IP ← IP + dịch chuyển
◦ Ví dụ: CMP AL,10H
JB THOI
 JBE/JNA (nhảy nếu thấp hơn hoặc bằng/ nhảy nếu không cao hơn
◦ Cú pháp: JBE nhan
JNA nhan
◦ Thực hiện: IP ← IP + dịch chuyển
◦ Ví dụ: CMP AL,10H
JBE THOI
NHÓM CÁC LỆNH NHẢY

 JE/JZ ( nhảy nếu bằng nhau/ nhảy nếu kết quả bằng không)
◦ Cú pháp JE nhan
JZ nhan
◦ Thực hiện: IP ← IP + dịch chuyển
◦ Ví dụ: SUB AL,10H
JE THOI
 JNE/JNZ (nhảy nếu không bằng nhau/ nhảy nếu không bằng
không)
◦ Cú pháp JNE nhan
JNZ nhan
◦ Thực hiện: IP ← IP + dịch chuyển
◦ Ví dụ: SUB AL,10H
JNE THOI
NHÓM CÁC LỆNH NHẢY

 JMP (Lệnh nhảy không điều kiện):


◦ Cú pháp: JMP nhan
◦ Thực hiện: chuyển điều khiển chương trình tới vị trí xác
định bởi “nhan” chỉ thị trong lệnh
◦ Nhảy ngắn và nhảy gần: lệnh sẽ chuyển điều khiển tới nhãn
cách lệnh nhảy trong khoảng từ -128 tới 127. Toán hạng sử
dụng tính theo giá trịnh tương đối, giá trị IP thay đổi, CS
không thay đổi.
◦ Với mem16 và Reg16: lệnh sẽ chuyển điều khiển tương đối
trong khoảng từ -32678 tới 32767. Giá trị IP thay đổi.
◦ Với Mem32 và nhảy xa: Lệnh sẽ chuyển điều khiển qua đoạn
64KB khác của bộ nhớ. Cả CS và IP đều được gán giá trị mới.
NHÓM CÁC LỆNH DỊCH – QUAY TOÁN HẠNG
 Nhóm các lệnh quay toán hạng:
 RCL (Quay trái thông qua cờ nhớ)

◦ Cú pháp: RCL đích,CL


◦ Trong đó CL chứa sẵn số lần quay.
◦ Thực hiện
CF MSB LSB

 RCR (Quay phải thông qua cờ nhớ)


◦ Cú pháp: RCR đích,CL
◦ Trong đó CL chứa sẵn số lần quay
◦ Thực hiện
CF MSB LSB
NHÓM CÁC LỆNH DỊCH – QUAY TOÁN HẠNG

 Nhóm các lệnh quay toán hạng:


 ROL (Quay vòng trái)

◦ Cú pháp: ROL đích, CL


◦ Trong đó CL chứa số lần quay
◦ Thực hiện
CF MSB LSB

ROR (Quay vòng sang phải)


Cú pháp: ROR đích, CL
Trong đó CL chứa số lần quay
Thực hiện:
MSB LSB CF
NHÓM CÁC LỆNH DỊCH – QUAY TOÁN HẠNG

 SAL/SHL (dịch trái số học/dịch trái logic)


◦ Cú pháp: SAL đích, CL
SHL đích, CL
◦ Thực hiện:
CF MSB LSB
0

 SHR (dịch phải logic)


◦ Cú pháp SHR đích, CL
◦ Thực hiện MSB LSB CF
0 0

NHÓM CÁC LỆNH LẶP

 LOOP (lặp nếu CX ≠0)


◦ Cú pháp: LOOP nhan
◦ Thực hiện: Lệnh này dùng để lặp lại đoạn chương trình cho
đến khi số lần lặp CX = 0. Điều này có nghĩa là trước khi vào
vòng lặp ta phải đưa số lần lặp mong muốn vào CX, sau mỗi
lần lặp CX giảm đi 1.
◦ Ví dụ: MOV AL,0; xóa AL
MOV CX,10; nạp số lần lặp vào CX
LAP: INC AL;tăng AL lên 1
LOOP LAP
NHÓM CÁC LỆNH LẶP

 LOOPE/LOOPZ (lặp lại đoạn chương trình cho đến khi CX = 0,


ZF = 0)
◦ Cú pháp: LOOPE nhan
LOOPZ nhan
◦ Thực hiện: Lệnh này dùng để lặp đoàn chương trình cho đến khi số lần
lặp CX = 0 hoặc cờ ZF = 0. Điều này có nghĩa là trước khi vào vòng lặp
ta phải đưa số lần lặp mong muốn vào CX, sau mỗi lần lặp CX giảm đi 1
◦ Ví dụ: MOV AL,AH; AL = AH
MOV CX,50; NẠP SỐ LẦN LẶP VÀO CX
LAP: INC AL; TĂNG AL
CMP AL,16; SO SÁNH AL VỚI 16
LOOPE LAP
NHÓM CÁC LỆNH ĐIỀU KHIỂN ĐẶC BIỆT

 CALL (gọi chương trình con)


 INT (Lệnh gọi ngắt)
 IRET (Trở về chương trình chính từ chương trình con

phục vụ ngắt)
 NOP (CPU không làm gì)
 RET (Trở về chương trình chính từ chương trình con
BÀI TẬP

1. Hãy cho biết chế độ địa chỉ và mô tả hoạt động của 8086
khi thực hiện các lệnh sau:
a. MOV AX, BX k. MOV CX,[1234H]
b. SUB AX,DX l. XOR CL,BH
c. AND AH,CH m. SHL DX,CL
d. DEC BP n. POP DS
e. MOV BX,6783H o. LEA CX,[BX+DI]
f. NEG AH p.PUSH AX
g. XLAT q. XCHG DX,CX
h. ROR BL,1 r. MUL CX
i. DIV CL
2. Viết các lệnh hợp ngữ thực hiện công các công việc sau:
a. Nạp số 3654H vào thanh ghi BP.

b. Sao chép nội dung thanh ghi BP vào thanh ghi SP.

c. Sao chép nội dung thanh ghi AX tới ô nhớ có địa chỉ offset =
9876H.
d. Tăng nội dung thanh ghi CX lên 1.

e. Cộng 07H vào DL.

f. Lập bit MSB của AX lên 1 nhưng không làm ảnh hưởng tới các
bit khác,
g. Lập bit LSB của AX lên 1 nhưng không làm ảnh hưởng tới các
bit khác.
h. Che 4 bit cao của CL

i. Nhân giá trị AH với 08


j. Nghịch đảo 4 bit thấp của thanh ghi DX mà không làm ảnh
hưởng tới các bit khác.
k. Lấy bù 2 nội dung thanh ghi BP
LẬP TRÌNH HỢP NGỮ CHO 8086

 Cú pháp của chương trình hợp ngữ:


Một chương trình hợp ngữ bao gồm các dòng lệnh, một lệnh
có thể là một lệnh thật dưới dạng kí hiệu, mà đôi khi còn được
gọi là dạng gợi nhớ của bộ vi xử lý, hoặc hướng dẫn cho
chương trình dịch.
Cú pháp:
TÊN MÃ LỆNH CÁC TOÁN HẠNG CHÚ GIẢI

Ví Dụ:
TIÊP: MOV AH,[BX] [SI]; nạp vào AH ô nhớ có địa chỉ DS:
[BX+SI]
 Dữ liệu cho chương trình:
 Dữ liệu chương trình đa dạng: có thể được cho dưới dạng hệ hai, hệ 10,
hệ 16 hoặc dưới dạng kí tự. Khi cung cấp số liệu cho chương trình, số
cho ở hệ nào phải được kèm đuôi của hệ đó.
 Biến

 Biến trong chương trình hợp ngữ được định nghĩa kiểu dữ liệu là kiểu byte hay
kiểu từ và sẽ được chương trình dịch gán cho một địa chỉ nhất định trong bộ nhớ.

 Biến byte (DB): chiếm một byte trong bộ nhớ


TÊN DB GIÁ TRỊ KHỞI ĐẦU

Ví Dụ: B1 DB 4
B2 DB ?

 Biến từ (DW):
TÊNchiếm hai byte
DW trong bộ nhớ
GIÁ TRỊ KHỞI ĐẦU

Ví dụ: W1 DW 40
 Biến mảng: Biến mảng là biến hình thành từ một dãy liên tiếp các phần tử cùng loại byte
hoặc từ.
Ví dụ: M1 DB 4,5,6,7,8,9
M2 DB 100 DUP(0)

 Biến kiểu sâu kí tự: Biến kiểu xâu kí tự là một trường hợp đặc biệt của biến mảng, trong đó
các phần tử của mảng là các kí tự. Một xâu kí tự có thể được định nghĩa bằng các kí tự hoặc
bằng mã ASCII của các kí tự đó.
Ví dụ: STR1 DB ‘string
STR DB 73h,74h,72h,69h,6Eh,67h

 Hằng có tên: Các hằng trong chương trình hợp ngữ thường được gán tên để làm cho
chương trình trở nên dễ đọc hơn. Hằng có thể là kiểu số hay kiểu kí tự. Việc gán tên
hằng nhờ lệnh giả EQU
◦ Ví dụ: CR EQU 0DH
CHAO EQU ‘hello’
 Một số toán tử:
 Toán tử DUP
Cú pháp: <Số lần> DUP (<giá trị>)
Ý nghĩa: Giá trị sẽ được lặp lại n lần, thường dùng toán tử DUP để khai
báo một dãy (mảng).
VD: Mang1 DB 10 DUP(0)
Mảng 2 DB 12,13,5 DUP(10)
Mảng 3 DB 5,4,2 DUP (2,3 DUP(0),1)
 Toán tử PTR:
Cú pháp: <Kiểu> PTR <biểu thức>
Ý nghĩa: Thay đổi dạng của <biểu thức> sang <kiểu>
 Toán tử LABEL:
Cú pháp: <Tên biến> Label <byte/word)
Ý nghĩa: Dùng để khai báo biến giúp người sử dụng tránh được mâu
thuẫn kiểu khi sử dụng.
 Toán tử $: Cho giá trị hiện thời của bộ đếm và giá trị bộ nhớ. Thường
dùng để tính độ dài của một chuỗi.
 Khung của một chương trình hợp ngữ: Một chương trình mã máy trong bộ nhớ
thường bao gồm các vùng nhớ khác nhau để chứa mã lệnh, chứa dữ liệu của
chương trình và một vùng nhớ khác được dùng làm ngăn xếp phục vụ hoạt động
của chương trình.
 Khai báo quy mô sử dụng bộ nhớ:
 Cú pháp: .Model kiểu_kích_thước_bộ nhớ

Các kiểu kích thước bộ nhớ trong chương trình hợp ngữ :
Kiểu kích thước Mô tả

Tiny(hẹp) Mã lệnh và dữ liệu gói gọn trong một đoạn

Small(nhỏ) Mã lệnh gói gọn trong một đoạn. Dữ liệu nằm trong 1 đoạn

Medium Mã lệnh không gói gọn trong một một đoạn. Dữ liệu nằm trong
một đoạn

Compact Mã lệnh gói gọn trong một đoạn. Dữ liệu không gói gọn trong một
đoạn

Large Mã lệnh không gói gọn trong một đoạn. Dữ liệu không gói gọn
trong một đoạn. Không có mảng nào lớn hơn 64KB

Huge Mã lệnh không gói gọn trong một đoạn. Dữ liệu không gói gọn
trong một đoạn. Các mảng có thể lớn hơn 64KB
 Khai báo đoạn ngăn xếp: Việc khai báo đoạn ngăn xếp cốt
để dành ra một vùng nhớ đủ lớn dùng làm ngăn xếp phục vụ
cho hoạt động của chương trình khi có chương trình con
Cú pháp: .Stack kích_thước
Ví dụ: . Stack 100
 Khai báo dữ liệu: Đoạn dữ liệu chứa toàn bộ các định nghĩa

cho các biến của chương trình. Các hằng cũng nên được
định nghĩa ở đây để đảm bảo tính hệ thống mặc dù ta có thể
để chúng ở trong chương trình như đã nói ở phần trên.
Ví dụ: .Data
MSG DB ‘hello!$’
CR DB 13
LF EQU 10
 Khai báo dữ liệu: Đoạn dữ liệu chứa toàn bộ các định
nghĩa cho các biến của chương trình. Các hằng cũng
nên được định nghĩa ở đây để đảm bảo tính hệ thống
mặc dù ta có thể để chúng ở trong chương trình như đã
nói ở phần trên.
 Ví dụ: .Data

MSG DB ‘hello!$’
CR DB 13
LF EQU 10
 Khai báo đoạn mã:Đoạn mã chứa mã lệnh của chương trình.
Việc khai báo đoạn mã được thực hiện nhờ hướng dẫn
chương trình dịch.
Cú pháp: .Code
Chương trình mẫu:
tên_CTC Proc
; các lệnh của thân chương trình chính

Call tên_ctc

tên_CTC Endp
 Khung chương trình hợp ngữ để dịch ra chương trình .EXE:
.Model small
.Stack 100
.Data
; các định nghĩa cho biến và hằng
.Code
Main Proc
; Khởi đầu cho DS
MOV AX,@DaTa
MOV DS,AX
; Các lệnh của chương trình chính để tại đây
; trở về DOS dùng hàm 4CH của ngắt int 21H
MOV AH,4CH
INT 21H
MAIN ENDP
; các chương trình con để tại đây
END MAIN
 Khung chương trình hợp ngữ để dịch ra chương trình .COM
.Model Tiny
.Code
Org 100h
Start: JMP Continue
; các định nghĩa cho biến và hằng đặt tại đây
Continue:
Main Proc
; Các lệnh chương trình đặt tại đây.
INT 20H; Trở về DOS
Main Endp
; Các chương trình con (nếu có) đặt tại đây.
END Start
 Các cấu trúc lập trình cơ bản thực hiện bằng hợp ngữ:
Cấu trúc tuần tự.
Cấu trúc lựa chọn (IF-THEN-ELSE)
Cấu trúc lặp (WHILE-DO)

 Ngoài ra còn có 4 kiểu cấu trúc khác khi thay đổi 3 kiểu cấu
trúc trúc trên:
◦ Cấu trúc chọn kiểu IF-THEN
◦ Cấu trúc chọn kiểu CASE
◦ Cấu trúc lặp kiểu REPEAT-UNTIL
◦ Cấu trúc lặp kiểu FOR-DO
 Cấu trúc tuần tự
 Cách thực hiện: Lệnh được sắp xếp tuần tự, lệnh này kế tiếp lệnh ki
cho đến khi công việc được hoàn thành.
Lệnh 1
Lệnh 2
Lệnh 3
…..
Lệnh n
Ví dụ: Các thanh ghi CX và BX chứa các giá trị biến c và b. Hãy tính
giá trị biểu thức a = 2x(c+b) và chứa kết quả trong thanh ghi AX.
Bài làm:
XOR AX,AX
ADD AX,BX
ADD AX,CX
SHL AX,1
RA:
 Cấu trúc IF – THEN:
 Cú Pháp: If Điều kiện Then Công việc
 Lưu đồ thuật toán

Điều
kiện Ví dụ: Gán cho BX giá trị tuyệt đối của AX
Giải:
CMP AX,0
JNL GAN
NEG AX
Công việc
GAN: MOV BX,AX
 Cấu trúc IF – THEN – ELSE
IF Điều kiện THEN Công việc 1 ELSE Công việc 2

Điều
Kiện

Công việc Công việc


1 2
 Các hàm ngắt:
 Ngắt INT 20H dành riêng cho kết thúc chương trình
loại .COM
Hàm 1 ngắt INT 21H: đọc 1 kí tự từ bàn phím
 Vào AH = 1
 Ra AL = mã ASCII của kí tự
AL = 0 khi kí tự ngõ vào là các phím chức năng
 Hàm 2 ngắt INT 21H: hiện kí tự lên màn hình
 Vào AH = 2
DL = mã ASCII của kí tự cần hiện thị
 Hàm 9 ngắt INT 21H: hiện chuỗi kí tự với $ ở cuối lên màn hình
 Vào AH = 9
DX = địa chỉ lệch của chuỗi kí tự cần hiện thị
 Hàm 4CH ngắt INT 21H: kết thúc chương trình loại EXE
 Vào AH = 4CH
MỘT SỐ VÍ DỤ
1. Giải thích các câu lệnh và cho biết ý nghĩa của đoạn chương trình
trên.
MOV SI, 0
MOV CX, 10
LAP:
MOV AH, 1
INT 21H
INC SI
MOV AH, 2
INT 21H
LOOP LAP
b. MOV BH,41H
MOV BL,4
MOV AH,2
LAP:
MOV CX,5
MT:
MOV DL,BH
INT 21H
LOOP MT
MOV DL,’_’
INT 21H
INT 21H
INT 21H
INC BH
DEC BL
JNZ LAP
c. MOV BH,41H
MOV BL,4
MOV AH,2
LAP:
MOV CX,5
MT:
MOV DL,BH
INT 21H
ADD DL,20H
INT 21H
LOOP MT
MOV DL,’_’
INT 21H
INT 21H
INT 21H
INC BH
DEC BL
JNZ LAP
2. Viết chương trình nhập một chữ cái viết thường và in chữ đó ra dưới
dạng viết hoa ở dòng tiếp theo.
3. Viết chương trình in nội dung bảng mã ASCII ra màn hình.
4. Viết chương trình nhập vào từ bàn phím 5 chữ cái thường sau đó hiển
thị lên màn hình theo thứ tự ngược lại.
5. Viết chương trình nhập vào một xâu kí tự, sau đó in ra các kí tự số (‘0’
đến ‘9’) trong sâu đã nhập.
6. Viết chương trình nhập vào hai số có tổng nhỏ hơn 10 và in tổng của
hai số vừa nhập.
7. Viết chương trình chuyển số 128 sang số nhị phân và hiển thị lên màn
hình.
8. Viết chương trình nhận từng byte dữ liệu từ cổng có địa chỉ 20h và gửi
ra cổng có địa chỉ 30h cho tới khi gặp 2 byte liên tiếp bằng 0 thì dừng.
9. Viết chương trình nhập vào từ bàn phìm hai số có một chữ số, sau đó
tính tổng và hiển thị kết quả lên màn hình.
10. Viết chương trình 2 số có một chữ số, sau đó hiển thị lên màn hình giá
trị max của chúng.

You might also like