You are on page 1of 273

Bài giảng: Vi Xử Lý

CHƯƠNG 1: GIỚI THIỆU CHUNG VỀ VI XỬ LÝ VÀ


MÁY TÍNH
LỊCH SỬ PHÁT TRIỂN CỦA BỘ VXL MÁY TÍNH

Khái niệm về máy tính

•Máy tính lớn (mainframe): là loại máy tính có kích


thước lớn được thiết kế để giải các bài toán lớn với tốc
độ cao, số liệu có độ dài ≥ 64 bit, bộ nhớ rất lớn

 Dùng điều khiển các hệ thống thiết bị trong quân


sự.
 Dùng điều khiển các hệ thống máy móc của chương
trình nghiên cứu vũ trụ, xử lý thông tin trong ngân
hàng, khí tượng và các công ty bảo hiểm.
LỊCH SỬ PHÁT TRIỂN CỦA BỘ VXL MÁY TÍNH
Khái niệm về máy tính

•Máy tính con (mini computer): là loại máy tính có


kích thước nhỏ, dùng cho các ứng dụng vừa phải, số
liệu có độ dài 32 bit, tốc độ chậm hơn, bộ nhớ hạn
chế.
• Máy vi tính(microcomputer): loại máy tính thông
dụng hiện nay, máy vi tính có thể là một bộ vi điều
khiển, hoặc hệ vi xử lý có khả năng làm việc có độ dài
1 bit, 4 bit, 8 bit và 16 bit.
•Hiện nay hầu hết máy vi tính làm việc với số liệu có
độ dài 32bit, 64bit
LỊCH SỬ PHÁT TRIỂN CỦA BỘ VXL MÁY TÍNH
Lịch sử bộ vi xử lý
•Thế hệ 1 (năm 1971-1973):
 Bộ vxl 4004 của intel với 4 bit số liệu,
12 bit địa chỉ
4040 (4bit), 8008 (8 bit) của intel
PPS-4(4bbit) của Rockwell
IPM-16(16bit) của National

Đặc điểm chung của các VXL:


Độ dài từ thường là 4 bit.
Công nghệ chế tạo PMOS có mật độ phần tử nhỏ, tốc độ
thấp, giá rẻ và chỉ có khả năng cho dòng tải nhỏ.
LỊCH SỬ PHÁT TRIỂN CỦA BỘ VXL MÁY TÍNH
Lịch sử bộ vi xử lý

Đặc điểm chung của các VXL:

Tốc độ thực hiện lệnh: 10-60µs/lệnh, tần số fclk = 0,1-0,8


(Mhz)
Tập lệnh đơn giản, cần nhiều vi mạch phụ trợ mới tạo
nên một hệ vxl hoàn chỉnh.
LỊCH SỬ PHÁT TRIỂN CỦA BỘ VXL MÁY TÍNH
Lịch sử bộ vi xử lý
•Thế hệ 2 (74-77):
Các vxl 8bit 6502 của MOS Technology, 6800 và
6809 của Motorola, 8080 và 8085 của intel, Z 80 của
Zilog.
Các đặc điểm:
Tập lệnh phong phú, dung lượng nhớ 64KB.
Tập lệnh phong phú, có khả năng phân biệt địa chỉ
bộ nhớ với dung lượng 64KB.
LỊCH SỬ PHÁT TRIỂN CỦA BỘ VXL MÁY TÍNH
Lịch sử bộ vi xử lý
Các đặc điểm:
Có khả năng phân biệt được 256 địa cho thiết bị
ngoại vi (intel, Zilog).
Chúng được sx bằng công nghệ NMOS, CMOS
Tốc độ: 1-8 µs/lệnh, tần số fclk = 1- 5 (Mhz)
LỊCH SỬ PHÁT TRIỂN CỦA BỘ VXL MÁY TÍNH
Lịch sử bộ vi xử lý
•Thế hệ 3(78-82):
Xuất hiện các bộ vxl 16 bit: 8086/ 80186/80286 của
intel
Đặc điểm:
Tập lệnh đa dạng với lệnh nhân, chia và các thao tác
với chuỗi ký tự.
Khả năng phân biệt địa chỉ của bộ nhớ hay thiết bị
ngoại vi lớn hơn thế hệ 2.
Sản xuất bằng công nghệ HMOS.
Tốc độ: 0,1-1 µs/lệnh, tần số fclk = 5-10 Mhz
LỊCH SỬ PHÁT TRIỂN CỦA BỘ VXL MÁY TÍNH
Lịch sử bộ vi xử lý
•Thế hệ 4 ( 1983- --)
Xuất hiện các bộ vxl 32 bit: 80386/, bộ vxl 64bit
pentium của intel.
Các bộ vxl 32 bit : 68020/68030/68040/68060 của
Motorola.
Đặc điểm:
 Bus địa chỉ 32bit, có khả năng làm việc với bộ nhớ
ảo.
Cơ chế xử lý xen kẽ liên tục dòng mã lệnh, bộ nhớ
cache(bộ nhớ ẩn), bộ nhớ ảo
LỊCH SỬ PHÁT TRIỂN CỦA BỘ VXL MÁY TÍNH
Lịch sử bộ vi xử lý
Đặc điểm:
Có bộ quản lý bộ nhớ MMU và các bộ đồng xử lý
toán học bên trong.
 sản xuất bằng công nghệ HCMOS
Các họ vi xử lý
Các hãng sản xuất: intel, AMD, Motorola, Cyrix…

Mỗi họ vxl được sx bởi một nhà sản xuất, các thế hệ
trong một họ được phân biệt theo độ dài từ (bit) của
chúng và tốc độ (Hz).

Độ dài từ (Word length - bit): của một chip vxl là kích


thước tối đa của một toán hạng nhị phân dùng để thực
hiện các phép toán trên đó.
Bộ vi xử lý của hãng Intel
 Các bộ vi xử lý của Intel được phát triển qua các thời kỳ như sau :

 Năm 1971, Intel đưa ra bộ vi xử lý 4004 với 4 bit dữ liệu, 12 bit


địa chỉ; tốc độ xử lý 108 KHz , với 2300 bóng bán dẫn, thực
hiện một lệnh 1-60µs.

 Năm 1972, bộ vi xử lý Intel 8008 ra đời mạnh gấp đôi bộ vi xử


lý 4004; tốc độ xử lý 200 KHz với 3500 bóng bán dẫn.

 Năm 1974, bộ vi xử lý Intel 8080 ra đời với 8 bit dữ liệu, 16 bit


địa chỉ; tốc độ xử lý 2MHz với 6000 bóng bán dẫn.

 Năm 1978, bộ vi xử lý Intel 8086 ra đời với 16 bit dữ liệu, 20 bit


địa chỉ; tốc độ xử lý 10MHz với 29000 bóng bán dẫn.

 Năm 1979, bộ vi xử lý Intel 8088 ra đời nhằm mục đích giảm


giá bộ vi xử lý và tương thích với hệ thống 8086 cũ .
Bộ vi xử lý của hãng Intel
 Năm 1982 bộ vi xử lý 80286 ra đời với 16bit dữ liệu, 20 bit địa chỉ,
tốc độ xử lý là 12.5 MHz có thể định địa chỉ ở chế độ bảo vệ và chế
độ thực với 134000 bóng bán dẫn.

 Năm 1985-1988, bộ vi xử lý 80386 ra đời với 32 bit dữ liệu và 32 bit


địa chỉ tốc độ xử lý 33MHz với 275000 bóng bán dẫn.

 Năm 1989, bộ vi xử lý 80486 ra đời với 32 bit dữ liệu và 32 bit địa


chỉ tốc độ xử lý 50MHz với 1,2 triệu bóng bán dẫn.

 Năm 1993, bộ vi xử lý Pentium ra đời với 64 bit dữ liệu, tốc độ xử lý


66MHz với 3,1 triệu bong bán dẫn. Pentium cho phép máy tính dễ
dàng tích hợp những dữ liệu thế giới thực như giọng nói, âm thanh,
ký tự viết tay hay đồ họa.
Bộ vi xử lý của hãng Intel
 Năm 2000 Intel cho ra đời vi xử lý Pentium 4 tốc độ 1,8 GHZ công
nghệ siêu phân luồng , sau tốc độ tăng lên 3,4 GHz trong tháng
6/2004.

 Năm 2006 Intel xuất xưởng bộ vi xử lý hai nhân, gọi là Core 2 duo .
Các bộ vi xử lý Core 2 duo có 291 triệu bong bán dẫn.

 Hiện nay đã có bộ vi xử lý 4 nhân, 8 nhân…


Tốc độ của họ vi xử lý x86 của Intel
The Continuing Evolution of Intel Microprocessors
CIS105
December 2002
1600
1,400
1400

1200

1000
Speed (MHZ)

800

600 550
400 400
400 333
200 200 233
200 100
0.74 2 8 12 33
0
1971 1974 1979 1982 1985 1989 1993 1995 1997 1998 1998 1999 1999 2000

Year
Họ vi xử lý x86 của Intel
Model Năm sản xuất Số lượng Transistor
4004 1971 2,300
8008 1972 2,500
8080 1974 5,000
8086 1978 29,000
80286 1982 120,000

80386™ processor 1985


275,000
80486™ DX processor 1989 1,180,000
Pentium® processor 1993 3,100,000
Pentium II processor 1997 7,500,000
Pentium III processor 1999 24,000,000
Pentium 4 processor 2000 55,000,000
TỔNG QUAN HỆ VI XỬ LÝ
Hệ vi xử lý điển hình.
 Một hệ vi xử lý được gọi là một hệ thống trong đó bao gồm :
- Đơn vị nhập xuất: Được sử dụng để nhập và xuất số liệu,
dữ liệu.
- Đơn vị xử lý: Xử lý các dữ liệu nhập vào, sau đó xuất ra
các thiết bị ra.
- Bộ nhớ: Lưu trữ thông tin, dữ liệu trong quá trình xử lý

Tất cả các thiết bị có các chức năng như vậy đều có thể được
gọi là một hệ vi xử lý.
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý
 Một hệ vi xử lý gồm có các thành phần chính sau :

+ Bộ xử lý trung tâm (central processing unit,CPU)


+ Bộ nhớ bán dẫn (ROM,RAM)
+ Khối phối ghép với các thiết bị ngoại vi
(input/output)
+ Các bus truyền thông tin (bus địa chỉ, bus dữ
liệu, bus điều khiển)
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý

Bus dữ liệu

Bus điều khiển

Bộ xử lý Bộ nhớ Phối ghép Thiết


(Memory bị vào
trung vào ra
)
ROM-
tâm (I/O)
RAM Thiết
(CPU)
bị ra

Thanh ghi trong Thanh ghi ngoài

Bus địa chỉ


TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý
• CPU đóng vai trò chủ
đạo trong hệ vi xử lý.
• Đây là một mạch vi điện
tử có độ tích hợp rất cao.
• Khi hoạt động, nó đọc
mã lệnh được ghi dưới
dạng các bit 0 và bit 1 từ
bộ nhớ, sau đó nó sẽ giải
mã các lệnh này thành
các dãy xung điều khiển
ứng với các thao tác
trong lệnh để điều khiển
các khối khác thực hiện
từng bước các thao tác
đó.
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý
Để làm được việc này bên
trong CPU có thanh ghi
dùng để chứa địa chỉ của
lệnh sắp thực hiện gọi là
thanh ghi con trỏ lệnh
(instruction pointer,IP)
hoặc bộ đếm chương
trình (program
counter,PC), một số thanh
ghi đa năng khác dùng bộ
tính toán số học và logic
(ALU) để thao tác với dữ
liệu.
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý
Bộ nhớ bán dẫn hay còn
gọi là bộ nhớ trong là một
bộ phận khác rất quan
trọng của hệ vi xử lý.

Tại đây (trong ROM) ta có


thể chứa chương trình điều
khiển hoạt động của toàn
hệ để khi bật điện thì CPU
có thể lấy lệnh từ đây mà
khởi đầu hệ thống.
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý
Một phần của chương trình
điều khiển hệ thống, các
chương trình ứng dụng, dữ
liệu cùng các kết quả của
chương trình thường được
để trong RAM.

Các dữ liệu và chương


trình muốn lưu trữ lâu dài
sẽ được để ở bộ nhớ
ngoài.
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý

Định nghĩa Chức năng

Bộ nhớ cố •Chứa các số liệu bảng, biểu


định, chứa và tham số hệ thống, các số
liệu cố định của hệ thống.
ROM chương trình
điều hành • Nội dung của ROM không
hoạt động thể thay đổi.
của hệ vi xử
• ROM: Có nhiều chủng loại:

ROM, PROM, EPROM
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý

Định nghĩa Chức năng

Bộ nhớ dữ •Làm môi trường xử lý


liệu động, thông tin, lưu trữ kết quả
nội dung có trung gian và cuối cùng của
RAM thể thay đổi các phép toán, xử lý thông
được trong tin.
quá trình • Là vùng đệm dữ liệu trong
hoạt động
các thao tác thu, phát và
của hệ vxl.
chuyển đổi số liệu
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý
Khối phối ghép vào/ra (I/O)
tạo ra khả năng giao tiếp
giữa hệ vi xử lý với thế giới
bên ngoài . Các thiết bị
ngoại vi như bàn phím,
chuột, màn hình, máy in,
chuyển đổi số tương tự (D/A
converter, DAC) và chuyển
đổi tương tự/số (A/D
converter, ADC)., ổ đĩa từ...
đều liên hệ với hệ vi xử lý
qua bộ phận này.
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý
Bus địa chỉ thường có từ 16,
20, 24 đến 32 đường dây
song song.
Khi đọc/ghi bộ nhớ CPU sẽ
đưa ra trên bus này địa chỉ
của ô nhớ liên quan.
Khả năng phân biệt địa chỉ
phụ thuộc vào số bit của bus
địa chỉ.
Ví dụ nếu một CPU có số
đường dây địa chỉ là N=16 thì
nó có khả năng địa chỉ hóa
được 2N = 65536 =64 kilô ô
nhớkhác nhau (1K= 210
=1024).
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý
Bus dữ liệu thường có từ
8,16, 20, 24, 32 đến 64
đường dây tùy theo các bộ
vi xử lý cụ thể. Số lượng
đường dây này quyết định
số bit dữ liệu mà CPU có
khả năng xử lý cùng một
lúc. Chiều mũi tên trên bus
dữ liệu chỉ ra rằng đây là
bus 2 chiều.,
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý

Bus điều khiển thường gồm


hàng chục đường dây tín
hiệu khác nhau. Mỗi tín hiệu
điều khiển có một chiều
nhất định.
TỔNG QUAN HỆ VI XỬ LÝ
Sơ đồ khối của hệ vi xử lý

Các thiết bị vào (Inputs) là


nơi tiếp nhận dữ liệu và
thông tin điều khiển,
chuyển cho CPU xử lý
Các thiết bị ra (Outputs) là
nơi kết xuất thông tin ra
(màn hình, giấy…), lưu trữ
thông tin lâu dài (đĩa từ, đĩa
quang…)
PHÂN LOẠI VI XỬ LÝ
Phân loại theo mục đích sử dụng

• Dùng cho các máy tính di động (Laptop, PDA…): thiết kế


nhỏ gọn, hoạt động ở mức điện áp và xung clock thấp.

• Dùng cho máy tính để bàn (Desktop Computer): thiết kế


lớn, tốc độ xung clock cao, hệ thống tản nhiệt lớn.

• Dùng cho máy trạm và máy chủ (Workstation, Server): có


yêu cầu kỹ thuật khắc khe do phải vận hành liên tục trong
thời gian dài với cường độ lớn.
PHÂN LOẠI VI XỬ LÝ
Phân loại theo kiến trúc thiết kế

• Netburst: Willamette, Northwood, Prescott, Presscott-2M,


Smithfield, Cedar Mill, Presler

• P6M/Banias: Banias, Dothan, Dothan533, Yonah

• Core/Penryn: Conroe, Wolfdale, Kentsfield, Yorkfield

• Nehalem/ Westmere, Gesher

• Sandy Bridge
PHÂN LOẠI VI XỬ LÝ
Phân loại theo công nghệ chế tạo

• Nhờ vào sự phát triển của khoa học kỹ thuật mà vi xử lý ngày


càng được cải tiến và thu nhỏ kích thước.

• Ví dụ: công nghệ 130nm/ 90nm/ 65nm/ 45nm/ 32nm/ 22nm…


PHÂN LOẠI VI XỬ LÝ
Phân loại theo chức năng

• Vi xử lý đa năng (General Purpose Microprocessor)


• DSP (Digital Signal Processor)
• Vi điều khiển (Microcontroller)
• ASIP (Application Specific Instruction set Processor)
PHÂN LOẠI VI XỬ LÝ
Phân loại theo tập lệnh

• CISC (Complex Instruction Set Computer): Máy tính có tập


lệnh phức tạp. Nhiều lệnh, cấu trúc phức tạp, mỗi lệnh có độ
dài khác nhau và thực hiện trong 1 đến chục chu kỳ xung
nhịp.

• RISC (Reduced Instruction Set Computer): Máy tính có tập


lệnh rút gọn. Ít lệnh, mỗi lệnh có độ dài cố định và thực hiện
từ 1 đến 2 chu kỳ xung nhịp. Cấu trúc vi xử lý đơn giản, có
nhiều thanh ghi. Tốc độ xung nhịp lớn và tiêu thụ năng lượng
thấp.
Chương 2 : Biểu diễn thông
tin trong hệ thống
Hệ đếm
2.1. Hệ đếm
Hệ đếm là tập hợp các ký hiệu và qui tắc sử dụng tập ký
hiệu đó để biểu diễn và xác định các giá trị các số. Mỗi
hệ đếm có một số ký số (digits) hữu hạn. Tổng số ký số
của mỗi hệ đếm được gọi là cơ số (base hay radix), ký
hiệu là b.
2.1.1. Hệ đếm cơ số b
Hệ đếm cơ số b (b ≥ 2 và nguyên dương) được biểu
diễn theo công thức sau :
X = an an-1 ... a1 a0 = anbn + an-1bn-1 +... + a1b + a0
Hệ đếm
2.1.2. Hệ đếm thập phân (Decimal system, b = 10)
Hệ đếm thập phân hay hệ đếm cơ số 10 là một trong
các phát minh của người Ả rập cổ, bao gồm 10 ký số
theo ký hiệu sau :
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Ví dụ: Số 5246 có thể được biểu diễn như sau :
5246 = 5x + 2x + 4x + 6
Hệ đếm
2.1.3. Hệ đếm nhị phân (Binary system, b = 2)
Với cơ số b = 2, chúng ta có hệ đếm nhị phân. Đây là hệ
đếm đơn giản nhất với 2 chữ số là 0 và 1. Mỗi chữ số
nhị phân gọi là BIT (viết tắt từ chữ Binary digit). Vì hệ nhị
phân chỉ có 2 trị số là 0 và 1.
Ví dụ : 1001, 1101010, 11010101, 101.01
Hệ đếm
. Đổi số hệ hai sang hệ mười
Muốn đổi một số từ hệ hai sang hệ mười chỉ cần tính
các giá trị 2i tương ứng với các chữ số khác 0 thứ i của
hệ số hai rồi cộng lại:
Ví dụ: 11101.11 = 1x + 1x +1x + 0x + 1x + 1x + 1x =
29.75
Hệ đếm
.Đổi số hệ mười sang hệ hai
Quy tắc: Lấy số cần đổi chia cho 2 và ghi nhớ phần dư,
tiếp theo lấy thương của phép chia trước đó chia cho 2
và ghi nhớ phần dư. Làm như vậy cho tới khi được
thương bằng 0. Đảo ngược thứ tự dãy các số dư sẽ
được các chữ số của số hệ hai cần tìm.
Hệ đếm
Ví dụ : Đổi số 34 sang hệ hai . Kết quả được 100010B.
34 2
0 17 2
1 8 2
0 4 2
0 2 2
0 1 2
1 0

Các số dư trong khung sẽ được sắp xếp theo chiều mũi tên
Hệ đếm
.Quy tắc đổi số thập phân hệ mười ra hệ hai
Lấy số cần đổi nhân với 2, tích nhận được sẽ gồm phần
nguyên và phần lẻ nhị phân, lấy phần lẻ nhị phân của
tích thu được nhân tiếp với 2. Làm như vậy cho tới khi
được tích chẵn bằng 1. Chọn riêng các phần nguyên
(phần trước dấu phẩy) của các tích thu được và sắp xếp
lại sẽ được các chữ số sau dấu phẩy của số hệ hai cần
tìm.
Hệ đếm
Ví dụ: Đổi số 0.125 ra số hệ hai.
Ta thực hiện phép nhân lần lượt theo các bước trên:
0,125 * 2 = 0,250
0,250 * 2 = 0,500

0,500 * 2 = 1,000
và thu được kết quả là 0,125 = 0,001B (phần được
đóng trong khung).
Kết hợp các ví dụ trên lại, nếu phải đổi số 34,125 ra hệ
hai ta thu được kết quả cuối cùng là 34,125 =
100010,001 B.
Hệ đếm
Các phép toán số học trong hệ 2
•Phép cộng: quy tắc phép cộng trong hệ 2:
a b y C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

•Ví dụ: 99D + 95D


Hệ đếm
Các phép toán số học – phép cộng
•Ví dụ: 99D + 95D

HỆ HỆ NHỊ PHÂN
10
99 0 1 1 0 0 0 1 1
+ 95 0 1 0 1 1 1 1 1
=194 1 1 0 0 0 0 1 0
Số nhị phân không dấu

Chỉ biểu diễn được các giá trị không âm


Với n-bit có thể biểu diễn các giá trị từ 0 đến 2 n – 1
Ví dụ 1.3: Giá trị V của số nhị phân không dấu 1101
được tính:
V(1101) = 1x23 + 1x22 + 0x21 + 1x20
= 8 + 4 + 0 + 1 = 13
Số nhị phân không dấu

Tổng quát: Nếu số nhị phân N n-bit:


N = b( n-1) b( n-2) …. b1 b0
N có giá trị:
V = b(n -1) x 2(n-1)+b (n-2) x2 (n-2)+ … + b1 x 21 + b0 x 20
16 giá trị từ 0 đến 15
Nhị phân không dấu Giá trị thập phân
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 10
1011 11
1100 12
1101 13
1110 14
1111 15
Số nhị phân không dấu

Dải giá tri của các số không dấu 8-bit là [0,255]


(unsigned char trong C)
Dải giá tri của các số không dấu 16-bit là [0,65535]
(unsigned int trong C)
Số nhị phân có dấu

Biểu diễn được cả các giá trị âm


Còn gọi là Số bù hai
Với n-bit có thể biểu diễn các giá trị từ – 2 (n-1) đến
2(n-1) – 1
Tổng quát: Nếu số nhị phân N n-bit:
N = b( n-1) b( n-2) …. b1 b0
thì giá trị V của nó là:
V = –b(n -1) x 2(n-1) + b (n-2) x2 (n-2)+… + b1 x 21 + b0 x 20
16 giá trị từ - 8 đến 7
Nhị phân có dấu Giá trị thập phân
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 -8
1001 -7
1010 -6
1011 -5
1100 -4
1101 -3
1110 -2
1111 -1
Số nhị phân có dấu
Dải giá tri của các số có dấu 8-bit là [-
128,+127] (char trong C)
Dải giá tri của các số có dấu 16-bit là [-
32767,+32766] (int trong C)
Số bù hai

Dùng 8 bit để biểu diễn giá trị số được mã hóa.

Số bù hai 8 bit biểu diễn số âm và dương trong


khoảng (-127…0…+ 126).

Số bù hai biểu diễn số âm thì bit b7 = 1, số dương


b7 = 0
Số bù hai

Ví dụ: Chuyển 25 sang nhị phân có dấu:


Kết quả: 011001
Với số âm: Chuyển đối số sang nhị phân có
dấu rồi lấy bù 2
Số bù hai

Ví dụ 1.6 Chuyển – 26 sang nhị phân

+26 = 1 1 0 1 0
Thêm 0 vào bên = 0 1 1 0 1 0
trái
Số bù 1 = 1 0 0 1 0 1
Cộng 1 + 1
-26 1 0 0 1 1 0
Hệ đếm
Các phép toán số học
•Phép trừ: giống như thực hiện với hệ 10
a b y B
0 0 0 0
0 1 1 1
1 0 1 0
1 1 0 0

•Số bù hai: thực hiện phép trừ bằng phép cộng:


a - b = a + (-b)
Phép trừ
•Ví dụ: 15-13 = 15 + (-13) bằng thanh ghi 8 bit

15 = 0 0 0 0 1 1 1 1
13 = 0 0 0 0 1 1 0 1
Số bù 1 = 1 1 1 1 0 0 1 0
Cộng 1 + 1
-13 1 1 1 1 0 0 1 1
15 0 0 0 0 1 1 1 1
+ (-13) 1 1 1 1 0 0 1 1
15+(-13) = 0 0 0 0 0 0 1 0
Phép trừ
•Ví dụ: 11-13 = 11 + (-13) bằng thanh ghi 8 bit

11 = 0 0 0 0 1 0 1 1
13 = 0 0 0 0 1 1 0 1
Số bù 1 = 1 1 1 1 0 0 1 0
Cộng 1 + 1
-13 1 1 1 1 0 0 1 1
11 0 0 0 0 1 0 1 1
-13 1 1 1 1 0 0 1 1
11+(-13)= -2 = 1 1 1 1 1 1 1 0
Hệ đếm
2.1.4. Hệ đếm cơ số 8 (Octal system, b = 8)
Nếu dùng 1 tập hợp 3 bit thì có thể biểu diễn 8 trị khác
nhau : 000, 001, 010, 011, 100, 101, 110, 111. Các trị
này tương đương với 8 trị trong hệ thập phân là 0, 1, 2,
3, 4, 5, 7. Tập hợp các chữ số này gọi là hệ bát phân, là
hệ đếm với b = 8 = . Trong hệ bát phân, trị vị trí là lũy
thừa của 8.
Ví dụ:
235 . 6 = 2x + 3x + 5x + 6x + 4x = 157. 812
Hệ đếm
2.1.5. Hệ đếm cơ số 16 (Hexa-decimal system, b=16)
Hệ đếm thập lục phân là hệ cơ số b=16 = , tương
đương với tập hợp 4 chữ số nhị phân (4 bit). Khi thể
hiện ở dạng hexa-decimal, ta có 16 ký tự gồm 10 chữ số
từ 0 đến 9, và 6 chữ in A, B, C, D, E, F để biểu diễn các
giá trị số tương ứng là 10, 11, 12, 13, 14, 15. Với hệ thập
lục phân, trị vị trí là lũy thừa của 16.
Ví dụ:
34F5C = 3x + 4x + 15x + 5x + 12x = 216294
Mỗi ký hiệu tương ứng với 4-bit

Hệ 10 Hexa Binary Hệ 10 Hexa Binary

0 0 0000 8 8 1000
1 1 0001 9 9 1001
2 2 0010 10 A 1010
3 3 0011 11 B 1011
4 4 0100 12 C 1100
5 5 0101 13 D 1101
6 6 0110 14 E 1110
7 7 0111 15 F 1111
Chuyển đổi Hexa & nhị phân

-Từ LSB về MSB chia số nhị phân đó thành các


nhóm 4-bit
- Sau đó thay thế mỗi nhóm 4-bit bằng ký hiệu hexa
tương ứng với nó

1100 1010 1111 1110


C A F E

Kết quả: 1100101011111110b = CAFEh


Biểu diễn số nguyên
2.2. Biểu diễn số nguyên
Số nguyên gồm số nguyên không dấu và số nguyên có dấu.
Về nguyên tắc đều dùng 1 chuỗi bit để biểu diễn. Đối với số
nguyên có dấu, người ta sử dụng bit đầu tiên để biểu diễn
dấu và bit này gọi là bit dấu.
2.2.1. Số nguyên không dấu
Trong biểu diễn số nguyên không dấu, mọi bit đều được sử
dụng để biểu diễn giá trị số. Ví dụ 1 dãy 8 bit biểu diễn số
nguyên không dấu có giá trị:
28 = 256 số nguyên dương, cho giá trị từ 0 (0000 0000) đến
255 (1111 1111).
Biểu diễn số nguyên
Với n bits ta có thể biểu diễn 1 số nguyên có giá trị lớn
nhất là -1 và dải giá trị biểu diễn được từ 0 đến -1.
Thí dụ: 00000000 = 0
00000010 = 2
00000100 = 4
………….
11111111 = 255
Biểu diễn số nguyên
2.2.2. Số nguyên có dấu
Trong biểu diễn số nguyên có dấu, bit đầu làm bít dấu: 0
là số dương và 1 cho số âm. Số nguyên có dấu thể hiện
trong máy tính ở dạng nhị phân là số dùng 1 bit làm bít
dấu, người ta qui ước dùng bit ở vị trí đầu tiên bên trái
làm bit dấu (S): 0 là số dương và 1 cho số âm. Cách phổ
biến biểu diễn số âm có dấu là dùng mã bù hai.
Biểu diễn số nguyên
Số bù hai được tính như sau:
Biểu diễn số nguyên không dấu
Nghịch đảo tất cả các bit (số bù một)
Cộng thêm một. (số bù hai)
Thí dụ biểu diễn trên 8 bits:
37 = 00100101
Bù một (nghịch đảo) = 11011010
Bù hai (cộng thêm 1) = 11011011 số -37

Bit dấu
Biểu diễn số thực, biểu diễn
ký tự
2.3. Biểu diễn số thực
Để biểu diễn số thực, trong máy tính người ta dùng ký
pháp dấu phảy động (Floating Point Number). Một cách
tổng quát, một số thực biểu diễn theo cách này gồm 3
thành phần:
N=Mx
Với M: phần định trị (Mantissa), R là cơ số: (Radix), còn
E là phần số mũ (Exponent)
Biểu diễn số thực, biểu diễn
ký tự
Ví dụ, với cơ số R = 10, giả sử 2 số thực N1 và N2 được
lưu trữ theo phần định trị và số mũ như sau:
M1 = -15 và E1 = +12
M2 = +314 và E2 = -9
Có nghĩa là
N1 = M1 x = -15x = -15 000 000 000 000

N2 = M2 x = 314 x = 0.000 000 314
Biểu diễn số thực, biểu diễn
ký tự
2.4. Biểu diễn ký tự
Tất cả thông tin trong máy tính đều được biểu diễn dưới
dạng các số 0 và 1. Mỗi tổ hợp các số 0 và 1 được gán
một ký tự chữ cái, chữ số, hoặc một ký tự khác theo một
cách thức nhất định.
Trong thực tế thông tin được truyền đi, được lưu trữ
trong các bộ nhớ, hoặc để hiển thị lên màn hình đều ở
dưới dạng ký tự và tuân theo một loại mã được dùng rất
rộng rãi gọi là mã ASCII( American Code for Information
Interchange )
Biểu diễn số thực, biểu diễn
ký tự
Trong bảng mã ASCII tiêu chuẩn, người ta dùng 7 bit để
mã hóa các ký tự thông dụng, như vậy bảng mã này sẽ
có 128 ký tự ứng với các mã số từ 0..127. Bit thứ 8 có
thể cho liên tục bằng 0, 1 hoặc có thể dùng để chứa bit
parity (bit chẵn lẻ) phục vụ cho việc phát hiện lỗi khi
truyền.
Bên cạnh bảng ASCII tiêu chuẩn người ta còn
dùng bảng ASCII mở rộng cho các ký tự đặc biệt (khác
các ký tự tiêu chuẩn) với mã từ 128.. 255.
Hexa- 0 1 2 3 4 5 6 7
decimal
0 <NUL> <DLE> <SP> 0 @ P ` P
0 16 32 48 64 80 96 112
1 <SOH> <DC1> ! 1 A Q a q
1 17 33 49 65 81 97 113
2 <STX> <DC2> “ 2 B R b r
2 18 34 50 66 82 98 114
3 <ETX> <DC3> # 3 C S c s
3 19 35 51 67 83 99 115
4 <EOT> <DC4> $ 4 D T d t
4 20 36 52 68 84 100 116
5 <ENQ> <NAK> % 5 E U e u
5 21 37 53 69 85 101 117
6 <ACK> <SYN> & 6 F V f v
6 22 38 54 70 86 102 118
7 <BEL> <ETB> ‘ 7 G W g w
7 23 39 55 71 87 103 119
8 <BS> <CAN> ( 8 H X h x
8 24 40 56 72 88 104 120
9 <HT> <EM> ) 9 I Y i y
9 25 41 57 73 89 105 121
A <LF> <SUB> * : J Z j z
10 26 42 58 74 90 106 122
B <VT> <ESC> + ; K [ k {
11 27 43 59 75 91 107 123
C <FF> <FS> , < L \ l |
12 28 44 60 76 92 108 124
D <CR> <GS> - = M ] m }
13 29 45 61 77 93 109 125
E <SO> <RSI> . > N ^ n ~
14 30 46 62 78 94 110 126
F <SI> <US> / ? O _ o <DEL>
15 31 47 63 79 95 111 127
Bảng mã ASCII mở rộng
Biểu diễn số thực, biểu diễn
ký tự
Ví dụ: Mã ASCII của một số ký tự thường dùng trong khi
lập trình:
<Bel> (Bell, chuông): 07H
<BS> (Back space, xoá lùi): 08H
<HT> (Horizont tab, giãn cách ngang): 09H
<LF> (Line feed, thêm dòng mới): 0AH
Biểu diễn số thực, biểu diễn
ký tự
Khi xem xét bảng ta có thể rút ra mấy nhận xét sơ bộ
như sau:
2 cột đầu của bảng mã được dùng cho các ký tự điều
khiển.
Cột 2 dành riêng cho các ký tự ngăn cách
Các ký tự số nằm ở cột 3. Mã của ký tự ‘0’ là 30H. ‘9’ là
39H.Giữa giá trị số và mã ASCII của số đó có khoảng
cách là 30H.
Các chữ cái hoa nằm ở các cột 4,5, các chữ cái thường
ở cột 6,7.Khoảng cách giữa chữ thường và chữ hoa
cùng tên là 20H.
Mã BCD (số hệ 10 mã hóa bằng hệ 2)

•Dùng 4 số hệ 2 để mã hóa cho một số hệ 10 có giá trị


nằm trong khoảng 0 – 9.

•Biểu diễn theo kiểu BCD cho số 541:


5 = 0101; 4 = 0100; 1 = 0001
Biểu diễn kiểu BCD của 541 = 0101 0100 0001

•Các tổ hợp 4-bit không sử dụng gọi là các tổ hợp cấm


•Nhiều linh kiện điện tử sử dụng mã này (Bộ giải mã
BCD-LED bảy đoạn 7447)
Bảng mã BCD

Thập phân BCD Thập phân BCD


0 0000 8 1000
1 0001 9 1001
2 0010 1010
3 0011 1011
4 0100 1100
5 0101 1101
6 0110 1110
7 0111 1111
Mã BCD, thao tác với hệ hexa
Ví dụ : 7D = 0111 (BCD 8421)
= 1000 (BCD 7421)
= 1010 (BCD 5121)
.Quan hệ giữa mã ASCII với số BCD
Trong khi làm toán với các số BCD ta thường kết hợp 2
số BCD thành 1 byte. Dạng số BCD viết theo kiểu này
gọi là dạng BCD chuẩn hay còn được gọi là dạng BCD
gói (packed BCD). Khi lưu trữ, khi hiển thị hoặc khi
truyền giữa các thiết bị các giá trị số 0 .. 9, thực chất ta
làm việc với mã ASCII của các số đó, tức là các số
30H .. 39H.
Mã BCD, thao tác với hệ hexa
Như vậy ta thấy trong 1 byte mã ASCII biểu diễn các số
0 ..9 có 4 bit thấp ứng với mã BCD của chính các số đó,
4 bit cao bao giờ cũng ứng với mã BCD của số 3 (tức là
0011B). Nếu trong byte mã ASCII này ta thay 4 bit cao
bằng 0H thì ta thu được số BCD không gói. Nói cách
khác số BCD không gói là số dài 1 byte, trong đó 4 bit
cao bằng không, 4 bit thấp là số BCD chuẩn mã hóa số
cần biểu diễn.
Mã BCD, thao tác với hệ hexa
Ví dụ sau minh họa quan hệ giữa số BCD gói, BCD
không gói và mã ASCII.
Mã ASCII của 5 là 0011 0101B = 35H
Mã ASCII của 9 là 0011 1001B = 39H
Mã ASCII không gói của 5 là 0000 0101B = 05H
Mã ASCII không gói của 9 là 0000 1001B = 09H
Mã ASCII gói (chuẩn) của 59 là 0101 1001B = 59H
Mã BCD, thao tác với hệ hexa
Từ đây ta có thể rút ra các bước phải làm để đổi 2 số ở
dạng mã ASCII sang dạng số BCD chuẩn:
- Đổi số đầu tiên từ mã ASCII ra số BCD không gói
- Đổi số thứ 2 từ mã ASCII ra số BCD không gói
- Lấy 4 bit thấp của số đầu ghép với 4 bit thấp của số
sau tạo thành 1 byte biểu diễn số BCD gói.
Đây là các công việc hay gặp khi thao tác với các số
trong các hệ vi xử lý.
Mã BCD, thao tác với hệ hexa
2.6. Thao tác đối với hệ Hexa
2.6.1. Phép cộng
Thực hiện chuyển các số hex cần cộng thành các số nhị
phân, tính kết quả trên số nhị phân và sau đó chuyển lại
thành số hex.
VD:
7Ah → 01111010b
+ 3Fh → 00111111b

B9h ← 10111001b
Mã BCD, thao tác với hệ hexa
Thực hiện cộng trực tiếp trên số hex, nếu kết quả cộng
lớn hơn 15 thì sẽ nhớ và trừ cho 16.
VD:
7 Ah
+ 3 Fh
10 25 → B9h
Ah + Fh = 10 + 15 = 25 → nhớ 1 và 25 – 16 = 9 = 9h
7h + 3h = 7 + 3 = 10 → cộng số nhớ: 10 + 1 = 11 = Bh
Mã BCD, thao tác với hệ hexa
2.6.2. Phép trừ
Khi trừ một số nhỏ hơn cho một số lớn hơn ta cũng
mượn 1 ở cột kế tiếp bên trái nghĩa là cộng thêm 16 rồi
mới trừ.
VD : E95h - 87Ch = 619h
4A,5h – 3B,7h = 0E,Eh
2.6.3. Phép nhân
Muốn thực hiện phép nhân trong hệ 16 ta phải đổi các
số trong mỗi thừa số về thập phân, nhân 2 số với nhau.
Sau đó, đổi kết quả về hệ 16.
Chương 3: Kiến trúc phần
mềm của bộ VXL 8086/8088
Cấu trúc bộ vi xử lý 8086/8088
Bộ vi xử lý 8086/8088 là một bộ vi xử lý phổ biến một thời
của hãng Intel và được ứng dụng rộng rãi
Cho đến ngày nay, các bộ vi xử lý hiện đại vẫn có tính kế
thừa về phần cứng và tập lệnh của bộ vi xử lý này
Kiến trúc khá đơn giản và nguyên gốc
Có tập lệnh dễ tiếp nhận đối với các sinh viên và người đọc
bắt đầu nghiên cứu về bộ vi xử lý
AX BIU
BX
EU
Các thanh ghi TỔNG BUS dữ
CX
đa năng liệu
DX
SP CS BUS
Các
Các thanh ghi DS trong
BP thanh
con trỏ và chỉ số
SS CPU
SI ghi
ES 8 bit dữ
DI đoạn và
IP liệu
con trỏ
20 bit
lệnh
BUS dữ liệu ALU địa chỉ
(16 bit)
Logic
Các thanh ghi tạm thời Điều khiển
BUS BUS
Điều ngoài
ALU
khiển
EU Đệm lệnh
thanh ghi cờ (6byte cho 8086)
Cấu trúc bộ vi xử lý 8086/8088
Khối phối ghép BIU (Bus interface unit):
Khi CPU hoạt động thì EU cung cấp thông tin
về địa chỉ cho BIU, BIU đọc lệnh và dữ liệu
hay Thực hiện chức năng đưa địa chỉ ra bus và
trao đổi dữ liệu với bus(đọc lệnh và dữ liệu)

- Các thanh ghi đoạn: CS, DS, ES,SS


- Con trỏ lệnh IP
Cấu trúc bộ vi xử lý 8086/8088
Khối phối ghép BIU (Bus interface unit):
-Bộ đệm lệnh(hàng đợi lênh):
dung lượng 4 byte chứa mã lệnh đọc được để
chờ EU xử lý. Với cơ chế xử lý xen kẽ liên tục
dòng lệnh giúp EU và BIU làm việc đồng thời:
BIU đọc mã lệnh, giải mã lệnh do khối EU thực
hiện.
Bộ đệm lệnh làm việc theo kiểu “vào trước ra
trước”
Tăng tốc độ xử lý thông tin tổng thể của CPU
Cấu trúc bộ vi xử lý 8086/8088
Khối phối ghép BIU (Bus interface unit):
- Các bus dữ liệu (8 bit) và bus địa chỉ (20bit):
truyền dữ liệu và địa chỉ khi EU yêu cầu.
Cấu trúc bộ vi xử lý 8086/8088
Khối thực hiện lênh EU (execution unit):
Thực hiện giải mã lệnh và thực hiện lệnh
-Khối điều khiển CU (control unit):
 mã lệnh lấy từ bộ nhớ đưa đến đầu vào bộ
giải mã lệnh.
Đầu ra bộ giải mã đưa đến bộ tạo xung điều
khiển
Dãy xung thu được điều khiển hoạt động bên
trong và bên ngoài CPU
Cấu trúc bộ vi xử lý 8086/8088
Khối thực hiện lênh EU (execution unit):
- Khối số học và logic ALU:thực hiện các phép
toán học và logic, thực hiện các thao tác khác
nhau với các toán hạng của lệnh.
- Các thanh ghi đa năng AX, BX, CX, DX, các
thanh ghi con trỏ và chỉ số: SP, BP, SI, DI và các
thanh ghi tạm, thanh ghi cờ.
- Các bus dữ liệu ALU (16 bit), BUS điều khiển
Cấu trúc bộ vi xử lý 8086/8088
Bộ đệm lệnh(hàng đợi lệnh) của 8088 có 4byte
- Dùng để chứa các mã lệnh được BIU đọc, chờ
được EU thực hiện
- Thông qua bộ đệm lệnh CPU sẽ thực hiện công
việc thông qua cơ chế xử lý xen kẽ các dòng mã
lệnh.
- Bộ đệm lệnh làm việc theo kiểu vào trước ra
trước(first in- first out, FIFO), byte nào được cất
vào đệm trước sẽ được lấy ra xử lý trước.
Cấu trúc bộ vi xử lý 8086/8088
F: đọc lệnh
D: giải mã lệnh
E: thực hiện lệnh

Không có
F1 D1 E1 F2 D2 E2 F3 D3 E3
pipelining

Có pipelining F1 D1 E1
F2 D2 E2
F3 D3 E3
Cấu trúc bộ vi xử lý 8086/8088
Dung lượng nhớ của bộ vxl 8088
•Khối BIU có BUS địa chỉ 20 bit, nên 8088 có
khả năng phân biệt được 220 = 1.048.567 = 1M ô
nhớ hay 1Mbyte, vì các bộ nhớ nói chung được
tổ chức theo byte. Nói cách khác không gian địa
chỉ của 8088 là 1 Mbyte
Cấu trúc bộ vi xử lý 8086/8088
Dung lượng nhớ của bộ vxl 8088
•Không gian 1Mbyte của 8088 chia làm các
vùng khác nhau,dùng để:
• Chứa mã chương trình (các câu lệnh của
chương trình) dung lượng tối đa 64Kbyte.
• Chứa dữ liệu và kết quả trung gian của
chương trình, dung lượng tối đa 64Kbyte
• Quản lý các thông số khi gọi chương trình
con, hay trở về từ chương trình con.
Cấu trúc bộ vi xử lý 8086/8088
Các thanh ghi đoạn
Đn: là thanh ghi 16 bit dùng để xác định địa chỉ
của ô nhớ nằm ở đầu các đoạn.
Gồm 4 thanh ghi đoạn: DS, CS, SS và ES.
Thanh ghi đoạn dữ liệu DS: là thanh ghi 16 bit
chứa địa chỉ đầu của đoạn dữ liệu (đoạn dữ liệu
dùng để chứa dữ liệu, kết quả trung gian của
chương trình có dung lượng 64KByte)
Cấu trúc bộ vi xử lý 8086/8088
Các thanh ghi đoạn
Thanh ghi đoạn mã CS: là thanh ghi 16 bit chứa
địa chỉ đầu của đoạn mã (đoạn mã chứa mã của
chương trình có dung lượng 64KByte)
Thanh ghi ngăn xếp SS: là thanh ghi 16 bit chứa
địa chỉ đầu của đoạn ngăn xếp (đoạn ngăn xếp
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 có dung lượng 64KByte)
Cấu trúc bộ vi xử lý 8086/8088
Các thanh ghi đoạn
Thanh ghi dữ liệu phụ ES: thanh ghi 16bit chứa
địa chỉ đầu của đoạn dữ liệu phụ (chứa nội dung
dữ liệu dữ trữ, dung lượng của đoạn 64KByte)
CS Đoạn mã
SS
Đoạn ngăn xếp
DS
Đoạn dữ liệu
ES
Đoạn d.liệu phụ

Các thanh ghi DS, CS, SS và ES xác định địa


chỉ đầu mỗi đoạn hay còn gọi là địa chỉ cơ sở.
Cấu trúc bộ vi xử lý 8086/8088
Các thanh ghi đoạn

Địa chỉ của các ô nhớ khác


trong đoạn nhớ được xác
định: địa chỉ cơ sở +
khoảng lệch(địa chỉ lệch Độ lệch
hay độ lệch: offset).
CS

Khoảng lệch: xác định bởi thanh ghi 16 bit


(thanh ghi lệch: offset register)
Cấu trúc bộ vi xử lý 8086/8088
Các thanh ghi đoạn
Địa chỉ vật lý: là địa chỉ của ô nhớ nào đó trong
đoạn nhớ bất kỳ có độ dài 20 bit
Địa chỉ vật lý 20 bit: CPU 8088 dùng hai thanh ghi 16
bit: một chứa địa chỉ cơ sở, một chứa khoảng lệch của
ô nhớ, địa chỉ vật lý xác định bởi:
Địa chỉ vật lý = thanh ghi đoạn x 16 + thanh ghi lệch
Cấu trúc bộ vi xử lý 8086/8088
Các thanh ghi đoạn
Địa chỉ logic: dùng hai thanh ghi chứa thông tin về địa
chỉ, ký hiệu:

Thanh ghi đoạn: thanh ghi


lệch
Hay segment:offset
Ví dụ: địa chỉ logic CS:IP→ chỉ địa chỉ sắp thực hiện
trong đoạn mã.
Cấu trúc bộ vi xử lý 8086/8088
Các thanh ghi đoạn
Chuyển đổi địa chỉ logic sang địa chỉ vật lý:

CS = F000H, IP = FFF0H
Thì CS:IP ↔ F000Hx10H + FFF0H
= F0000H + FFF0H = FFFF0H
Cấu trúc bộ vi xử lý 8086/8088
Các thanh đa năng
Là các thanh ghi 16 bit: AX, BX, CX và DX.
Dùng để chứa các loại dữ liệu khác nhau, và
được sử dụng vào các công việc đặc biệt. Để
CPU truy nhập dữ liệu nhanh hơn vào các ô nhớ
của bộ nhớ.
Các thanh ghi: AX, BX, CX và DX có thể tách
thành các thanh ghi 8 bit khi cần chứa dữ liệu 8
bit
Cấu trúc bộ vi xử lý 8086/8088
Các thanh đa năng

AX 15 …. …. … …. 8 7 …. …. 2 1 0
. . … . .

15 …. …. … …. 8 7 …. …. … …. 0
. . … . . . … .
AH AL
Cấu trúc bộ vi xử lý 8086/8088
Các thanh đa năng
AH AL
AX

BH BL
BX

CH CL
CX

DH DL
DX
Cấu trúc bộ vi xử lý 8086/8088
Các thanh đa năng
Thanh ghi AX: là thanh chứa, dùng để chứa các
kết quả của phép nhân, chia có độ dài 16 bit, dữ
liệu 8 bit chứa vào AL.

BX: thanh ghi cơ sở, chứa địa chỉ cơ sở của


bảng trong lệnh XLAT
Cấu trúc bộ vi xử lý 8086/8088
Các thanh đa năng

Thanh ghi CX: có chức năng như một bộ đếm,


chứa số lần lặp trong các lệnh loop, CL chứa số
lần dịch trong các lệnh dịch và quay

Thanh ghi DX: thanh ghi dữ liệu. DX cùng AX


chứa kết quả của phép nhân hoặc chia các số 16
bit
Cấu trúc bộ vi xử lý 8086/8088
Các thanh con trỏ và chỉ số
Các thanh ghi con trỏ

IP: con trỏ BP: con SP: con trỏ


lệnh trỏ cơ sở ngăn xếp
- IP luôn trỏ - Trỏ vào - SP trỏ vào
vào lệnh sẽ dữ liệu đỉnh hiện thời
được thực trong đoạn của ngăn xếp
hiện trong ngăn xếp trong đoạn
đoạn mã, có SS có địa ngăn xếp SS,
địa chỉ CS:IP chỉ SS:BP địa chỉ SS:SP
Cấu trúc bộ vi xử lý 8086/8088
Các thanh con trỏ và chỉ số
Các thanh ghi chỉ số

SI: chỉ số gốc(nguồn): DI: chỉ số đích:


- SI chỉ vào dữ liệu - DI chỉ vào dữ
nằm trong đoạn dữ liệu nằm trong
liệu DS có địa chỉ đoạn dữ liệu DS,
DS:SI địa chỉ DS:DI
Cấu trúc bộ vi xử lý 8086/8088
Thanh ghi cờ FR
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
Cấu trúc bộ vi xử lý 8086/8088
Các cờ trạng thái
Phản ảnh trạng thái khác nhau của kết quả sau
mỗi thao tác của ALU hay EU
Cờ nhớ CF: khi CF = 1 có nhớ hay mượn từ
MSB
Cờ chẵn lẻ PF: khi PF = 1 thì tổng số bit 1 trong
kết quả chẵn
Cờ nhớ phụ AF: khi AF = 1 có nhớ từ số BCD
thấp sang BCD cao
Cấu trúc bộ vi xử lý 8086/8088
Các cờ trạng thái
Cờ dấu SF: SF =1 khi kết quả âm

Cờ tràn OF: OF = 1 khi kết quả là số bù hai vượt


ra ngoài giới hạn biểu diễn

Cờ rỗng ZF: ZF = 1 khi kết quả bằng 0


Cấu trúc bộ vi xử lý 8086/8088
Các cờ điều khiển
Được lập hay xóa bằng lệnh riêng

Cờ bẫy TF: khi TF=1 thì CPU ở chế độ chạy


từng lệnh
Cờ ngắt IF: IF = 1 thì CPU cho phép các yêu cầu
ngắt được thực hiện
Cờ hướng DF: DF = 1 thì CPU làm việc với
chuỗi ký tự từ phải sang trái
Cấu trúc bộ vi xử lý 8086/8088
So sánh 8086 và 8088
Giống nhau

Dung lượng bộ nhớ tối đa có thể đọc 1MB.


Có cùng một tập lệnh.
Có cùng kiến trúc vi xử lý

Khác nhau

 8086 có 16 bit dữ liệu , 8088 có 8 bit dữ liệu


 Bộ đệm lệnh 8086 có 6 byte, 8088 có 4 byte.
Các chế độ địa chỉ của bộ vi xử lý 8088
•Chế độ địa chỉ thanh ghi:
- Dùng các thanh ghi bên trong CPU như các
toán hạng để chứa dữ liệu cần thao tác
Ví dụ:
MOV BX,DX ;chuyển nd DX vào BX
ADD AL,DL ;cộng nội dung của AL và DL kết quả
đưa vào AL
Ưu điểm: để CPU thực hiện lệnh có thể đạt được tốc
độ truy nhập cao hơn khi các lệnh truy nhập đến bộ
nhớ
Các chế độ địa chỉ của bộ vi xử lý 8088
•Chế độ địa chỉ tức thời:
- Toán hạng đích là thanh ghi hay ô nhớ
- Toán hạng nguồn là hằng số

Ví dụ:
MOV CL, 100 ;chuyển 100 vào CL
MOV [BX],10 ;chuyển 10 vào ô nhớ tại địa chỉ
DS:BX
Các chế độ địa chỉ của bộ vi xử lý 8088
•Chế độ địa chỉ trực tiếp:
- Một toán hạng chứa địa chỉ lệch của ô nhớ chứa
dữ liệu.
- Toán hạng còn lại chỉ là thanh ghi không là ô nhớ
Ví dụ:
MOV AL, [1234H] ; chuyển nd ô nhớ DS:1234 vào AL
MOV [3421H],CX ;chuyển nd của CX vào 2 ô nhớ
DS:3421 và DS:3422
Các chế độ địa chỉ của bộ vi xử lý 8088
•Chế độ địa chỉ gián tiếp qua thanh ghi:
- Một toán hạng là một thanh ghi chứa địa chỉ lệch
của ô nhớ chứa dữ liệu.
- Toán hạng còn lại là thanh ghi không là ô nhớ.

Ví dụ:
MOV AL, [BX] ; chuyển nd ô nhớ DS:BX vào AL
MOV [SI],CL ;chuyển nd của CL vào ô nhớ
DS:SI
Các chế độ địa chỉ của bộ vi xử lý 8088
•Chế độ địa chỉ tương đối cơ sở:
- Các thanh ghi cơ sở BX, BP và các hằng số
biểu diễn các giá trị di chuyển để tính giá trị hiệu dụng
của các toán hạng trong vùng nhớ DS và SS,
- Giá trị dịch chuyển xác định tính tương đối của
địa chỉ
Ví dụ:
MOV CX, [BX] +10 ; chuyển nd 2 ô nhớ liên tiếp
DS:(BX +10) và DS: (BX +11)vào CX
MOV CL, [BP] +3 ;chuyển nd của ô nhớ DS:(BP +
3) vào CL
Các chế độ địa chỉ của bộ vi xử lý 8088
•Chế độ địa chỉ tương đối chỉ số:
- Các thanh ghi chỉ số SI, DI và các hằng số biểu
diễn các giá trị di chuyển để tính giá trị hiệu dụng của
các toán hạng trong vùng nhớ DS.
Ví dụ:
MOV CX, [SI] +10 ; chuyển nd 2 ô nhớ liên tiếp
DS:(SI +10) và DS: (SI +11)vào CX
MOV CL, [DI] +3 ;chuyển nd của ô nhớ DS:(DI
+ 3) vào CL
Các chế độ địa chỉ của bộ vi xử lý 8088
•Chế độ địa chỉ tương đối chỉ số cơ sở:
- Kết hợp hai chế độ địa chỉ chỉ số và cơ sở tạo
ra chế độ địa chỉ tương đối chỉ số cơ sở.
Ví dụ:
MOV CX, [BX][SI] +10 ; chuyển nd 2 ô nhớ liên
tiếp DS:(BX + SI +10) và DS: (BX + SI +11)vào
CX
MOV CL, [DI + BP+3] ;chuyển nd của ô nhớ
DS:(DI +BP + 3) vào CL
• Bảng tóm tắt các chế độ địa chỉ
Chế độ địa chỉ Toán hạng Thanh ghi đoạn ngầm định
Thanh ghi Reg
Tức thì Data
Trực tiếp [offset] DS
Gián tiếp qua thanh ghi [BX] DS
[SI], [DI] DS
Tương đối cơ sở [BX] + Disp DS
[BP] + Disp SS
Tương đối chỉ số [DI] + Disp DS
[SI] + Disp DS
Tương đối chỉ số cơ sở [BX] +[SI] + Disp DS
[BX] +DI] +Disp DS
[BP] + [DI] + Disp SS
[BP] + [SI] + Disp SS
• Các thanh ghi đoạn và thanh ghi lệch ngầm định

Thanh ghi đoạn CS DS ES SS


Thanh ghi lệch IP SI, DI, BX DI SP, BP
Tập lệnh của 8086/8088
Nhóm lệnh chuyển dữ liệu
MOV(MOVe)
– Dạng lệnh: MOV DES,SRC
– DES(Destination): Toán hạng Đích
– SRC(Source): Toán hạng Nguồn
Tác dụng:
– Di chuyển dữ liệu từ Nguồn tới đích
Ví Dụ :
– MOV AX,DX
– MOV AL,BH

125
XCHG(eXCHanGe)
Dạng lệnh:
– XCHG OPR1,OPR2
Tác dụng:
– Trao đổi nội dung hai toán hạng
Ví Dụ :
– XCHG AX,BX
– XCHG AL,CL

126
PUSH(Push Word on to Stack)
Dạng lệnh:
– PUSH SRC
Tác dụng:
– Lấy nội dung của toán hạng Nguồn đặt vào đỉnh của
ngăn xếp.
– Toán hạng Nguồn phải có dung lượng là 2byte
Cờ bị ảnh hưởng: Không
Ví Dụ :
– PUSH AX
– PUSH BX
– PUSH CX
127
POP(Pop Word Off Stack to
Destination)
Dạng lệnh:
– POP DES
Tác dụng:
– Lấy dữ liệu tại đỉnh ngăn xếp đưa vào toán hạng Đích.
– Đích phải có dung lượng là 2 byte
Cờ bị ảnh hưởng: Không
Ví Dụ :
– POP BX
– POP CX
– POP DX

128
XLAT(Translate)
Dạng lệnh:
– XLAT table[BX]
Tác dụng:
– BX phải chứa địa chỉ offset của bảng nguồn
có chiều dài tối đa là 256 byte. AL chứa chỉ số
của các phần tử trong bảng. Chuyển nội dung
của ô nhớ có địa chỉ BX trong table vào thanh
ghi AL.

129
Nhóm lệnh truyền dữ liệu kiểu chuỗi
Căn cứ vào giá trị của cờ DF để xử lý các thanh ghi SI và DI
theo chiều tăng hay giảm
Assembler Tác dụng
MOVSB Byte tại DS:SI ES:DI
MOVSW Word tại DS:SIES:DI
LODSB Byte DS:SI AL
LODSW Word DS:SI  AX
STOSB ALES:DI
STOSW AXES:DI
SCASB AL-ES:DI
SCASW AX-ES:DI
CMPSB Byte tại DS:SI-ES:DI
CMPSW Word tại DS:SI-ES:DI

130
LDS(Load Data Segment
Register)
Dạng lệnh:
– LDS DES,SRC
Trong đó:
– SRC là một ô nhớ có địa chỉ đoạn là DS.
– Lệnh này chuyển nội dung của ô nhớ tại
DS:SRC vào DES sau đó tăng SRC lên 2
– DESDS:SRC
– SRCSRC+2

131
LES(Load Extra Segment
Register)
Dạng lệnh:
– LES DES, SRC
– Chỉ Khác LDS là sử dụng thanh ghi ES
– DESES:SRC
– SRCSRC+2

132
Nhóm lệnh chuyển địa chỉ
LEA(Load Effective Address)
– Dạng lệnh: LEA DES,SRC
– Chuyển địa chỉ độ lệch của SRC vào DES.
– Ví Dụ :
– LEA DX,msg
– MOV AX,Strname
Chuyển địa chỉ đoạn
– Ta biết rằng ta không thể đưa các giá trị tức thì vào
thanh ghi đoạn, do vậy ta phải sử dụng các thanh ghi
đa năng làm thanh ghi trung gian để khởi tạo địa chỉ
đoạn
– MOV AX,@Data
– MOV DS,AX
133
Nhóm lệnh chuyển cờ hiệu

LAHF(Load AH from Flags)


– Dạng lệnh: LAHF
– Chuyển 8 bit phần thấp của thanh ghi cờ hiệu vào AH
SAHF(Store AH to Flags)
– Dạng lệnh: SAHF
– Lưu AH vào 8 bit thấp của thanh ghi cờ
PUSHF(Push Flags onto Stack)
– Dạng lệnh: PUSHF
– Cất thanh ghi cờ hiệu vào đỉnh của ngăn xếp sau đó
giảm SP = SP -2
Cờ bị ảnh hưởng: Không
134
Nhóm lệnh chuyển cờ hiệu (tiếp)
POPF(Pop Flags Off Stack)
– Dạng lệnh: POPF
– Chuyển nội dung của đỉnh ngăn xếp vào thanh ghi cờ sau đó
tăng SP lên
– SP=SP+2
– Cờ bị ảnh hưởng: Tất cả
CLC(Clear Carry Flag)
– Dạng lệnh: CLC
– Tác dụng: Xóa cờ CF (CF = 0)
– Cờ bị ảnh hưởng: CF
CLD(Clear Direction Flag)
– Dạng lệnh: CLD
– Tác dụng: Xóa DF (DF = 0)
– Cờ bị ảnh hưởng: DF
135
Nhóm lệnh chuyển cờ hiệu (tiếp)

CLI(Clear Interupt Flag)


– Dạng lệnh: CLI
– Tác dụng: Xóa IF
– Cờ bị ảnh hưởng: IF
CMC(Complement Cary Flag)
– Dạng lệnh: CMC
– Tác dụng: Lấy bù CF
– Cờ bị ảnh hưởng: CF
STC(Set Cary Flag)
– Dạng lệnh: STC
– Tác dụng: Thiết lập CF
– Cờ bị ảnh hưởng: CF
136
Nhóm lệnh chuyển cờ hiệu (tiếp)

STD(Set Direction Flag)


– Dạng lệnh: STD
– Tác dụng: Thiết lập DF
– Cờ bị ảnh hưởng: DF
STI(Set Interupt Flag)
– Dạng lệnh: STI
– Tác dụng: Thiết lập IF
– Cờ bị ảnh hưởng: IF

137
Nhóm lệnh vào ra

CPU giao tiếp với các thiết bị ngoại vi thông qua


các cổng vào ra.
Mỗi cổng vào ra có địa chỉ nhất định dài 16 bit
để đánh dấu.
Khi CPU muốn điều khiển thiết bị ngoại vi nó gửi
dữ liệu điều khiển ra địa chỉ cổng dài 16 bit
Mỗi lần gửi chỉ được một số bit nhất định tuỳ
thuộc vào bus dữ liệu

138
IN(Input Byte or Word)

Cấu trúc
– IN R8,PORT
– IN R16,PORT
PORT: Địa chỉ cổng
R8,R16: Thanh ghi 8 hay 16 bit
Tác dụng: Đọc dữ liệu 8 hay 16 bit tại cổng ngoại vi có
địa chỉ PORT vào thanh ghi dài 8 hay 16 bit
Cờ bị ảnh hưởng: Không
Ví Dụ :
– IN DL,02F8H
– IN AX,02FFH
139
OUT(Output Byte or Word)

Cấu trúc
– OUT PORT, R8
– OUT PORT,R16
Tác dụng:
– Gửi 8 hay 16 bit ra cổng có địa chỉ Port
Cờ bị ảnh hưởng: Không
Ví Dụ :
– OUT 02F8H,AL
– OUT 02F8H,AX

140
Nhóm lệnh số học
ADD(Addition)
– Dạng lệnh:
ADD DES,SRC
– DES  DES + SRC
– Không nhớ, ảnh hưởng tới cờ CF, AF, PF, SF, ZF, OF
ADC(Add with Carry)
– Dạng lệnh:
ADC DES,SRC
– DES  DES + SRC + CF
– Có nhớ, ảnh hưởng tới cờ: AF, CF, OF, PF, SF, ZF

141
Nhóm lệnh số học (tiếp)

INC(Increment)
– Dạng lệnh:
INC DES
– Tăng DES lên 1: DES  DES + 1
– Ảnh hưởng tới cờ: AF, PF, SF, ZF, OF
SUB(Subtract)
– Dạng lệnh:
SUB DES,SRC
– Trừ không có nhớ: DES  DES - SRC
– Ảnh hưởng tới cờ: CF, AF, PF, SF, ZF, OF

142
Nhóm lệnh số học (tiếp)

SBB(Subtract With Borrow)


– Dạng lệnh:
SBB DES,SRC
– Trừ có nhớ: DES  DES – SRC - CF
– Ảnh hưởng tới cờ: CF, AF, PF, SF, ZF
DEC(Decrement)
– Dạng lệnh:
DEC DES
– DES = DES –1
– Ảnh hưởng tới cờ: AF, PF, SF, ZF, OF

143
Nhóm lệnh số học (tiếp)

NEG(Negate)
– Dạng lệnh:
NEG DES
– DES  - DES
– Ảnh hưởng tới cờ: AF, PF, SF, ZF, OF
MUL(Multiply- Nhân số không có dấu)
– Dạng lệnh:
MUL SRC
– Nếu SRC 8 bit:AX = AL * SRC
– Nếu SRC 16 bit: DX:AX = AX * SRC
– Ảnh hưởng tới :CF, OF
144
Nhóm lệnh số học (tiếp)

NOP(No Operation)
– Dạng lệnh:
NOP
– Tác dụng: Không làm gì cả
– Cờ bị ảnh hưởng: Không
IMUL(Integer Multiplycation - Nhân số có dấu)
– Dạng lệnh:
IMUL SRC
– Nếu SRC 8 bit:AX = AL * SRC
– Nếu SRC 16 bit: DX:AX = AX * SRC
– Ảnh hưởng cờ :CF, OF
145
Nhóm lệnh số học (tiếp)

DIV(Divide - Chia không dấu)


– Dạng lệnh: DIV SRC
– Nếu SRC 8 bit vi xử lý thực hiện lệnh: AX/SRC. Sau
khi thực hiện lệnh: AL chứa thương số, AH chứa số

– Nếu SRC 16 bit vi xử lý thực hiện lệnh: DX:AX/SRC.
Sau khi thực hiện lệnh: AX chứa thương số, DX chứa
số dư
– Không xác định cờ: AF, OF, CF, ZF, PF, SF
– Trong trường hợp thanh ghi chứa kết quả không đủ
khả năng lưu trữ kết quả thì ngắt INT 0 được thực
hiện
146
Nhóm lệnh số học (tiếp)
IDIV(Integer Divide - Chia có dấu)
– Dạng lệnh:IDIV SRC
– Tác dụng tương tự DIV
– Không xác định cờ: AF, OF, CF, ZF, PF
– Trong trường hợp thanh ghi chứa kết quả không đủ khả năng lưu
trữ kết quả thì ngắt INT 0 được thực hiện
DAA(Decimal Adjust for Addition)
– Dạng lệnh: DAA
– Ứng dụng: Điều chỉnh tổng trong AL của hai toán hạng BCD nén
– Tác dụng: Nếu nibble thấp của AL lớn hơn 9 hay cờ AF được thiết
lập thì tăng AL lên 6 và thiết lập AF=1. Nếu AL lớn hơn 9F hay CF
được thiết lập 1 thì cộng 60H vào AL và thiết lập cờ CF
– Cờ bị ảnh hưởng: AF, CF, PF, ZF, SF

147
Nhóm lệnh số học (tiếp)
DAS(Decimal Adjust for Subtraction)
– Dạng lệnh: DAS
– Ứng dụng: Điều chỉnh hiệu trong AL của hai toán hạng BCD nén
– Tác dụng: Nếu nibble thấp của AL lớn hơn 9 hay cờ AF được
thiết lập thì trừ AL đi 60H và thiết lập cờ CF
– Cờ bị ảnh hưởng: AF, CF, PF, ZF, SF
AAA(ASCII Adjust after Addition)
– Ứng dụng: Điều chỉnh kế quả trong AL khi cộng 2 số BCD không
nén hay hai chữ số ASCII
– Thao tác: Nếu nibble thấp của AL lớn hơn 9 hay AF = 1 thì tăng
AL lên 6, tăng AH lên 1 và thiết lập cờ AF. Lệnh này luôn xóa
nibble cao của AL và chép cờ AF vào CF
– Cập nhật : AF, CF.

148
Nhóm lệnh số học (tiếp)
AAD(ASCII Adjust before Division)
– Ứng dụng: Điều chỉnh số bị chia dạng BCD không nén trong AX
khi thực hiện phép chia
– Thao tác: Số BCD không nén trong AX được đổi thành dạng số
nhị phân và giữ lại trong AL bằng cách nhân AH với 10 và cộng
vào AL sau đó xóa AH
– Cờ bị ảnh hưởng: PF, SF, ZF
AAM(ASCII Adjust for Multiplication)
– Ứng dụng: Đổi kết quả của phép nhân hai số BCD thành dạng
số BCD không nén. Có thể dùng để đổi các số nhỏ hơn 100
thành dạng số BCD không nén
– Tác dụng: Nội dung của AL được đổi thành hai số BCD không
nén và được lưu vào AX bằng cách chia AL cho 10. Thương số
nhận được chứa trong AH còn số dư chứa trong AL
– Cờ bị ảnh hưởng: PF, SF, ZF

149
Nhóm lệnh số học (tiếp)

AAS(ASCII Adjust for Subtraction)


– Ứng dụng: Chỉnh lại kết quả của phép trừ 2 số BCD
không nén
– Tác dụng: Nếu nibble thấp của AL lớn hơn 9 hay AF
=1 thì giảm AL đi 6, giảm AH đi 1 và thiết lập cờ AF.
Lệnh này luôn xóa nibble cao của AL và chép cờ AF
vào CF
– Cờ bị ảnh hưởng: AF, CF

150
Nhóm lệnh số học (tiếp)

CBW(Convert Byte to Word)


– Dạng lệnh: CBW
– Tác dụng: Đổi số có dấu 8 bit trong AL thành số có
dấu 8 bit trong AX
– Cờ bị ảnh hưởng: Không
CWD(Convert Word to Double Word)
– Dạng lệnh: CWD
– Tác dụng: Đổi số có dấu 16 bit trong AX thành số có
dấu 32 bit trong DX:AX
– Cờ bị ảnh hưởng: Không

151
Nhóm lệnh dịch và quay

SHL/SAL(Shift Logical Left/Shift Arithmetic Left)


– Dạng lệnh: SHL/SAL DES,1
– SHL/SAL DES,CL
– DES : Toán hạng cần dịch
– Tác dụng: Dịch trái/Dịch trái số học DES một hay
nhiều bit
– Nếu dịch nhiều bit thì số bit được chứa trong CL
– Cờ bị ảnh hưởng: CF, OF, PF, SF, ZF

152
SAR(Shift Arithmetic Right)

Dạng lệnh:
– SAR DES,1
– SAR DES,CL
DES : Toán hạng cần dịch
Tác dụng:
– Dịch phải số học DES một hay nhiều bit
Nếu dịch nhiều bit thì số bit được chứa trong CL
Cờ bị ảnh hưởng: CF, OF, PF, SF, ZF

153
SHR(Shift Logical Right)

Dạng lệnh:
– SHR DES,1
– SHR DES,CL
DES : Toán hạng cần dịch
Tác dụng:
– Dịch phải DES một hay nhiều bit
Nếu dịch nhiều bit thì số bit được chứa trong CL
Cờ bị ảnh hưởng: CF, OF, PF, SF, ZF

154
ROR,ROL

ROR(Rote Right)
– Dạng lệnh: ROR DES,1
– DES : Toán hạng cần quay
– Tác dụng: Quay phải DES n bit
– Nếu quay nhiều bit thì số bit được chứa trong CL
– Cờ bị ảnh hưởng: CF, OF
ROL(Rote Left)
– Dạng lệnh: ROL DES,1
– DES : Toán hạng cần quay
– Tác dụng: Quay trái DES n bit
– Nếu quay nhiều bit thì số bit được chứa trong CL
– Cờ bị ảnh hưởng: CF, OF
155
RCR, RCL
RCR(Rotate Right Through Carry - Quay phải
có nhớ)
– Dạng lệnh: RCR DES,1
– DES : Toán hạng cần quay
– Tác dụng: Quay phải DES qua cờ nhớ n bit
– Nếu quay nhiều bit thì số bit được chứa trong CL
– Cờ bị ảnh hưởng: CF, OF
RCL(Rotate Left Through Carry - Quay trái có
nhớ)
– Dạng lệnh: RCL DES,1
– DES : Toán hạng cần quay
– Tác dụng: Quay DES sang trái qua cờ nhớ
– Cờ bị ảnh hưởng: CF, OF
156
Các lệnh kiểm tra so sánh
CMP(Compare)
– Dạng lệnh: CMP DES,SRC
– Ứng dụng: So sánh hai toán hạng bằng cách thực
hiện phép trừ nhưng không lưu kết quả
– Tác dụng: Trừ DES cho SRC và thiết lập các cờ, kết
quả không lưu lại
TEST(Logical Compare)
– Dạng lệnh: Test DES,SRC
– Tác dụng: Thực hiện phép toán AND logic giữa DES
và SRC, Kết quả không được lưu lại. Trạng thái của
kết quả thể hiện trong thanh ghi cờ
– Cờ bị ảnh hưởng: CF, OF, PF, SF, ZF
157
Các lệnh logic
Thực hiện các thao tác với các toán hạng ở mức
bit
AND(Logic And)
– Dạng lệnh: AND DES,SRC
– Tác dụng: DES = DES And SRC
– Cờ bị ảnh hưởng: CF, OF, PF, SF, ZF
OR(Logical Inclusive Or)
– Dạng lệnh: OR DES,SRC
– Tác dụng: DES = DES OR SRC
– Cờ bị ảnh hưởng: CF, OF, PF, SF, ZF
– Không xác định: AF
158
Các lệnh logic (tiếp)

XOR(Logical Exclusive Or)


– Dạng lệnh: XOR DES,SRC
– Tác dụng: DES = DES XOR SRC
– Cờ bị ảnh hưởng: CF, OF, PF, SF, ZF
– Không xác định: AF
NOT(Logical Not)
– Dạng lệnh: NOT DES
– Tác dụng: Đảo tất cả các bit của DES
– Cờ bị ảnh hưởng: Không

159
Nhóm lệnh nhảy

Các lệnh nhảy nhằm mục đích thay đổi trật tự


của chương trình
J(Điều kiện) – Nhảy nếu thỏa mãn điều kiện
– Dạng lệnh: J(Điều kiện) Nhãn
– Thao tác: Nếu điều kiện đúng, nhảy tới câu lệnh nằm
ngay sau nhãn để thi hành. Nhãn phải nằm trong
phạm vi từ -128 đến +127 byte tính từ lệnh tiếp theo

160
Bảng các lệnh nhảy có điều kiện
STT Lệnh nhảy Nhảy nếu Điều kiện
1 JA Lớn hơn CF=0 và ZF =0
2 JAE Lớn hơn hoặc bằng CF=0
3 JB Nhỏ hơn CF=1
4 JBE Nhỏ hơn hoặc bằng CF=1 hay ZF=1
5 JC Có nhớ CF=1
6 JCXZ CX=0 (CF hay ZF) = 0
7 JE Bằng ZF =0
8 JG Lớn hơn ZF=0 và SF =OF
9 JGE Lớn hơn hoặc bằng CF=OF
10 JL Nhỏ hơn (SF xor OF) =1
11 JLE Nhỏ hơn hoặc bằng (SF xor OF) or ZF=1
12 JNA Không lớn hơn CF hay ZF =1
13 JNAE Không lớn hơn hoặc bằng CF=1
14 JNB Không nhỏ hơn CF=0
15 JNBE Không nhỏ hơn hay bằng CF=0 hay ZF =0 161
Bảng các lệnh nhảy có điều kiện (tiếp)
15 JNBE Không nhỏ hơn hay bằng CF=0 hay ZF =0
16 JNC Không có nhớ CF=0
17 JNE Không bằng ZF=0
18 JNG Không lớn hơn (SF xor OF) or ZF=1
19 JNGE Không lớn hơn hoặc bằng (SF xor OF) =1
20 JNL Không nhỏ hơn SF=OF
21 JNLE Không nhỏ hơn hay bằng ZF=0 và SF =OF
22 JNO Không tràn OF=0
23 JNP Lẻ PF=0
24 JNS Âm SF=0
25 JNZ Khác không ZF=0
26 JO Tràn OF=1
27 JP Chẵn PF=1
28 JS Âm SF=1
29 JZ Bằng không ZF=1

162
Nhảy không điều kiện

JMP(Jump)
Dạng lệnh: JMP Nhãn
Tác dụng: Chuyển tới câu lệnh nằm ngay sau nhãn để
thi hành
Cờ bị ảnh hưởng: Không

163
Nhóm lệnh điều khiển

CALL (Gọi thủ tục)


– Dạng lệnh: CALL Target
– Tác dụng: Chuyển điều khiển của chương trình tới
thực hiện lệnh trong target
– Cờ bị ảnh hưởng: Không
ESC(Escape)
– Dạng lệnh: ESC External_Opcode, Source
– Tác dụng: Cho phép các bộ xử lý khác chẳng hạn
8087 thực hiện các thao tác của chúng. 8086 không
thực hiện thao tác nào ngoại trừ việc lấy các toán
hạng bộ nhớ cho các bộ xử lý khác
– Cờ bị ảnh hưởng: Không 164
Nhóm lệnh điều khiển (tiếp)

HLT(Halt)
– Dạng lệnh: HLT
– Tác dụng: Đưa bộ vi xử lý vào trạng thái dừng chờ
ngắt ngoài
– Cờ bị ảnh hưởng: Không
INT(Interupt)
– Dạng lệnh: INT Interupt_type
– Ứng dụng: Chuyển quyền điều khiển cho một trong
256 chương trình thường trú phục vụ ngắt
– Cờ bị ảnh hưởng: TF, IF

165
Nhóm lệnh điều khiển (tiếp)

INTO(Interupt If Overflow)
– Dạng lệnh: INTO
– Ứng dụng: Tạo ra ngắt 4 nếu OF được thiết lập
– Cờ bị ảnh hưởng: Nếu OF = 1 thì TF, OF bị xóa, nếu
OF bằng 0 thì không cờ nào bị ảnh hưởng
IRET(Interupt Return)
– Dạng lệnh: IRET
– Tác dụng: Trở về từ chương trình phục vụ ngắt
– Cờ: Bị ảnh hưởng tất cả

166
Nhóm lệnh điều khiển (tiếp)

LOCK(Khóa bus)
– Dạng lệnh: LOCK
– Ứng dụng: Khóa bus trong trường hợp có nhiều bộ vi xử lý
– Tác dụng: Ngăn không cho các bộ vi xử lý khác truy nhập bộ
nhớ trong thời gian thực hiện lệnh
RET(Return From Procedure)
– Dạng lệnh: RET
– Tác dụng: Kết thúc thủ tục và trở về chương trình chính
– Cờ bị ảnh hưởng: Không
WAIT(Chờ đợi)
– Dạng lệnh: WAIT
– Tác dụng: Vi xử lý ở trạng thái chờ cho đến khi được kích hoạt
bởi một ngắt

167
Nhóm lệnh lặp
LOOP(Vòng lặp)
– Dạng lệnh:
LOOP Nhãn
– Tác dụng: Nội dung của CX được giảm đi 1, nếu CX khác 0 thì
chương trình sẽ thực hiện câu lệnh nằm ngay sau nhãn, nếu CX
=0 thì chương trình sẽ thực hiện câu lệnh nằm ngay sau lệnh
LOOP
– Cờ bị ảnh hưởng: Không
LOOPE/LOOPZ(Loop If Equal/Loop If Zero)
– Dạng lệnh:
LOOPE Nhãn
LOOPZ Nhãn
– Tác dụng: Giảm CX đi 1. Nếu CX khác 0 và ZF=1 thì thực hiện
câu lệnh nằm ngay sau nhãn. Nếu không thì thực hiện câu lệnh
nằm ngay sau lệnh này
– Cờ bị ảnh hưởng: Không
168
Nhóm lệnh lặp (tiếp)

LOOPNE/LOOPNZ(Loop If Not Equal/Loop If Not


Zero)
– Dạng lệnh:
– LOOPNE Nhãn
– LOOPNZ Nhãn
– Tác dụng:
Giảm CX đi 1. Nếu CX khác 0 và ZF=0 thì thực
hiện câu lệnh nằm ngay sau nhãn. Nếu không thì
thực hiện câu lệnh nằm ngay sau lệnh này
– Cờ bị ảnh hưởng: Không

169
Nhóm lệnh lặp (tiếp)

REP/REPZ/REPE/REPNE/REPNZ(Repeat String
Operation)
– Ứng dụng: Lặp lại với các lệnh thao tác chuỗi
– Dạng lệnh:
Lệnh_Lặp Lệnh thao tác chuỗi
– REP: CX giảm đi 1, Lặp lại nếu CX khác 0
– REPZ: Lặp lại nếu bằng 0
– REPE: LẶp lại nếu bằng
– REPNE: Lặp lại nếu không bằng
– REPNZ: Lặp lại nếu không bằng 0
– Cờ bị ảnh hưởng: Tùy trường hợp cụ thể
170
Cách mã hóa lệnh

Lệnh
Thực hiện Kết quả
người sử Mã hóa Mã máy
lệnh
dụng

Lệnh người sử dụng là những mong muốn của con người


muốn máy móc thực hiện một công việc nào đó
Lệnh người sử dụng cần được mã hóa có tính gợi nhớ cao
nhất để khi nhắc tới lệnh mã hóa ta có thể hiểu được sơ
lược về chức năng của lệnh
Để máy tính có thể hiểu được các lệnh này ta phải mã hóa
nó bằng một tổ hợp của các bit nhị phân 0 và 1 và đưa tới
bộ nhận lệnh của máy tính thi hành lệnh
171
Cách mã hóa lệnh

Một lệnh máy tính tổng quát

OPCODE OPERAND

OPCODE(mã lệnh): Chỉ ra chức năng, thao tác


của lệnh
OPERAND(Toán hạng): Chỉ ra nơi chứa dữ liệu
mà toán tử sẽ tác động lên, nơi lưu trữ dữ liệu
sau khi thực hiện phép toán

172
Cách mã hóa lệnh

100010 D W DispL DispH

Giá trị được cộng thêm


vào giá trị chứa trong
MOV MOD REG M/R
MOD/MR

Byte 1 Byte 2 Byte 3 Byte 4

Dùng tối đa từ 2 byte đến 4 byte để mã hóa

173
Cách mã hóa lệnh

D: Dùng để chỉ hướng dữ liệu từ đâu hoặc tới đâu


– D = 1: Chuyển tới thanh ghi nào
– D = 0: Chuyển từ thanh ghi nào tới
W: Truyền bao nhiêu
– W = 0: Truyền 1 byte
– W = 1: Truyền 1 Word ( 2 byte)
REG: Cho biết thanh ghi chứa đích hay nguồn
Thao tác di chuyển dữ liệu bắt buộc phải có một toán hạng
là thanh ghi. Giới hạn của lệnh MOV là
– Di chuyển giữa các thanh ghi với nhau
– Di chuyển giữa một thanh ghi và một ô nhớ
MOD và M/R phối hợp với nhau để tạo ra các chế độ địa chỉ

174
Bảng mã hóa thanh ghi
Thanh ghi Mã Thanh ghi Mã
W =1 W=0
AX AL 000 CS 01

BX BL 011
CX CL 001 DS 11

DX DL 010
SP AH 100 ES 00

DI BH 111
BP CH 101 SS 10

SI DH 110

175
Bảng mã hóa MOD/MR
Mod
M/R 00 01 10 11
W=0 W=1

000 BX+ SI BX+ SI + d8 BX+ SI + d16 AL AX

001 BX+ DI BX+ DI + d8 BX+ DI + d16 CL CX

010 BP+ SI BP+ SI + d8 BP+ SI + d16 DL DX


011 BP+ DI BP+ DI + d8 BP+ DI + d16 BL BX

100 SI SI + d8 SI + d16 AH SP


101 DI DI + d8 DI + d16 CH BP
110 D16 BP + d8 BP + d16 DH SI
([134H])
111 BX BX+ d8 BX+ d16 BH DI
176
Một số ví dụ

Ví dụ : MOV CH, [BX]


Giải
100010 1 0 00 101 111

MOV 1Byte CH
Tới CH
[BX]
Kết quả =8A2FH
CHƯƠNG 4:
LẬP TRÌNH HỢP NGỮ TRÊN IPM-PC

178
CÚ PHÁP HỢP NGỮ

Kiến trúc phần cứng chỉ là phần thể xác, bất biến trong
các hệ vi xử lý
Để bộ vi xử lý có thể hoạt động theo mong muốn của
con người ta phải tiến hành lập trình cho nó
Mỗi một bộ vi xử lý đều có một tập lệnh riêng theo chuẩn
tập lệnh
Mỗi chương trình dịch đều có cấu trúc và cú pháp riêng.
Khi lập trình cần viết đúng cú pháp để chương trình biên
dịch hiểu và biên dịch chương trình ra dạng mã máy

179
CÚ PHÁP HỢP NGỮ

Một lệnh hợp ngữ thường có 4 trường


– Tên: Toán tử Toán hạng ;Lời giải thích
– Các trường phải được phân cách nhau bằng ít nhất
một khoảng trống hay TAB
– Các trường trên không bắt buộc phải được sắp xếp
theo cột nhưng chúng nhất định phải được sắp xếp
theo đúng thứ tự như trên
Ví dụ :
– BATDAU: MOV CX,5 ; Khởi tạo bộ đếm CX
BATDAU là nhãn
MOV là toán tử
CX và 5 là toán hạng
180
Hướng dẫn biên dịch

Main Proc
– Main là tên
– Toán hạng là Proc.
– Hướng dẫn biên dịch này khai báo cho chương trình
biên dịch biết chúng ta khai báo một chương trình con
có tên là Proc
Main Endp
– Main là tên
– Toán hạng là Endp.
– Hướng dẫn biên dịch này khai báo cho chương trình
biên dịch biết Kết thúc thủ tục chính
181
Trường tên

Trường tên được sử dụng


– Làm nhãn lệnh
– Các tên thủ tục và tên biến.
– Chương trình biên dịch sẽ chuyển các tên thành các
địa chỉ bộ nhớ
Qui tắc đặt tên
– Trường tên có thể có chiều dài từ 1 đến 31 ký tự
– Có thể chứa các chữ cái, chữ số và một số ký tự đặc
biệt (?, ., @, _, $, %)
– Không được phép chèn một dấu cách “Space” vào
trong một trường tên.
182
Trường tên (tiếp)
– Nếu sử dụng dấu chấm thì nó phải đứng đầu tiên
– Tên không được phép bắt đầu bằng một chữ số
– Chương trình biên dịch không phân biệt chữ hoa và
chữ thường trong trường tên
Ví dụ một số tên hợp lệ:
– Start
– Counter
– Displ2
– @charac
– Co_mot

183
Trường tên (tiếp)
Ví dụ một số tên không hợp lệ
– Two word ; Chứa khoảng trống
– 2context ; Chữ số đứng đầu
– Toi.u ; Dấu . không đứng đầu
– You&me ; Chứa ký tự đặc biệt

184
Trường toán tử
Toán tử chứa mã lệnh dạng tượng trưng
Chương trình biên dịch sẽ chuyển một lệnh ở dạng
tượng trưng sang một lệnh ở dạng mã máy
Tượng trưng của lệnh thường tượng trưng cho chức
năng của các thao tác
– Ví dụ : MOV, SHR, ROR,…
Trong một hướng dẫn biên dịch trường toán tử chứa
toán tử giả “Pseudo”. Các toán tử giả này không được
chương trình biên dịch biên dịch ra mã máy mà đơn giản
nó chỉ thông báo cách biên dịch cho chươg trình biên
dịch
– Ví dụ toán tử Proc là để tạo ra một thủ tục.
185
Trường toán hạng
Toán hạng xác định dữ liệu mà các toán tử sẽ tác động
lên. Một chỉ thị có thể không có hay có một hoặc hai toán
hạng
Ví dụ :
– INC AX ;Tăng AX lên 1
– ADD BX,5 ;Cộng 5 vào BX
Trong một chỉ thị hai toán hạng, toán hạng đầu tiên được
gọi là toán hạng đích (DES), toán hạng thứ hai được gọi
là toán hạng nguồn(SRC)
Các chỉ thị thường không làm thay đổi toán hạng nguồn
Đối với một hướng dẫn biên dịch trường toán hạng
thường chứa thông tin về hướng dẫn biên dịch.

186
Trường lời giải thích
Mở đầu trường này là một dấu “;”, trình biên dịch sẽ bỏ
qua toàn bộ những câu nằm sau ký tự “;”
Trường lời giải thích có thể có hoặc không, sử dụng lời
giải thích để cho dễ hiểu với người đọc và cho chính cả
chúng ta khi đọc lại chương trình hoặc sửa lỗi chương
trình
Lời giải thích cần trong sáng, rõ ràng

187
Dữ liệu, biến, hằng
Dữ liệu
Do bộ vi xử lý chỉ thao tác với các bit nhị phân 0 và 1
cho nên chương trình biên dịch phải chuyển đổi tất cả
các dữ liệu khác về dạng nhị phân.
Khi lập trình ta có thể sử dụng tất cả các dạng dữ liệu số
thập phân, hexa, ký tự, …

188
Dữ liệu
Các số
– Các số nhị phân được viết dưới dạng một chuỗi các
bit và được kết thúc bằng chữ b ví dụ : 100101b.
– Một chữ số thập phân được kết thúc bằng chữ cái d
hoặc D
– Một chữ số hexa được mở đầu bằng một chữ số thập
phân và kết thúc bằng chữ cái h hoặc H
– Tất cả các số trên đầu có dấu tuỳ ý
– Nếu không ghi hệ cơ số cụ thể thì mặc định là ở hệ
cơ số 10

189
Ví dụ các số
Số Kiểu
1100 Thập phân
1100b Nhị phân
12345 Thập phân
-3568D Thập phân
1,234 Không hợp lệ, chứa ký tự không là chữ số
1B4DH Số hex
1B4D Số hex không hợp lệ, không kết thúc là “h”
FFFFH Số hex không hợp lệ, không bắt đầu bằng
một chữ số thập phân
0FFFFH Số hex
190
Các ký tự
Các ký tự và chuỗi phải được bao quanh bằng một một
dấu nháy đơn hoặc một dấu nháy kép
Các ký tự được trình biên dịch dịch ra mã ASCII của
chúng vì vậy trình biên dịch không phân biệt chữ A và
41h do 41h là mã ASCII của chữ “A”

191
Các toán tử định nghĩa số liệu
Tên toán tử Kiểu định nghĩa

DB Định nghĩa Byte

DW Định nghĩa word

DD Định nghĩa từ kép

DQ Định nghĩa 4 word (4 từ liên tiếp)

DT Định nghĩa 10 byte (10 byte liên tiếp)

192
Các biến
Mỗi biến có một kiểu dữ liệu và được chương trình biên
dịch gán cho một địa chỉ trong bộ nhớ
Các biến kiểu byte
– Định nghĩa một biến kiểu byte
– Tênbiến DB Giá_trị_khởi_tạo
– Ví dụ:
ALPHA DB 4
BYTE DB ?
– Với hướng dẫn này trình biên dịch sẽ gán một tên
ALPHA cho một byte nhớ và khởi tạo nó các giá trị
giá trị là 4.
– Giới hạn thập phân của các giá trị khởi tạo nằm trong
khoảng từ -128 đến 127 với kiểu có dấu và từ 0 đến
255 với kiểu không dấu. Các khoảng này vừa đúng
giá trị của một byte. 193
Các biến kiểu word
Tênbiến DW Giá_trị_khởi_tạo
Ví dụ:
– WRD DW -2
– WRD2 DW ?
Giống như với kiểu byte một dấu chấm hỏi ở vị trí giá trị
khởi tạo có nghĩa là word không được khởi tạo giá trị
đầu.
Giới hạn thập phân của giá trị khởi tạo được xác định từ
-32768 đến 32767 đối với kiểu có dấu và từ 0 đến 65535
đối với kiểu không dấu.

194
Các mảng kiểu byte
Trong hợp ngữ, mảng chỉ là một chuỗi các byte nhớ hay
từ nhớ. Ví dụ để định nghĩa mảng 3 byte có tên
B_ARRAY với các giá trị khởi tạo là 10h, 20h, 30h chúng
ta có thể viết:
– B_ARRAY DB 10h, 20h, 30h
Tên B_ARRAY được gán cho byte đầu tiên,
B_ARRAY+1 cho byte thứ hai và B_ARRAY+2 cho byte
thứ ba. Nếu như trình biên dịch gán địa chỉ cho offset
0200h cho B_ARRAY thì bộ nhớ sẽ như sau:
Phần tử Địa chỉ Nội dung
– B_ARRAY 0200h 10h
– B_ARRAY+1 0201h 20h
– B_ARRAY+2 0202h 30h
195
Các mảng kiểu Word
Các mảng word có thể được định nghĩa một cách tương
tự,.Ví dụ:
W_ARRAY DW 1000, 356, 248, 13
Sẽ tạo nên một mảng có 4 phần tử với các giá trị khởi
tạo là 1000, 356, 248, 13. Từ đầu tiên được gắn với tên
W_ARRAY, từ tiếp theo gắn với W_ARRAY+2, rồi đến
W_ARRAY+4 v.v. nếu mảng bắt đầu tại 0300h thì bộ nhớ
sẽ như sau:
Phần tử Địa chỉ Nội dung
– W_ARRAY 0300h 1000d
– W_ARRAY+2 0302h 356d
– W_ARRAY+4 0304h 248d
– W_ARRAY+6 0306h 13d
196
Byte thấp và byte cao trong một
word
Khi chúng ta muốn tham chiếu đến byte thấp và
byte cao của biến word. Giả sử ta định nghĩa:
– WORD1 DW 1234H
– Byte thấp của word1 sẽ chứa 34h
– Byte cao chứa 12h
– Byte thấp có địa chỉ ký hiệu là WORD1
– Byte cao có địa chỉ ký hiệu là WORD1+1

197
Các chuỗi ký tự
Chuỗi ký tự có thể khởi tạo bằng mảng các mã ASCII.
Ví dụ: LETTER DB ‘ABC’
Tương đương với:
LETTER DB 41h, 42h, 43h
Trong một chuỗi, trình biên dịch phân biệt các chữ hoa
và chữ thường. Vì vậy chuỗi ‘abc’ được dịch ra 3 byte
với các giá trị 61h, 62h, 63h
Cũng có thể kết hợp các ký tự và các số trong một định
nghĩa
Ví dụ: MSG DB ‘HELLO’,0Ah,0Dh,‘$’
Tương đương với:
MGS DB 48h,45h,4Ch,4Ch,4Fh,0Ah,0Dh,24h
198
Các hằng có tên
Để tạo ra các mã lệnh dễ hiểu, người ta thường dùng
các tên tượng trưng để biểu diễn các hằng số.
EQU(EQUates: coi bằng như, coi như). Khai báo hằng
ta sử dụng toán tử giả EQU. Cú pháp như sau
– Tên EQU Hằng_số
Ví dụ: LF EQU 0Ah
– Gán lên LF cho 0Ah, là mã ASCII của ký tự xuống dòng. Tên LF
bây giờ có thể dược dùng để thay cho 0Ah tại bất cứ đâu trong
chương trình. Trình biên dịch sẽ dịch các lệnh:
MOV DL,0AH Và MOV DL,LF
– Ra cùng một chỉ thị máy

199
Các hằng có tên (tiếp)
Phần tử bên phải EQU cũng có thể là một chuỗi.
Ví dụ: PROMPT EQU “TYPE YOUR NAME”
Như vậy, thay vì viết
– MSG DB “TYPE YOUR NAME”
Ta có thể viết:
– MSG DB PROMPT
Chú ý:
– Bộ nhớ không dành chỗ cho các hằng có tên (khi biên
dịch, nơi nào chứa tên hằng thì ở đó sẽ được thay
đổi bởi giá trị của hằng).

200
Cấu trúc một chương trình hợp ngữ

Tổng quan
– Nói chung một chương trình hợp ngữ được
chia làm 4 đoạn
Đoạn mã
Đoạn dữ liệu
Đoạn dữ liệu mở rộng
Đoạn ngăn xếp

201
Chú ý :
Trong chương trình đòi hỏi phải có ít nhất một đoạn
ngăn xếp.
Đoạn ngăn xếp giúp lưu trữ các kết quả trung gian khi
thực hiện chương trình
Bắt đầu đoạn mã sẽ là các chỉ dẫn dịch
– Instruction
– Directive
Cuối mỗi đoạn có lệnh ENDP kết thúc đoạn
Cuối chương trình có lệnh END (expression) kết thúc
chương trình

202
Cấu trúc chung của một chương trình hợp ngữ
Cấu trúc của một chương trình được dịch ra file.exe
TITLE TEN_CHUONG_TRINH ; Đặt tên cho chương trình
.MODEL SMALL ; Khai báo qui mô sử dụng bộ nhớ
.STACK 200H ; Khai báo kích thước ngăn xếp
.DATA ; Tổng hợp khai báo dữ liệu
; Dữ liệu, biến, hằng khai báo ở đây
.CODE ; Bắt đầu đoạn mã
MAIN PROC ; Bắt đầu đoạn chính
MOV AX,@DATA ; Khởi tạo địa chỉ đoạn
MOV DS,AX
; Các lệnh nằm ở đây
MOV AH,4CH
INT 21H
MAIN ENDP ; Kết thúc chương trình
;Các thủ tục nằm ở đây
END MAIN
203
Cấu trúc của một chương trình được dịch ra file.com
TITLE TEN_CHUONG_TRINH ; Đặt tên cho chương trình
.MODEL TINY ; Khai báo qui mô sử dụng bộ nhớ
.CODE

ORG 100H

BATDAU: JMP TIEPTUC

; Dữ liệu, biến, hằng khai báo ở đây

TIEPTUC: ; Bắt đầu đoạn mã


MAIN PROC ; Bắt đầu đoạn chính
; Các lệnh nằm ở đây

INT 20H

MAIN ENDP

;Các thủ tục nằm ở đây

END BATDAU
204
Cú pháp một chương trình hợp ngữ

Bộ ký tự
– Chữ cái : A Z, a  z
– Ký tự đặc biệt : ?, @, * , $
– Khoảng trắng, tab, …
– Các chữ số: 09
Từ khoá
– Tên các thanh ghi
– Các lệnh giả
– Tên toán tử

205
Các chỉ dẫn đoạn
.STACK ; Định ra dung lượng nhớ dành cho chương trình
.CODE ; Đánh dấu điểm bắt đầu của đoạn mã
.DATA ; Điểm bắt đầu khai báo dữ liệu của chương trình
.DOSEG ; Các đoạn được sắp xếp theo chuẩn của
Microsoft
.MODEL ; Khai báo qui mô sử dụng bộ nhớ
.MODEL TINY ; Mã + dữ liệu nằm trong 64K, dịch ra file.com
.MODEL SMALL ; Mã + dữ liệu nằm trong 2 đoạn 64K khác nhau
.MODEL LARGE ; Mã lệnh > 64 K, Nếu có biến mảng thì < 64K
.MODEL HUGE ; Mã lệnh < 64 K, Nếu có biến mảng thì > 64K
.MODEL MEDIUM ; Mã lệnh > 64K, dữ liệu nằm trong đoạn < 64K
.MODEL COMPACK ; Mã lệnh < 64K, dữ liệu nằm trong đoạn > 64K 206
Một số ngắt cơ bản của số hiệu ngắt 21H của DOS

Hàm 01H
Vào AH =01H
Ra AL chứa mã của ký tự vừa được nhập
Tác dụng Khi gặp ngắt này, vi xử lý sẽ chờ người
sử dụng nhập vào một ký tự, sau khi
nhập mã của ký tự chứa trong thanh ghi
AL
Assembler MOV AH,01H
Language INT 21H

207
Hàm 02H
Vào AH =02H
DL chứa mã của ký tự cần hiển thị
Ra Không
Tác dụng Hiển thị ký tự có mã nằm trong thanh
ghi DL lên màn hình
Assembler MOV AH,02H
Language MOV DL,’A’
INT 21H

208
Hàm 09H
Vào AH =09H
DS:DX chứa địa chỉ ban đầu của chuỗi

Ra Không

Tác dụng Hiển thị chuỗi ký tự tại địa chỉ DS:DX


lên màn hình. Vi xử lý sẽ tiếp tục hiển
thị tới khi nào gặp ký tự $ thì dừng lại
Assembler MOV AX,@DATA
Language MOV DS,AX
LEA DX,msg
MOV AH,09H
INT 21H

209
Hàm 4CH
Vào AH =4CH
Ra Không
Tác dụng Kết thúc chương trình và nhường
quyền điều khiển bộ vi xử lý cho hệ
điều hành. Ngắt này là bắt buộc với
các chương trình dạng .exe
Assembler Language MOV AH,4CH
INT 21H

210
Chương trình đầu tiên
TITLE PGMHELLO ; Tên chương trình
.MODEL SMALL ; Sử dụng model small
.STACK 200H ; Dung lượng ngăn xếp là 200H
.DATA
Msg DB ‘HELLO’,’$’ ; Khai báo chuỗi cần hiển thị
.CODE
MAIN PROC
MOV AX,@DATA ; Khởi tạo địa chỉ đoạn
MOV DS,AX
MOV AH,09H ; Hàm hiển thị một chuỗi
LEA DX,Msg ; Lấy địa chỉ độ lệch của msg đưa vào DX
INT 21H ; Hiển thị chuỗi
MOV AH,4CH ; Hàm kết thúc chương trình
INT 21H ; Kết thúc chương trình
MAIN ENDP
END MAIN
211
Cấu trúc ngôn ngữ bậc cao
 Cấu trúc rẽ nhánh
Cấu trúc : if … then … end_if
Ví dụ: Tạo cấu trúc bậc cao sau Điều kiện
S
– IF AX<0 then Đ
AX = -AX Công việc
BX = 5
– End_If
Lệnh hợp ngữ
– CMP AX,0
– JNL End_If ;Nhẩy nếu không nhỏ hơn
– NEG AX ;AX = -AX
– MOV BX,5 ;BX = 5
– End_If:
212
Cấu trúc if … then … else
Ví dụ: Tạo cấu trúc điều khiển bậc cao sau
IF AX<0 then
AX = -AX
ELSE
Điều kiện Công việc 2
AX =0
End_If S
Đ
Lệnh hợp ngữ
CMP AX,0 Công việc 1

JNB ELSE_
NEG AX
JMP END_IF
ELSE_:
MOV AX,0
END_IF:

213
Cấu trúc Case … end_ case
Ví dụ: Tạo cấu trúc điều khiển bậc cao sau
Case AX
<0: BX = -1
=0: BX = 0
>0: BX = 1
End_case K.Tra
Lệnh hợp ngữ
CMP AX,0
JL LOW_ Giá trị 1 Giá trị 2 Giá trị n
JG GREAT_
CV 1 CV 2 CV n
MOV BX,0
JMP END_CASE
LOW_:
MOV BX,-1
JMP END_CASE
GREAT_:
MOV BX,1
END_CASE:
214
Các điều kiện kép AND
Ví dụ: Tạo cấu trúc bậc cao sau
IF AX > 0 AND BX >0 THEN
DX = 1 Điều kiện 1
S
CX =5
END_IF Đ

Lệnh hợp
CMP ngữ :
Điều kiện 2
AX,0 S
JBE
END_IF Đ
CMP
Công việc
BX,0
JBE
END_IF
MOV
DX,1
MOV
CX,5 215
END_IF:
Cấu trúc lặp
 Vòng lặp for
Cấu trúc: LOOPNhãn Khởi tạo n
– Lệnh này thực hiện việc kiểm tra CX,
Nếu cx khác 0 thì cx được giảm đi 1 và
chương trình thực hiện lệnh nhẩy tới
nhãn_đích
Công việc
Ví dụ
– For 80 lần do
Hiển thị ký tự “*”
– End_for n = n-1
Lệnh hợp ngữ
– MOV CX,80
– MOV AH,02H S
– MOV DL,’*’ n = 0?
– TOP :
– INT 21H Đ
– LOOP TOP

216
Vòng lặp WHILE … DO
while điều kiện Do
Thân vòng lặp
End_While
Ví dụ :
– Đọc vào một ký tự
– while ký tự <> CR (xuống dòng) do Điều kiện
Đếm = đếm +1 S
Đọc một ký tự
– end_while Đ
Lệnh hợp ngữ Công việc
MOV DX,0
MOV AH,01H ;Chuẩn bị đọc
INT 21H
– WHILE_ :
CMP AL,0DH;CR(13)
JE END_WHILE
INC DX
INT 21H
JMP WHILE_
– END_WHILE : 217
Lệnh Do … While
Cấu trúc
Do
– Các dòng lệnh
While Điều kiện Công việc
Ví dụ :
– Do S
Đọc một ký tự Điều kiện
– While Ký tự đọc được <> Enter
Đ
Lệnh hợp ngữ :
– MOV AH,01H
– DO_:
– INT 21H
– CMP AL,0DH
– JE END_WHILE
– JMP DO_
– END_WHILE:
218
Ngăn xếp và thủ tục
 Ngăn xếp
Định nghĩa: Ngăn xếp là một loại cơ sở dữ liệu có dạng
LIFO (Last In Fist out) Các dữ liệu cho vào sau sẽ được
lấy ra trước.
Mỗi một chương trình phải sử dụng một khối bộ nhớ để
làm ngăn xếp. Việc khai báo ngăn xếp được thực hiện
như sau
– .STACK 100H ; Dung lượng ngăn xếp là 100H
Khi chương trình được khởi tạo SS sẽ chỉ vào địa chỉ
của đoạn ngăn xếp. Trong ví dụ khởi tạo nói trên SP
được khởi tạo giá trị 100H. Giá trị khởi tạo này sẽ tạo ra
một vị trí ngăn xếp rỗng. Khi ngăn xếp không rỗng SP
chứa địa chỉ offset của đỉnh ngăn xếp. SP =100H.
219
PUSH & POP
Lệnh: PUSH SRC
– SRC là một thanh ghi hay một ô nhớ 16bit
– Lệnh PUSH lấy nội dung của SRC đưa vào ngăn xếp.
Thao tác như sau
Giảm nội dung của SP đi 2
Lấy nội dung của SRC đặt vào ô nhớ SS:SP
Lệnh: POP DES
– DES là một thanh ghi hay một ô nhớ 16bit
– Lệnh POP lấy nội dung của đỉnh ngăn xếp đưa vào
DES. Thao tác như sau
Lấy nội dung ô nhớ SS:SP đặt vào DES
Tăng nội dung của SP lên 2
220
Ví dụ ngăn xếp
Khai báo: .STACK 100H
Tại thời điểm hiện tại
– AX = 1234H, BX = 5678H.

SP = 100H
Offset

0F6H

0F8H

0FAH

0FCH

0FEH AX 1234H

100H SP BX 5678H

221
Ví dụ ngăn xếp (tiếp)
Lệnh: PUSH AX

SP = 0FEH
Offset SS:SPAX

0F6H

0F8H
0FAH

0FCH

0FEH 1234H SP AX 1234H


100H BX 5678H

222
Ví dụ ngăn xếp (tiếp)

PUSH BX

SP = 0FCH

Offset SS:SPBX

0F6H

0F8H

0FAH

0FCH 5678H SP

0FEH 1234H AX 1234H

100H BX 5678H

223
Ví dụ ngăn xếp (tiếp)
POP AX

AXSS:SP

Offset SP = 0FEH

0F6H

0F8H

0FAH

0FCH 5678H

0FEH 1234H SP AX 5678H

100H BX 5678H

224
Ví dụ ngăn xếp (tiếp)
POP BX

BXSS:SP

Offset SP = 100H

0F6H

0F8H

0FAH

0FCH 5678H

0FEH 1234H AX 5678H

100H SP BX 1234H

225
Thủ tục
Các thủ tục được khai báo như sau
– Name PROC TYPE
– ;Lưu trạng thái hiện tại của vi xử lý
– ;Thân thủ tục
– …
– ;Phục hồi trạng thái cũ của vi xử lý
– RET ;Kết thúc thủ tục
– Name ENDP
Trong đó :
– Name: Tên thủ tục
– Type : Kiểu gọi thủ tục, có hai kiểu gọi
Gọi gần: NEAR: Dòng lệnh gọi thủ tục ở cùng đoạn với thủ
tục đó
Gọi xa: FAR : Dòng lệnh gọi thủ tục ở khác đoạn với thủ
tục đó
– RET : Kết thúc thủ tục và trả quyền điều khiển cho chương
trình.
– Chú ý : Với assembly không có khái niệm hàm mà các lập
trình viên phải tự lập trình tạo ra nơi chứa kết quả của thủ tục
hoặc lấy giá trị tại các địa chỉ mặc định 226
Gọi thủ tục

CALL NAME
– SP = SP - 2
– Địa chỉ của lệnh tiếp theo sau lệnh CALL được đưa
vào đỉnh ngăn xếp
– IP trỏ vào địa chỉ vào lệnh đầu tiên của thủ tục
– Kết thúc thủ tục, khi gặp lệnh RET
– Lấy lại IP từ đỉnh ngăn xếp, lúc này IP trỏ vào địa chỉ
của lệnh tiếp theo sau lệnh CALL NAME
– SP = SP +2

227
Ví dụ
TITLE Chuyen_Chuoi
.MODEL SMALL
.STACK 200H
.DATA
STR1 DB ‘HELLO’
STR2 DB 5 DUP (?)
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
LEA SI,STR1 ;DS:SI trỏ đến STR1
LEA DI,STR2 ;ES:DI trỏ đến STR2
CLD
MOVSB
MOVSB
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN 228
Sơ đồ bộ nhớ trước khi thực hiện lệnh MOVSW
MOVSB & MOVSW không làm ảnh hưởng đến cờ

DS:SI H E L L O

SI

ES:DI

DI

DS:SI H E L L O

SI

ES:DI H E

DI

229
CHƯƠNG 5: GIỚI THIỆU VỀ CÁC BỘ
VI XỬ LÝ HIỆN ĐẠI
THẾ HỆ CHIP DUAL-CORE

Khái niệm:
– Dual Core là danh từ chung mà Intel chỉ các vi xử lý
có 2 nhân, và 2 nhân này là nhân thực ( vật lý ).
– Pentium Dual Core là chỉ các sản phẩm Pentium của
Intel, có 2 nhân vật lý.
– Core 2 Duo là danh từ của Intel, chỉ một dòng sản
phẩm CPU của Intel dựa trên kiến trúc Core tương tự
như với các dòng Pentium Dual Core mà Intel đã đặt
tên.
THẾ HỆ CHIP DUAL-CORE

Khái niệm:
– Chip mà có 2 nhân nằm trên 1 đế ( die ) thì đó chính là thời của
các chip Pentium Dual Core với tên mã là Pen D 8xxx
( codename Smithfield ). Các CPU này, tuy có 2 lõi nhưng cả 2
lõi này đều nằm trên 1 đế. Dòng Dual Core ra đời sau dòng Pen
D8xx chính là dòng Pentium D Presler ( hay Pen D 9xx ) thì có 2
đế.
THẾ HỆ CHIP DUAL-CORE

Sắp xếp tiến trình thực hiện


– Có một phần trong hệ điều hành Windows, gọi là
"scheduler", chịu trách nhiệm chỉ cho CPU chương
trình nào cần chạy và vào thời gian nào.
– Điều này cho phép vài chương trình chạy trong cùng
một thời điểm, trong khi đó CPU sẽ chuyển qua lại
gữa chúng khi cần thiết. Khi có quá nhiều chương
trình đang chạy, máy tính có thể chậm lại, khi bộ
scheduler điều khiển việc sử dụng CPU sang nhiều
hướng khác nhau.
– Nếu một bộ vi xử lý dual core được sử dụng trên máy
tính này, thì bộ scheduler cũng được tăng gấp đôi
tương ứng.
THẾ HỆ CHIP DUAL-CORE

Chi tiết kỹ thuật


– Kiến trúc Core (phiên bản desktop) hay Pentium M
(phiên bản di động)
– Cache chỉ lệnh L1 32KB và Cache dữ liệu L1 32KB
cho mỗi lõi
– Công nghệ Dual-core
– Công nghệ sản xuất 65nm
– Socket 775
THẾ HỆ CHIP DUAL-CORE

Chi tiết kỹ thuật


– Bus ngoài 800 MHz (200MHz truyền tải 4 dư liệu trên
mỗi chu kỳ clock) trên các phiên bản desktop hay 533
MHz (133 MHz truyền tải 4 dữ liệu trên mỗi chu kỳ
clock) đối với các phiên bản di động.
– Cache L2 hợp nhất 1MB
– Công nghệ Intel EM64T
– Tập chỉ lệnh SSE3
– Thực thi vô hiệu hóa bit
– Khả năng quản lý công suất thông minh
– Công nghệ SpeedStep nâng cao
THẾ HỆ CHIP DUAL-CORE

Hiệu năng
– Pentium Dual Core ( dựa trên kiến trúc Core, mà sau
này các bạn thấy ở các dòng sản phẩm như Pentium
Dual Core E2xxx, E5xxx, E6300-E6500-E6700...)
chính là Core 2 Duo cắt giảm các tính năng như :
Bus, tập lệnh, cache hay thậm chí là xung nhịp.
– Chính xác, nếu Core 2 Duo muốn mạnh hơn Pentium
Dual Core thì cả hai con phải được sản xuất trên
cùng một tiến trình ( 65nm hay 45nm ), cùng thời gian
sản xuất ( liên kề nhau trong quý ) và quan trọng là
cùng công nghệ.
THẾ HỆ CHIP DUAL-CORE
Các model của Pentium Dual Core

Chi tiết kỹ Clock Nhiệt độ cực đại


Model Clock ngoài TDP Điện áp
thuật trong (º C)

E2180 SLA8Y 2 GHz 800 MHz 65 W 1.162V - 1.312V 73.2


E2160 SLA8Z 1.8 GHz 800 MHz 65 W 1.162V - 1.312V 73.2
E2160 SLA3H 1.8 GHz 800 MHz 65 W 1.162V - 1.312V 61.4
E2140 SLA3J 1.6 GHz 800 MHz 65 W 1.162V - 1.312V 61.4
E2140 SLA93 1.6 GHz 800 MHz 65 W 1.162V - 1.312V 61.4
T2080 SL9VY 1.73 GHz 533 MHz 31 W - 100
T2060 SL9VX 1.60 GHz 533 MHz 31 W - 100
THẾ HỆ CHIP CORE-I
Khái niệm
– Core i là một thuật ngữ để chỉ thông số bộ vi xử lý của máy tính.
Đầu tiên là phải phân biệt giữa tên thương hiệu i3, i5 và i7. Khi
phân ra nhiều core i: core i3, core i5, core i7 là để nhà cung cấp
phân loại cấu hình máy cho mục đích sử dụng của từng đối
tượng và phân loại giá cả.
– Core i3: Được dùng trong nhiều mẫu máy tính giá rẻ, tầm trung.
Máy tính core i3 được sử dụng nhiều cho nhu cầu sử dụng máy
tính có tính năng thông thường.
– Core i5: Là vi sử lý loại phổ thông của intel, được dùng nhiều
trong phân khúc thị trường giá cả tầm trung.
– Core i7: Được sử dụng nhiều trong những máy tính cao cấp,
phục vụ nhu cầu hoạt động của các game thủ hay sử dụng, cài
đặt nhiều phần mềm thiết kế đồ họa, chạy chung một lúc nhiều
ứng dụng.
THẾ HỆ CHIP CORE-I
Phân loại kiến trúc thiết kế của các dòng Core i
– Nehalem (Thế hệ đầu)
– Sandy Bridge (Thế hệ thứ 2)
– Intel Ivy Bridge (Thế hệ thứ 3)
– Haswel (CPU thế hệ 4)
– Broadwell (Thế hệ thứ 5)
– Vi kiến trúc Skylake (Thế hệ thứ 6)
THẾ HỆ CHIP CORE-I
Nhận biết các ký hiệu trên CPU Core I
THẾ HỆ CHIP CORE-I
Điểm khác biệt giữa các core i
THẾ HỆ CHIP XEON-E
Khái niệm
– Chip Xeon là một thương hiệu của vi xử lý x86, được
thiết kế, sản xuất và tiếp thị bởi tập đoàn Intel, nhắm
vào những người dùng máy trạm, máy chủ và thị
trường hệ thống nhúng .
THẾ HỆ CHIP XEON-E
Các thế hệ chip Xeon-E
THẾ HỆ CHIP XEON-E
Sự khác nhau giữa dòng Xeon-e và core-i
– Điểm khác nhau lớn nhất chính là Intel sản xuất Core i chuyên
dành cho máy tính bàn, latop, còn CPU Xeon chủ yếu nhắm vào
các dòng server, workstation của doanh nghiệp.

– Điểm khác nhau thứ hai là đặc tính của Xeon cho phép một máy
chủ dùng chung nhiều CPU. Còn ở Core i thì Intel tắt đi QPI
(QuickPath Interconnect) (vẫn có trên CPU nhưng bị tắt đi) nên
không chạy một lúc 2 hay nhiều CPU được.

– Điểm khác nhau thứ ba là tuy CPU Xeon đơn cũng tương tự
như Core i, nhưng lại có thêm khả năng dùng RAM ECC và 1 số
thông số nhỏ (nhưng phải được mainboard hỗ trợ).
THẾ HỆ CHIP XEON-E
Nên dùng CPU Xeon hay Core i7 cho server
– Từ những khác biệt trên ta có thể thấy CPU Xeon có
ưu thế hơn hẳn so với Core i nếu chạy trong môi
trường máy chủ (server), Workstation của doanh
nghiệp.
– CPU Intel Xeon có tích hợp thêm tính năng xài RAM
ECC (Error Checking and Correction) là tính năng tự
kiểm tra và sửa lỗi được coi là thành phần căn bản và
vô cùng quan trọng trong máy chủ (server).
CHƯƠNG 6: GIỚI THIỆU CÁC
BỘ VI ĐIỀU KHIỂN
HỌ VI ĐIỀU KHIỂN 8051

Tổng quan
– Vi mạch chủ yếu của họ MCS - 51 là chip µC8051, linh kiện đầu
tiên của họ này được đưa ra thị trường. Chip μC8051 có các
đặc trưng được tóm tắt như sau:
4 KB ROM và 128 byte RAM
4 port 8- bít, 32 lối vào/ra
2 bộ định thời 16 bít
Mạch giao tiếp nối tiếp
Không gian nhớ chương trình (mở rộng) ngoài 64K
Không gian nhớ dữ liệu ngoài 64K
Bộ xử lý bít (thao tác trên các bít riêng rẽ)
210 vị trí bit nhớ được định địa chỉ
Nhân chia trong thời gian 4s.
HỌ VI ĐIỀU KHIỂN 8051

Mô tả cấu trúc và chức năng


HỌ VI ĐIỀU KHIỂN 8051

Mô tả cấu trúc và chức năng


– Chức năng tóm tắt của từng chân như sau : 32 trong
số 40 chân của 8051 có công dụng vào/ra, tuy nhiên
24 trong 32 đường này có hai mục đích, mỗi đường
có thể hoạt động vào/ra hoặc hoạt động như một
đường điều khiển hoặc như một đường địa chỉ/dữ
liệu của bus địa chỉ/dữ liệu dồn kênh.
– 32 chân nêu trên hình thành 4 port 8-bít.
HỌ VI ĐIỀU KHIỂN 8051

Mô tả cấu trúc và chức năng


- Port 0
– Port 0 ( các chân từ 32 đến 39) có hai công dụng.
Trong các thiết kế tối thiểu, port 0 được sử dụng làm
nhiệm vụ vào/ra. Trong các thiết kế lớn hơn có bộ
nhớ ngoài, port 0 trở thành bus địa chỉ và bus dữ liệu
dồn kênh.
- Port 1
– Port 1 chỉ có một công dụng là vào/ra (các chân từ 1
đến 8), và dùng để giao tiếp vơi các thiết bị ngoại vi
hoặc làm đường vào/ra hoặc làm các lối vào cho
mạch định thời thứ ba.
HỌ VI ĐIỀU KHIỂN 8051

Mô tả cấu trúc và chức năng


- Port 2
– Port 2 (các chân từ 21 đến 28) có hai công dụng,
hoặc làm nhiệm vụ vào/ra hoặc là byte địa chỉ cao
của bus địa chỉ 16-bít cho các thiết kế có bộ nhớ
chương trình ngoài hoặc các thiết kế có nhiều hơn
256 byte bộ nhớ dữ liệu ngoài.
- Port 3
– Port 3 ( các chân từ 10 đến 17) có hai công dụng. Khi
không hoạt động vào/ra, các chân của port 3 có nhiều
chức năng riêng ( mỗi chân có chức năng riêng liên
quan đến các đặc trưng cụ thể của 8051).
HỌ VI ĐIỀU KHIỂN 8051

Mô tả cấu trúc và chức năng


- Chân cho phép truy nhập bộ nhớ chương trình PSEN
– 8051 cung cấp cho ta 4 tín hiệu điều khiển bus. Tín
hiệu PSEN (Program store enable) là tín hiệu ra trên
chân 29. Đây là tín hiệu điều khiển cho phép ta truy
xuất bộ nhớ chương trình ngoài, chân này thường nối
với chân cho phép ra OE ( output enable) của EROM
(hoặc ROM ), cho phép đọc các byte lệnh.
HỌ VI ĐIỀU KHIỂN 8051

Mô tả cấu trúc và chức năng


- Chân cho phép chốt địa chỉ ALE
– 8051 sử dụng chân 30, chân cho phép chốt địa chỉ
ALE (address latch enable) để giải dồn kênh
(demultiplexing) bus dữ liệu và bus địa chỉ.
- Chân truy xuất ngoài EA
– Lối vào này ( 31 chân ) có thể nối được với 5V ( logic
1) hoặc nối với GND ( logic 0).
HỌ VI ĐIỀU KHIỂN 8051

Mô tả cấu trúc và chức năng


- Chân RESET (RST)
– Lối vào RST (chân 9) là lối vào tái khởi động (master
reset) của 8051 dùng để thiết lập trạng thái ban đầu
cho hệ thống hay gọi tắt là reset hệ thống.
- Các chân XTAL1&XTAL2
– Mạch dao động bên trong chip 8051 được ghép với
thạch anh bên ngoài ở hai chân XTAL1 và XTAL2
(chân 18 và 19).
HỌ VI ĐIỀU KHIỂN 8051

Mô tả cấu trúc và chức năng


- Tổ chức bộ nhớ
– Bộ nhớ trong chip bao gồm ROM (Chỉ có ở 8051/8052) và RAM.
RAM trên chip bao gồm vùng RAM đa chức năng và vùng RAM
với từng bít được định điạ chỉ (gọi là vùng RAM định địa chỉ bít,
các Bank) và các thanh ghi chức năng đặc biệt SFR (specail
function register). Hai đặc tính đáng lưu ý là:
các thanh ghi và các port vào/ra được định địa chỉ theo kiểu
ánh xạ bộ nhớ (memory mapped) và được truy xuất như một
vị trí trong bộ nhớ.
Vùng stack thường trú trên RAM trong chip (RAM nội) thay vì
ở trong RAM ngoài đối với cá bộ vi xử lý.
HỌ VI ĐIỀU KHIỂN 8051

Mô tả cấu trúc và chức năng


- Vùng RAM đa mục đích
– Vùng RAM đa mục đích có 80 byte đặt ở địa chỉ từ
30H đến 7FH, bên dưới vùng này từ địa chỉ 00H đến
2FH là vùng nhớ có thể được sử dụng tương tự.
- Vùng RAM định địa chỉ bít
– 8051 chứa 210 bít được định địa chỉ trong đó128 bít
chứa trong các byte ở địa chỉ 20H đến 2FH (16 byte x
8 bít = 128 bít) phần còn lại chứa trong các thanh ghi
đặc biệt.
HỌ VI ĐIỀU KHIỂN 8051

Mô tả cấu trúc và chức năng


- Các thanh ghi
– 32 vị trí thấp nhất của bộ nhớ nội được sử dụng như
những thanh ghi. Các lệnh của 8051 hỗ trợ 8 thanh
ghi từ R0 đến R7 thuộc băng 0 (bank 0) đây là băng
mặc định sau khi reset hệ thống.
HỌ VI ĐIỀU KHIỂN 8051

Lập trình cho µc8051


– Tồn tại chương trình Assembler riêng cho họ MCS51,
lập trình hợp ngữ tương đương như lập trình hợp
ngữ cho họ 80x86. Điểm mạnh tương ứng là tồn tại
một phiên bản ngôn ngữ C cho MCS51, tạo điều kiện
cho những ai đã quen với lập trình C có thể tạo các
phần mềm ứng dụng để cài đặt vào trong bộ nhớ
ROM của MCS51 đối với những ứng dụng thực tế.
HỌ VI ĐIỀU KHIỂN 8051

Các khả năng ứng dụng của µC8051


Đồ điện gia dụng Máy tính gia đình Nhạc cụ điện tử
Thiết bị đàm thoại TV Máy khâu
Điện thoại Truyền hình cáp Điều khiển ánh
Trong gia đình Hệ thống an toàn VCR sáng
Mở đóng cửa Camera Máy nhắn tin...
Trả lời tự động ... Camera ...

Điện thoại Máy FAX Máy in Laze


Thiết bị văn Máy tính Lò vi sóng Máy in màu
phòng Hệ thống an toàn Photocopy Máy nhắn tin

Máy tính hành trình Đo lường Điều hoà không


Tự động hoá
Điều khiển động cơ Truyền tin… khí v.v…
HỌ VI ĐIỀU KHIỂN AVR

Khái niệm
– AVR là một họ vi điều khiển do hãng Atmel sản xuất
(Atmel cũng là nhà sản xuất dòng vi điều khiển 89C51
mà có thể bạn đã từng nghe đến). AVR là chip vi điều
khiển với cấu trúc tập lệnh đơn giản hóa - RISC
(Reduced Instruction Set Computer), một kiểu cấu
trúc đang thể hiện ưu thế trong các bộ xử lý.
HỌ VI ĐIỀU KHIỂN AVR

Lý do lựa chọn vi điều khiển AVR


– So với các chip vi điều khiển 8 bits khác, AVR có nhiều đặc tính
hơn hẳn, hơn cả trong tính ứng dụng (dễ sử dụng) và đặc biệt là
về chức năng:
Gần như chúng ta không cần mắc thêm bất kỳ linh kiện phụ
nào khi sử dụng AVR, thậm chí không cần nguồn tạo xung
clock cho chip (thường là các khối thạch anh).
Thiết bị lập trình (mạch nạp) cho AVR rất đơn giản, có loại
mạch nạp chỉ cần vài điện trở là có thể làm được. Một số
AVR còn hỗ trợ lập trình on – chip bằng bootloader không
cần mạch nạp…
Bên cạnh lập trình bằng ASM, cấu trúc AVR được thiết kế
tương thích C.
Nguồn tài nguyên về source code, tài liệu, application note…
rất lớn trên internet.
HỌ VI ĐIỀU KHIỂN AVR

Một số chip AVR thông dụng


ATmega16
ATmega161
ATmega162
ATmega163
ATmega169
ATmega32
ATmega323
ATmega103
ATmega64/128/2560/2561
HỌ VI ĐIỀU KHIỂN AVR

Ngôn ngữ lập trình Assembly


– Để hiểu thấu đáo về AVR bạn phải lập trình bằng
chính ngôn ngữ của nó, ASM. Như vậy lập trình bằng
ASM giúp bạn hiểu tường tận về AVR, và tất nhiên
để lập trình được bằng ASM bạn phải hiểu về cấu
trúc AVR….
– Một lý do khác, lập trình bằng ASM là các trình dịch
(compiler) ASM cho AVR là hoàn toàn miễn phí, và
nguồn source code cho AVR viết bằng ASM là rất lớn.
HỌ VI ĐIỀU KHIỂN AVR

Công cụ
Trình biên dịch: Có rất nhiều trình biên dịch bạn có thể sử
dụng đế biên dịch code của bạn thành file intel hex để nạp
vào chip, một số trình dịch quen thuộc có thể kể đến như
sau:
– AvrStudio
– Wavrasm:
– WinAVR hay avr-gcc
– CodeVisionAvr
HỌ VI ĐIỀU KHIỂN AVR

Tổ chức của AVR


– AVR có cấu trúc Harvard, trong đó đường truyền cho
bộ nhớ dữ liệu (data memory bus) và đường truyền
cho bộ nhớ chương trình (program memory bus)
được tách riêng.
– Data memory bus chỉ có 8 bit và được kết nối với hầu
hết các thiết bị ngoại vi, với register file. Trong khi đó
program memory bus có độ rộng 16 bits và chỉ phục
vụ cho instruction registers. Hình 6.7 mô tả cấu trúc
bộ nhớ của AVR.
HỌ VI ĐIỀU KHIỂN AVR

Tổ chức bộ nhớ của AVR


HỌ VI ĐIỀU KHIỂN PIC

Khái niệm
– PIC là một họ vi điều khiển RISC được sản xuất bởi
công ty Microchip Technology. Dòng PIC đầu tiên là
PIC1650 được phát triển bởi Microelectronics
Division thuộc General Instrument.
– PIC bắt nguồn là chữ viết tắt của "Programmable
Intelligent Computer" (Máy tính khả trình thông minh)
là một sản phẩm của hãng General Instrument đặt
cho dòng sản phẩm đầu tiên của họ là PIC1650.
HỌ VI ĐIỀU KHIỂN PIC

Lý do lựa chọn vi điều khiển PIC


– Họ vi điều khiển này có thể tìm mua dễ dàng tại thị
trường Việt Nam.
– Giá thành không quá đắt.
– Có đầy đủ các tính năng của một vi điều khiển khi
hoạt động độc lập.
– Là một sự bổ sung rất tốt về kiến thức cũng như về
ứng dụng cho họ vi điều khiển mang tính truyền
thống: họ vi điều khiển 8051.
– Số lượng người sử dụng họ vi điều khiển PIC.
– Sự hỗ trợ của nhà sản xuất về trình biên dịch
– Các tính năng đa dạng của vi điều khiển PIC
HỌ VI ĐIỀU KHIỂN PIC

Kiến trúc của PIC


HỌ VI ĐIỀU KHIỂN PIC

Ngôn ngữ lập trình cho PIC


– PIC đang hỗ trợ ngôn ngữ C, Basic, Pascal,
Assembly.
– Ngôn ngữ lập trình cho PIC rất đa dạng. Ngôn ngữ
lập trình cấp thấp có MPLAB (được cung cấp miễn
phí bởi nhà sản xuất Microchip), các ngôn ngữ lập
trình cấp cao hơn bao gồm C, Basic, Pascal, …
Ngoài ra còn có một số ngôn ngữ lập trình được phát
triển dành riêng cho PIC như PICBasic, MikroBasic,…
HỌ VI ĐIỀU KHIỂN PIC

Mạch nạp cho PIC


– Đây cũng là một dòng sản phẩm rất đa dạng dành
cho vi điều khiển PIC. Có thể sử dụng các mạch nạp
được cung cấp bởi nhà sản xuất là hãng Microchip
như: PICSTART plus, MPLAB ICD 2, MPLAB PM 3,
PRO MATE II.
HỌ VI ĐIỀU KHIỂN PIC

Các dòng PIC và cách lựa chọn vi điều khiển PIC


– Vi điều khiển 8-bit:
– PIC10, PIC12, PIC14, PIC16, PIC17, PIC18
– Vi điều khiển16-bit:
– PIC24
– Bộ điều khiển xử lý tín hiệu số 16-bit (dsPIC)
– dsPIC30, dsPIC33F
– Bộ điều khiển xử lý tín hiệu số 32-bit (PIC32)
– PIC32 (công bố ngày 05/11/2007)
HỌ VI ĐIỀU KHIỂN PIC

Các dòng PIC và cách lựa chọn vi điều khiển PIC


Cách lựa chọn một vi điều khiển PIC phù hợp:
– Trước hết cần chú ý đến số chân của vi điều khiển cần
thiết cho ứng dụng.
– Cần chọn vi điều khiển PIC có bộ nhớ flash để có thể nạp
xóa chương trình được nhiều lần hơn.
– Tiếp theo cần chú ý đến các khối chức năng được tích
hợp sẵn trong vi điều khiển, các chuẩn giao tiếp bên trong.
– Sau cùng cần chú ý đến bộ nhớ chương trình mà vi điều
khiển cho phép.
– Ngoài ra mọi thông tin về cách lựa chọn vi điều khiển PIC
có thể được tìm thấy trong cuốn sách “Select PIC guide”
do nhà sản xuất Microchip cung cấp.

You might also like