ĐỀ CƯƠNG CHI TIẾT MÔN HỌC
1. Tên môn học: Kỹ thuật vi xử lý.
2. Phân bố thời gian:
45 tiết ( 3 trình ).
3. Môn tiên quyết:
Kỹ thuật vi xử lý là môn học quan trọng trong việc nghiên cứu phần cứng máy tính.
Các kiến thức môn học cần có để phục vụ cho môn học này bao gồm:
• Kỹ thuật điện tử số (2 mức: 0, 1, bộ nhớ).
• Kiến trúc máy tính.
4. Đối tượng học:
Sinh viên ngành Kỹ thuật máy tính, Điều khiển tự động, Điện tử viễn thông, Kỹ thuật
điện tử, Công nghệ thông tin.
5. Mô tả môn học:
Trang bị cho sinh viên những kiến thức cơ bản nhất có tính chất hệ thống liên quan
đến kỹ thuật VXL. Trang bị cho sinh viên khả năng tư duy trong nghiên cứu, tiếp cận với
các hệ VXL tiên tiến, hiện đại hơn. Ngoài ra học phần còn giúp cho sinh viên dễ dàng hơn
trong việc xây dựng các chương trình điều khiển thiết bị ghép nối với máy tính.
Nội dụng cụ thể bao gồm các phần cơ bản sau:
• Khái niệm, cấu trúc và nguyên lý hoạt động của một hệ VXL.
• Bộ VXL 8088/8086.
• Các ghép nối cơ bản của 8088/8086 với thiết bị ngoại vi.
• Các phương thức đièu khiển vào ra dữ liệu trong kỹ thuật VXL.
6. Nhiệm vụ của sinh viên:
Sinh viên phải tham gia đủ trên 80% giờ trên lớp. Phải hoàn thành đầy đủ bài tập và
các bài thực hành trong chương trình.
7. Nội dung giảng dậy
Chương 1 Hệ vi xử lý
1.1. Vi xử lý là gì?
1.2. Các thế hệ của bộ vi xử lý
1.2.1.
Thế hệ 1 (1971 đến 1973)
1.2.2.
Thế hệ 2 (1974 đến 1977)
1.2.3.
Thế hệ 3 (1978 đến 1982)
1.3.
Thế hệ 4 (1983 đến nay)
1.4. Giới thiệu cấu trúc của hệ vi xử lý
1.3.1.
CPU - Bộ xử lý trung tâm
1.3.2.
Bộ nhớ bán dẫn (ROM, RAM)
1.3.3.
Hệ thống vào ra (I/O)
1.3.4.
Liên hệ giữa các khối
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
Chương 2 Bộ vi xử lý 8088 của Intel
2.1. Giới thiệu hoạt động của bộ vi xử lý 8088
2.1.1.
Giới thiệu chung
2.1.2.
Cấu trúc và hoạt động của bộ VXL 8088
2.2. Chế độ địa chỉ của 8088
2.2.1.
Chế độ địa chỉ thanh ghi
2.2.2.
Chế độ địa chỉ tức thì
2.2.3.
Chế độ địa chỉ tực tiếp
2.2.4.
Chế độ địa chỉ gián tiếp qua thanh ghi
2.2.5.
Chế độ địa chỉ tương đối cơ sở
2.2.6.
Chế độ địa chỉ tương đối chỉ số
2.2.7.
Chế độ địa chỉ tương đối chỉ số cơ sở
2.3. Mô tả tập lệnh của 8088
2.3.1.
Nhóm lệnh chuyển dữ liệu
2.3.2.
Nhóm lệnh số học
2.3.3.
Nhóm lệnh logic, dịch và quay
2.3.4.
Nhóm lệnh so sánh
2.3.5.
Nhóm lệnh rẽ nhánh (nhảy), lặp
2.3.6.
Nhóm các lệnh đặc biệt
Chương 3 Lập trình bằng hợp ngữ cho 8088 trên máy tính IBM PC và
các máy tương thích IBM PC
3.1. Giới thiệu chung
3.2. Giới thiệu khung chương trình
3.2.1.
Cấu trúc của một lệnh hợp ngữ
3.2.2.
Dữ liệu cho chương trình hợp ngữ
3.2.3.
Biến và hằng
3.2.4.
Khung của một chương trình hợp ngữ
3.3. Cách tạo và cho chạy một chương trình hợp ngữ
3.4. Các cấu trúc lập trình cơ bản trong assembly
3.4.1.
Cấu trúc tuần tự
3.4.2.
Cấu trúc lựa chọn
3.4.3.
Cấu trúc lặp
3.5. Truyền tham số
3.6. Một số ngắt của DOS và của BIOS
Chương 4 Ghép 8088 với bộ nhớ và tổ chức vào ra dữ liệu
4.1. Giới thiệu tín hiệu chân của 8088 và các mạch phụ trợ
4.1.1.
Bảy nhóm tín hiệu
4.1.2.
Phân kênh để tách thông tin và đệm bus
4.1.3.
Mạch tạo xung nhịp 8284
4.1.4.
Mạch điều khiển bus 8288
4.1.5.
Biều đồ thời gian của các lệnh đọc/ghi
4.2. Phối ghép 8088 với bộ nhớ
4.2.1.
Bộ nhớ bán dẫn
4.2.2.
Giải mã địa chỉ cho bộ nhớ
4.2.3.
Phối ghép 8088 với bộ nhớ
4.3. Phối ghép 8088 với thiết bị ngoại vi
4.3.1.
Các kiểu phối ghép vào ra
4.3.2.
Giải mã địa chỉ cho thiết vị vào/ra
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
2
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
4.3.3.
Các mạch cổng đơn giản
4.3.4.
Mạch phối ghép vào/ra song song lập trình được PPI 8255
Chương 5 Vào ra dữ liệu bằng cách thăm dò
5.1. Giới thiệu chung về các phương pháp điều khiển vào/ra dữ liệu
5.2. Vào/ra dữ liệu bằng cách thăm dò trạng thái sẵn sàng của thiết bị ngoại
vi
Chương 6 Ngắt và xử lý ngắt trong hệ vi xử lý 8088
6.1. Sự cần thiết phải ngắt CPU
6.2. Ngắt trong vi xử lý 8088
6.2.1.
Các loại ngắt trong hệ 8088
6.2.2.
Đáp ứng của CPU khi có yêu cầu ngắt
6.2.3.
Xử lý ưu tiên ngắt
6.2.4.
Mạch điều khiển ngắt ưu tiên PPI 8259A
Chương 7 Vào ra dữ liệu bằng DMA
7.1. Nguyên tắc của việc trao đổi dữ liệu với thiết bị ngoại vi bằng cách
thâm nhập trực tiếp vào bộ nhớ (DMA)
7.2. DMAC 8237-5 trong hệ vi xử lý 8088
7.2.1.
Tín hiệu HOLD và HLDA trong CPU 8088
7.2.2.
Mạch DMAC 8237-5 của Intel
8. Nội dung các bài thực hành ( gồm có 6 bài thực hành - 5tiết/bài)
Bài 1: Làm quen với trình dich hợp ngữ ASSEMBLER và cách gọi ngắt trong ASM
Mục đích:
• Biết cách chuyển một chương trình hợp ngữ (Assembler) ra dạng mã máy, qua đó
giúp sinh viên hiểu rõ hơn cơ chế hoạt động của các lệnh, cách trao đổi số liệu.
• Biết cách nhập chương trình vào bộ nhớ và chạy chương trình
• Hiểu, biết cách gọi và truyền tham số khi gọi ngắt (Chủ yếu là ngát 21h của DOS,
với các hàm hiển thị và nhập ký tự. Nhằm phục vụ cho việc kiểm tra kết qua cho
những bài thí nghiệm sau)
Bài 2: Trao đổi dữ liệu và thực hiện các phép tính số học.
Mục đích:
• Giúp sinh viên làm quen với việc nạp và trao đổi dữ liệu giữa các thanh ghi, giữa
thanh ghi với bộ nhớ và các phép tính số học cơ bản. Qua đó thấy được ý nghĩa và
tác dụng của các thanh ghi và bộ nhớ trong quá trình lưu trữ và xử lý số liệu.
Bài 3: So sánh và kiểm tra dữ liệu.
Mục đích:
• Giúp sinh viên làm quen với các cấu trúc lập trình cơ bản bằng hợp ngữ.
• Biết cách so sánh và kiểm tra dữ liệu thông qua các cờ.
Bài 4: Các thao tác Logic.
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
3
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
Mục đích:
• Giúp sinh viên làm quen với các cấu trúc lập trình cơ bản bằng hợp ngữ.
• Giúp sinh viên khảo sát các thao tác đại số BOOLEAN theo phương thức mà chúng
tác động trên các thanh ghi và dữ liệu trong bộ nhớ.
Bài 5: Chương trình con và truyền tham số.
Mục đích:
• Giúp sinh viên làm quen với các cấu trúc lập trình cơ bản bằng hợp ngữ.
• Giúp sinh viên làm quen với cấu trúc lập trình theo chương trình con, truyền tham số
cho chương trình con.
Bài 6: Vào ra dữ liệu với các cổng.
Mục đích:
• Giúp sinh viên làm quen với các kiểu giao tiếp giữa vi xử lý với các thiết bị ngoài.
• Biết cách lập trình đặt các chế độ làm việc cho các cổng giao tiếp của bộ điều khiển
ghép nối.
9. Tài liệu tham khảo:
[1] Văn Thế Minh, Kỹ thuật vi xử lý, NXB Giáo Dục, 1997.
[2] Đỗ Xuân Thụ & Hồ Khánh Lâm, Kỹ thuật vi xử lý và máy vi tính, ...
[3] Đỗ Xuân Tiến, Kỹ thuật lập trình điều khiển hệ thống, ...
[4] Lê Văn Doanh & Phạm Khắc Chương, Kỹ thuật vi điều khiển, ...
[5] Biên Dịch: Nguyễn Minh San - Hoàng Đức Hải, Cẩm nang lập trình hệ thống, ...
[6] Nguyễn Đình Việt, Kiến trúc máy tính, ...
[7] Trần Quang Vinh, Cấu trúc máy vi tính, NXB Giáo Dục, 1998.
[8] Ytha Yu & Charles Marut, Lập trình hợp ngữ (Assembly) và máy vi tính IBM-PC,
NXB Giáo Dục, 1996.
[9] PTS. Nguyễn Quang Tấn, Vũ Thanh Hiền, Lập trình với Hợp Ngữ, NXB Thống Kê,
1997.
[10]
Trần Bá Thái, Điều khiển và ghép nối các thiết bị ngoại vi, NXB thống kê,
1987.
[11]
Computer Organization and Assembly Language Programming For IBM PC
and Compatibles Michael Thorne - The Benjamin-Cummings Publishing Company,
Inc. 1991.
[12]
Microprocessors and microcomputer-based
Rafiquzzaman - CRC Press, 1995.
system
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
design
Mohamed
4
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
NỘI DUNG CHI TIẾT
Chương 1
HỆ VI XỬ LÝ
1.1.
Vi xử lý là gì?
Ngày nay xu hướng số hoá mọi dạng tín hiệu càng được khẳng định rõ nét trong nhiều
lĩnh vực: Điện tử, tin học, viễn thông, công nghệ thông tin, kỹ thuật điều khiển tự động ... vì
tín hiệu số có cấu trúc đơn giản, dễ tính toán, xử lý và gia công ...
Việc xử lý, tính toán, điều khiển được thực hiện chủ yếu trên các máy tính PC (Hay hệ
vi xử lý nói chung). Các hệ vi xử lý này thường được ghép nối và giao tiếp với nhiều thiết bị
ngoại vi khác nhau. Mỗi thiết bị làm việc ở môi trường khác nhau cũng như chức năng,
nhiệm vụ khác nhau.
Môi trường của thiết bị có thể là:
• Điện, điện tử.
• Cơ, cơ điện.
• Quang điện tử, ...
Chức năng, nhiệm vụ của thiết bị như:
• Thông tin vô tuyến, hữu tuyến.
• Kỹ thuật viễn thông.
• Robốt, máy công cụ, dây truyền sản xuất tự động.
Các hệ thống làm nhiệm vụ xử lý và điều khiển nói chung luôn có một thành phần làm
nhiệm vụ xử lý được chế tạo bằng công nghệ vi điện tử với độ tích hợp cao và rất cao,
chúng thường được gọi là các bộ vi xử lý (MicroProcessor). Các bộ vi xử lý hoạt động (làm
việc) theo chương trình, dùng để tính toán và điều khiển mọi hoạt động của hệ thống.
Việc xây dựng các chương trình điều khiển các thiết bị cho chúng làm việc chính xác,
đồng bộ là rất phức tạp. Các hệ thống càng thông minh thì vai trò của bộ vi xử lý càng quan
trọng.
1.2.
Các thế hệ của bộ vi xử lý
1.2.1.
Thế hệ 1 (1971 đến 1973)
Năm 1971 Intel cho ra đời bộ vi xử lý (VXL) 4004 (dùng cho các máy tính cầm tay)
được chế tạo bằng công nghệ PMOS. Đây là bộ VXL 4 bit dữ liệu, 12 bit địa chỉ và có 2250
Transitor.
Tiếp theo, Intel cho ra đời bộ VXL 4040 là bộ VXL được cải tiến từ VXL 4004. Trong
thời gian này, Intel tiếp tục cho ra đời bộ VXL 8008 là bộ VXL 8 bit dữ liệu.
Đặc điểm của các bộ vi xử lý trong khoảng thời gian này là:
o Tốc độ thực hiện: 10 ÷ 60 (µs/lệnh).
o Tần số đồng hồ: fCLK = 0,1 ÷ 0,8 MHz.
o Cần nhiều mạch phụ trợ để tạo nên một hệ vi xử lý hoàn chỉnh.
1.2.2.
Thế hệ 2 (1974 đến 1977)
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
5
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
Trong thời gian này Intel lần lượt cho ra đời bộ VXL 8080, 8085. Motorola có các bộ
VXL 6800, 6809. Zilog có bộ VXL Z80 và Signetics có bộ VXL 6520.
Đặc điểm của các bộ vi xử lý trong khoảng thời gian này là:
Tập lệnh phong phú hơn.
Là các bộ vi xử lý 8 bit dữ liệu.
Khả năng phân biệt địa chỉ bộ nhớ lên tới 64 KB (16 bit địa chỉ).
Khả năng phân biệt địa cổng là 256 cổng cho thiết bị ngoại vi (sử dụng 8 bit
để đánh địa chỉ cho các cổng).
o Tốc độ 1 ÷ 8 (µs/lệnh).
o Tần số đồng hồ: fCLK = 1 ÷ 5 MHz.
o
o
o
o
Ứng dụng:
o Điều khiển các hệ thống trong công nghiệp.
o Chế tạo các máy tính 8 bit như Apple II.
1.2.3.
Thế hệ 3 (1978 đến 1982)
Trong khoảng thời gian này Intel lần lượt cho ra đời các bộ VXL 8086, 8088, 80186,
80286. Motorola có các bộ VXL 68000, 68010
Đặc điểm của các bộ vi xử lý trong khoảng thời gian này là:
Là các bộ vi xử lý 16 bit dữ liệu.
Tập lệnh đầy đủ hơn.
Khả năng phân biệt địa chỉ bộ nhớ từ 1 MB đến 16 MB.
Khả năng phân biệt địa chỉ cổng là 64 K cổng cho thiết bị ngoại vi (đối với
các bộ VXL của Intel).
o Tốc độ 0,1 ÷ 1 (µs/lệnh).
o Tần số đồng hồ: fCLK = 5 ÷ 10 MHz.
o
o
o
o
Ứng dụng:
Chế tạo các máy tính IBM PC, PC/XT, PC/AT và máy tính Macintosh của Apple.
1.2.4.
Thế hệ 4 (1983 đến nay)
Trong thời gian này Intel thể hiện sức mạnh vượt trội các hãng khác trong việc chế tạo
bộ vi xử lý. Intel liện tục cho ra đời các bộ VXL 80386, 80486 là các bộ VXL 32 bit dữ liệu,
có bên trong đơn vị quản lý bộ nhớ (MMU) cho phép chạy trong chế độ bộ nhớ ảo và đa
nhiệm. Tiếp theo là các bộ VXL Pentium, Pentium II, Pentium III, Pentium IV là các bộ
VXL 64 bit dữ liệu.
Motorola có các bộ VXL 68020, 68030, 68040, 68060.
Đặc điểm của các bộ vi xử lý trong khoảng thời gian này là:
o 32 bit địa chỉ, nên trong chế độ thực thì khả năng phân biệt địa chỉ bộ nhớ là 4
GB. Trong chế độ bộ nhớ ảo thì chúng có khả năng quản lý không gian nhớ
lên tới 64 TB (Teta Byte).
o Cơ chế xử lý xen kẽ dòng mã lệnh (Pipline).
o Bộ nhớ ẩn (Cache).
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
6
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
o Có bộ quản lý bộ nhớ (MMU), bộ đồng xử lý toán học được tích hợp bên
trong.
o Tốc độ 6 ÷ 112 (triệu lệnh/µs).
o Tần số đồng hồ: fCLK = 10 ÷ 100 MHz và cao hơn nữa.
Ứng dụng:
o Chế tạo các máy tính có tốc độ cao, các máy chủ đáp ứng cho các xử lý lớn
như thống kê hàng ngày tại các ngân hàng, khí tượng thuỷ văn, mô phỏng các
quá trình, lĩnh vực quân sự ...
o Các máy tính hiện nay.
1.3.
Giới thiệu cấu trúc của hệ vi xử lý
Chúng ta đã được tìm hiểu qua về sự ra đời và vị trí của các bộ vi xử lý. Bộ VXL là
thành phần cơ bản (trái tim) của máy tính, nó được kết hợp với các bộ phận mạch điện tử
khác như bộ nhớ (bộ nhớ bán dẫn), bộ phối ghép vào ra để tạo nên hệ vi xử lý nói chung mà
máy tính là một trường hợp ứng dụng của thể của hệ vi xử lý.
Data bus
Control bus
CPU
Memory
ROM
RAM
I/O
Interfacing
Thiết bị vào
Thiết bị ra
Address bus
Hình vẽ: Hệ vi xử lý
•
•
•
•
CPU (Central Processing Unit) - Bộ xử lý trung tâm.
Memory: Bộ nhớ bán dẫn.
I/O (Input/Output): Khối phối ghép với thiết bị ngoại vi.
Bus là tập các đường dây truyền thông tin, tín hiệu gồm:
Data bus.
Control bus.
Address bus.
1.3.1.
CPU - Bộ xử lý trung tâm
Là mạch điện tử có độ tích hợp cao (là trái tim của hệ vi xử lý). Ngày nay thường là các
vi mạch có độ tích hợp VLSI.
Chức năng:
o Điều khiển mọi hoạt động của hệ vi xử lý (hoạt động tính toán).
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
7
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
o Thực hiện lệnh, xử lý dữ liệu.
Nguyên tắc hoạt động
Hoạt động theo chương trình nằm trong bộ nhớ. Nó nhận lần lượt nhận từng lệnh từ
bộ nhớ, các lệnh được ghi dưới dạng các bit 0, 1 sau đó giải mã lệnh thành các xung điều
khiển tương ứng các thao tác của lệnh để điều khiển các khối chức năng thực hiện các thao
tác đó. Quá trình thực hiện trên bao gồm cả trao đổi dữ liệu với bộ nhớ. Để thực hiện được
như trên, bên trong CPU có thanh ghi lưu địa chỉ của lệnh chuẩn bị được thực hiện, gọi là
thanh ghi con trỏ lệnh (Instruction Pointer - PC), hay còn được gọi là bộ đếm chương trình
(Program Counter - PC).
Các thành phần cơ bản của bộ vi xử lý:
o Đơn vị điều khiển (Control Unit - CU): điều khiển hoạt động chính của CPU và các
thành phần khác của hệ theo chương trình đã định (dãy các lệnh) bằng các xung
điều khiển.
o Đơn vị số học và logic (Arithmetic and Logic Unit - ALU): thực hiện chức năng xử
lý dữ liệu (tính toán) như cộng, trừ, nhân, chia, NOT, AND, OR ...
o Tập thanh ghi (Registers Set): là các ngăn nhớ đặc biệt nằm ngay trong CPU để tăng
tốc độ trao đổi dữ liệu. Một số thanh ghi lưu trữ thông tin tạm thời phục vụ cho việc
thực hiện chương trình.
o Bus bên trong (Internal Bus): Hệ thống bus trong CPU là tập các đường dây làm
nhiệm vụ kết nối, vận chuyển thông tin (tín hiệu) giữa các thành phần với nhau.
1.3.2.
Bộ nhớ bán dẫn (ROM, RAM)
Là bộ phận quan trọng trong hệ vi xử lý. Nó có nhiệm vụ lưu trữ chương trình và dữ
liệu. Bộ nhớ trong bao gồm bộ nhớ chính và bộ nhớ ẩn (cache L1, L2). Khi khởi động máy,
chương trình điều khiển được chứa trong ROM sẽ điều khiển hoạt động toàn hệ. Các
chương trình ứng dụng, một phần chương trình điều khiển, kết quả chạy chương trình được
để ở RAM. Ngoài ra còn có bộ nhớ ngoài (ổ đĩa từ, quang ...) lưu trữ lâu dài chương trình và
dữ liệu, là các thiết bị ngoại vi.
1.3.3.
Hệ thống vào ra (I/O)
Chức năng
Giao tiếp, 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 cơ bản
o Thiết bị ngoại vi: Bàn phím, màn hình, chuột, máy in, ổ đĩa từ, ổ đĩa quang ... các
bộ chuyển đổi ADC, DAC ..., chuyển đổi thông tin dưới dạng nào đó thành dạng
phù hợp với máy tính và ngược lại rồi liên hệ với máy tính thông qua khối phối
ghép vào/ra.
o Mạch phối ghép vào/ra dùng ghép nối thiết bị ngoại vi với hệ vi xử lý (máy tính).
Trong mạch phối ghép vào/ra có bộ phận phối ghép cụ thể giữa hệ thống bus với
thế giới bên ngoài gọi là các cổng vào ra (I/O port). Mỗi cổng có địa chỉ xác định.
I/O port vào: nhận thông tin từ bên ngoài vào hệ thống, I/O port ra: đưa thông tin
từ hệ ra thế giới bên ngoài.
1.3.4.
Liên hệ giữa các khối
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
8
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
Hệ thống bus là tập các đường dây dùng để kết nối, trao đổi thông tin từ các phần mạch
này tới các thành phần khác (các khối) trong phạm vi một máy tính (1 hệ vi xử lý).
Độ rộng bus là số bit thông tin được vận chuyển đồng thời trong một chu kỳ bus.
Bus địa chỉ
Theo sự phát triển các bộ vi xử lý, độ rộng bus địa chỉ tăng từ 16, 20, 24 và 32 bit. Bus
địa chỉ dùng để vận chuyển địa chỉ từ CPU đến bộ nhớ hay mạch phối ghép vào/ra để tìm ra
ngăn hay nhớ cổng vào/ra cần trao đổi dữ liệu.
o Khả năng phân biệt địa chỉ của CPU phụ thuộc độ rộng bus địa chỉ.
o Bus địa chỉ gồm An-1 ÷ A0 (n bit) có thể quản lý được 2n địa chỉ.
o Độ rộng bus địa chỉ cho biết khả năng phân biệt và quản lý không gian nhớ.
Bus dữ liệu
Độ rộng bus dữ liệu thường là 8, 16, 32 và 64 tuỳ theo các bộ vi xử lý. Ngày nay các bộ
vi xử lý thường làm việc với bus dữ liệu có độ rộng 64 bit, thậm chí là 128 bit. Độ rộng bus
dữ liệu quyết định số bit dữ liệu mà CPU có khả năng nhận hay gửi (đọc/ghi) hay xử lý
cùng lúc.
Bus dữ liệu là bus 2 chiều, dữ liệu có thể được truyền từ CPU đến bộ nhớ hay cổng
vào/ra hoặc ngược lại.
Bus điều khiển
Độ rộng bus điều khiển thường nhỏ hơn độ rộng bus địa chỉ và bus dữ liệu. Mỗi tín
hiệu điều khiển có một chiều nhất định. CPU có thể gửi các tín hiệu điều khiển tới các khối
đồng thời nó cũng nhận tín hiệu điều khiển từ các khối gửi đến. Trong chừng mực nào đó có
thể coi bus điều khiển là 2 chiều. Tính 2 chiều không phải của một tín hiệu điều khiển cụ thể
nào mà là của một nhóm tín hiệu.
o Các tín hiệu phát ra từ CPU: MEMR (tín hiệu điều khiển đọc bộ nhớ),
MEMW (tín hiệu điều khiển ghi bộ nhớ), IOR (tín hiệu điều khiển đọc cổng
vào ra), IOW (tín hiệu điểu khiển ghi cổng vào ra).
o Tín hiệu điều khiển ngắt: INTR.
o Tín hiệu điều khiển chuyển nhượng bus (HOLD, HLDA).
o Clock (CLK): Xung nhịp phát ra từ bộ dao động cấp cho CPU và các thành
phần khác để hệ thống hoạt động đồng bộ.
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
9
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
Chương 2
BỘ VI XỬ LÝ 8088 CỦA INTEL
2.1.
Giới thiệu hoạt động của bộ vi xử lý 8088
2.1.1.
Giới thiệu chung
Bộ vi xử lý 8088 thuộc họ vi xử lý của Intel.
Điển hình: 8085 là bộ vi xử lý 8 bit.
8086 là bộ vi xử lý 16 bit hoàn chỉnh.
8088 là bộ vi xử lý 16 bit trong/ 8 bit ngoài.
Các đặc tính kỹ thuật chủ yếu:
o
o
o
o
o
o
Số thanh ghi: 14 thanhg ghi 16 bit.
Bus địa chỉ: 20 bit.
Bus dữ liệu: 16 (8086) và 8 (8088).
Tập lệnh: 115 (là số lệnh được công bố trong nhiều tài liệu).
Tốc độ chuẩn: 4.77 MHz.
Số chân của bộ vi xử lý: 40.
Bộ vi xử lý 8086 của Intel được phát triển từ năm 1978 vào đưa vào thị trường từ năm
1980. Đây là bộ vi xử lý 16 bit bán hoàn chỉnh, các thanh ghi bên trong là 16 bit và nó xử lý
16 bit dữ liệu cùng một lúc, 8086 liên hệ với kênh số liệu bên ngoài bằng bus dữ liệu 16 bit
và bus địa chỉ là 20 bit.
Bộ vi xử lý 8088 ra đời sau 8086, nó có cấu trúc bên trong và tập lệnh hoàn toàn giống
của 8086, chỉ khác 8086 ở kênh truyền dữ liệu với bên ngoài. 8088 sử dụng kênh dữ liệu 8
bit nên việc truyền dữ liệu giữa các thanh ghi trong nó với bộ nhớ chậm hơn so với 8086.
Đây là một bước lùi về kỹ thuật nhưng đem lại nhiều lợi ích về kinh tế. Tại thời điểm lịch sử
đó, bus DataMaster 8 bit đang được sử dụng rộng rãi trên thị trường, nhiều loại card mở
rộng và các chip hỗ trợ có sẵn trên thị trường là loại 8 bit nên giá thấp hơn loại 16 bit tương
ứng. Việc sử dụng bus dữ liệu 8 bit giúp cho người sử dụng khi nâng cấp máy có thể tận
dụng được các card 8 bit trong các máy cũ cũng như chỉ phải mua mới với giá thấp. Đồng
thời cũng giúp cho các nhà sản xuất các máy tương thích với IBM PC có thêm nhiều cơ hội
lựa chọn sản phẩm của các hãng khác nhau. Chiến lược phát triển có tính kế thừa như vậy
đã góp phần làm cho khách hàng của IBM ngày một gia tăng.
Chọn bộ vi xử lý 8088 để nghiên cứu vì:
o Tập lệnh chung cho các bộ vi xử lý nói trên.
o Tính phức tạp vừa phải, phù hợp với những người mới tìm hiểu.
2.1.2.
Cấu trúc và hoạt động của bộ VXL 8088
Sự hoạt động của bộ vi xử lý 8088/8086 thực sự là việc thực hiện lặp đi lặp lại 3 thao tác
chính là lấy lệnh (fetch), giải mã lệnh (decode) và thực hiện (execute). Sơ đồ khối của bộ vi
xử lý 8088/8086 như hình vẽ với 2 đơn vị chính:
-
EU (Execution Unit): Đơn vị (khối) thực hiện lệnh.
BIU (Bus Interface Unit): Đơn vị giao tiếp bus (khối tương thích bus) để điều
khiển bus hiệu quả hơn.
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
10
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
EU
Đơn vị EU của 8088 và 8086 giống nhau, bao gồm ALU, thanh ghi cờ, các thanh ghi
đệm và các thanh ghi đa năng. Các bus dữ liệu bên trong của EU đều là 16 bit. EU không
nối trực tiếp với bên ngoài, nó nhận lệnh từ hàng đợi lệnh bên trong BUI. Nếu là lệnh cần
truy nhập bộ nhớ hoặc cổng vào/ra (I/O port - thiết bị ngoại vi) thì EU yêu cầu BIU lấy hoặc
gửi dữ liệu. Tất cả các địa chỉ mà EU thao tác đều là 16 bit, khi gửi sang BIU thì BIU sẽ
thực hiện tính toán để tạo địa chỉ vật lý 20 bit và phát ra các chân địa chỉ của chip.
các thanh ghi
đa năng
các thanh ghi
con trỏ
và chỉ số
AX
BX
CX
DX
SP
BP
SI
DI
EU
Bus địa chỉ (20 bit)
các thanh ghi đoạn
và con trỏ lệnh
BIU
Bus dữ liệu
(8 bit)
CS
DS
SS
ES
IP
Bus dữ liệu
ALU(16bit)
Bus trong
8 bit dữ liệu
20 bit địa chỉ
Logic
điều khiển
BUS
các thanh ghi tạm
BUS
ngoài
Khối
điều khiển
của EU
Đệm lệnh (hàng đợi lệnh)
(6 byte cho 8086)
thanh ghi cờ
Các thanh ghi trong
Có 8 thanh ghi, là thành phần nhớ có tốc độ truy nhập rất cao. Bao gồm các thanh ghi đa
năng Ax, Bx, Cx, Dx. Mỗi thanh ghi 16 bit có thể được phân chia thành 2 thanh ghi 8 bit
làm việc độc lập nhau.
• AX (Accumulator, Acc): Thanh chứa, chứa tạm thời dữ liệu (toán hạng, kết quả phép
toán như nhân, chia và được coi là Acc). AX có thể được phân chia thành AH
(Phần cao) và AL (Phần thấp).
• BX (Base): Thanh ghi cơ sở, thường được dùng để chứa địa chỉ cơ sở cần truy nhập
trong lệnh XLAT. BX có thể được phân chia thành BH (Phần cao) và BL (Phần
thấp).
• CX (Count): Bộ đếm, thường được dùng để đếm số lần lặp của công việc (số lần lặp
trong các vòng lặp). CX có thể được phân chia thành CH (Phần cao) và CL (Phần
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
11
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
thấp). CX thường được dùng để chứa số lần lặp trong các lệnh LOOP, còn CL
thường chứa số lần dịch hoặc quay trong các lệnh dịch quay thanh ghi.
• DX (Data): Thanh ghi đữ liệu, sử dụng để chứa toán hạng, kết quả. DX cùng AX
dùng để chứa toán hạng hoặc kết quả của các phép nhân, chia số 16 bit. DX còn chứa
địa chỉ cổng trong các lệnh vào ra trực tiếp (IN, OUT). DX có thể được phân chia
thành DH (Phần cao) và DL (Phần thấp).
AH
BH
CH
DH
AL
BL
SP
CL
BP
DL
SI
DI
IP
FLAGS
CS
DS
SS
ES
AX:
BX:
CX:
DX:
Accumulator
Base
Count
Data
Stack Pointer
Base Pointer
Source Index
Destination Index
General
Registers
Instruction Pointer
Status flags
Hình vẽ: Bộ vi xử lý 8088 và tập thanh ghi
Code
Segment
Các
thanh
ghi con trỏ, chỉ số
Data
Các thanh ghi SP, BP là các thanh ghi con trỏ
khôngSegment
tách rời.
Stack Segment
Segment
Registers
• SP (Stack Pointer): Thanh ghi con trỏExtra
ngăn xếp,
trỏ vào đỉnh hiện thời của ngăn xếp
Segment
nằm trong đoạn ngăn xếp SS (Nó luôn kết hợp với thanh ghi SS). Ta có địa chỉ logic
SS: SP. Sau mỗi thao tác cất một word vào stack (thao tác Push) thì SP tự động giảm
2 đơn vị, còn sau thao tác lấy một word ra khỏi stack (thao tác Pop), SP được tự động
tăng 2 đơn vị.
• BP (Base stack Pointer): Con trỏ cơ sở, luôn trỏ vào một dữ liệu cụ thể nằm trong
đoạn ngăn xếp SS. Ta có địa chỉ logic SS: BP.
• SI (Source Index): Thanh ghi chỉ số nguồn (hay nguồn), chỉ vào dữ liệu nằm trong
đoạn DS. Ta có địa chỉ logic DS: SI.
• DI (Destination Index): Thanh ghi chỉ số đích, chỉ dữ liệu trong đoạn DS. Ta có địa
chỉ logic DS: DI.
Ta có các cặp SP, BP đi với SS và SI, DI đi với DS.
Trong các lệnh thao tác với dữ liệu kiểu chuỗi thì cặp ES:DI luôn ứng với địa chỉ của
phần tử thuộc chuỗi đích còn cặp DS:SI ứng với địa chỉ của phần tử thuộc chuỗi nguồn.
Khối ALU
Làm nhiệm vụ thực hiện các lệnh số học và logic.
• Số học: +, -, *, /, so sánh, đảo dấu.
• Logic: NOT, AND, OR, XOR.
Thanh ghi cờ:
Đây là thanh ghi 16 bit, mỗi bit được sử dụng để thể hiện một trạng thái của bộ vi xử lý
tại một thời điểm nhất định trong quá trình thực hiện chương trình (dãy các câu lệnh),
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
12
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
nhưng chỉ dùng 9 bit đối với bộ vi xử lý 8088/8086. Mỗi bit đó được gọi là một cờ (flag).
Giá trị của mỗi cờ được biểu diễn bằng các ký hiệu gợi nhớ như cách biểu diễn của chương
trình Debug của DOS.
15 14 13 12 11 10
x x X x O D
9
I
8 7
T S
6 5 4 3 2 1 0
Z x A x P x C
Các cờ của bộ vi xử lý 8085
(x: Không được định nghĩa (don't care), với 8 bit thấp là các cờ của bộ vi xử lý 8085)
Hình vẽ: Sơ đồ thanh ghi cờ của 8088/86
• Cờ trạng thái: Biểu diễn trạng thái phép toán vừa thực hiện.
CF (Carry Flag): Cờ nhớ (cờ tràn).
CF = 1 (CY - CarrY) khi kết quả phép toán vượt (tràn) khuôn khổ biểu diễn (có nhớ
(mượn) lên trên (từ) MSB), CF = 0 (NC - No Carry) trong trường hợp ngược lại. Cờ này
thường được sử dụng khi thực hiện các phép cộng, trừ các số nhiều byte.
Ví dụ:
1011 0001
+ 0110 1001
10001 1010
PF (Parity Flag): Cờ chẵn lẻ.
PF = 1 (PE - Parity Even) khi số bit 1 trong kết quả phép toán (hay các phép vận
chuyển dữ liệu) là chẵn, PF = 0 (PO - Parity Old) trong trường hợp ngược lại.
AF (Carry Flag): Cờ nhớ phụ (tràn phụ - cờ bổ trợ).
Cờ này có ý nghĩa khi ta làm việc với số BCD. AF = 1 (AC - Auxiliary Carry) khi có
nhớ hoặc mượn từ một số BCD thấp (4 bit thấp) sang một số BCD cao (4 bit cao) và AF = 0
(NA - No Auxiliary carry) trong trường hợp ngược lại.
SF (Sign Flag): Cờ dấu. Trong bộ vi xử lý 8088/8086 các số âm được biểu diễn
dưới dạng số bù 2, nên phải dùng cờ SF để chỉ thị dấu của kết quả.
SF = 1 (NG - NeGative), khi kết quả phép toán là một số âm, SF = 0 (PL- PLus)
trong trường hợp ngược lại.
ZF (Zero Flag): Cờ rỗng.
ZF = 1 (ZR - ZeRo) khi kết quả phép toán = 0, ZF = 0 (NZ-Non Zero) trong trường
hợp ngược lại.
OF (Overflow Flag): Cờ tràn.
OF = 1 (OV-OVerflow) khi kết quả là số bù 2 vượt khuôn khổ biểu diễn (tràn số học,
hay nói cách khác: khi cộng hai số cùng dấu mà kết quả là một số trái dấu thì OF = 1), OF =
0 (NV-Non oVerflow) trong trường hợp ngược lại (cờ này làm việc với số có dấu).
Cờ điều khiển
Cờ trạng thái phụ thuộc kết quả phép toán, còn với cờ điều khiển ta có thể thiết lập
nhờ lệnh.
IF (Interrupt Flag): Cờ ngắt.
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
13
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
IF = 1 (EI-Enable Interrup), CPU cho phép ngắt, IF = 0 (DI-Disable Interrup) CPU
không cho phép ngắt (cấm) các loại ngắt che được (Maskable)..
TF (Trap Flag): Cờ bẫy.
TF = 1 CPU làm việc trong chế độ chạy từng lệnh, thường dùng để gỡ rối chương
trình (debug). Sau khi thực hiện xong mỗi lệnh, bộ vi xử lý sẽ phát ra một lệnh ngắt (INT)
để có kiểm tra chương trình.
DF (Direction Flag): Cờ hướng.
Điều khiển hướng xử lý đối với thao tác chuỗi. DF = 1 (DN-DowN) thì các lệnh vận
chuyển dữ liệu hay xử lý chuỗi sẽ thao tác lùi từ phải đến trái (địa chỉ cao đến địa chỉ thấp).
DF=0 (UP) trong trường hợp ngược lại (thao tác các phần tử từ địa chỉ thấp đến địa chỉ cao).
Cờ này thường được lập bởi chương trình của người sử dụng khi có các lệnh thao tác
chuỗi.
tiến (thuận – theo chiều tăng địa chỉ)
lùi (ngược – theo chiều giảm địa chỉ)
BIU
• Hàng đợi: Là tập thanh ghi
Với 8086 hàng đợi lệnh là 6 byte, 8088 hàng đợi
lệnh là 4 byte nên chứa được tối đa là 4 lệnh. CPU chứa
tập thanh ghi theo kiểu LIFO.
Cơ chế:
Đọc lệnh (lấy lệnh)
Giải mã lệnh
Thực hiện
• Thanh ghi IP: Thanh ghi con trỏ lệnh, trỏ vào lệnh tiếp theo chuẩn bị được thực hiện
nằm trong đoạn CS (CS: IP). Sau khi đọc 1 byte, IP tự động tăng thêm 1. Như vậy
thực tế thì cặp CS:IP mới là con trỏ lệnh vì nó chứa địa chỉ đầy đủ của một lệnh trong
bộ nhớ.
• Thanh ghi đoạn:
CS (Code Segment): Thanh ghi đoạn mã, là thanh ghi địa chỉ đoạn mã lệnh, chứa
địa chỉ cơ sở (địa chỉ đoạn) của chương trình đang thực hiện.
DS (Data Segment): Thanh ghi đoạn dữ liệu, là thanh ghi địa chỉ đoạn dữ liệu,
chứa địa chỉ đoạn của vùng dữ liệu mà chương trình đang thực hiện sử dụng.
Vùng này thường chứa các biến của chương trình.
SS (Stack Segment): Thanh ghi đoạn ngăn xếp, là thanh ghi địa chỉ đoạn bộ nhớ
ngăn xếp (stack) của chương trình đang chạy.
ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, là thanh ghi địa chỉ đoạn dữ
liệu bổ sung mà chương trình đang thực hiện sử dụng. Vùng này cũng thường
chứa các biến của chương trình.
8088 có 20 bit địa chỉ, trong khi đó các thanh ghi quản lý bộ nhớ là 16 bit. Để xác định
một ngăn nhớ có địa chỉ 20 bit, dùng 2 thanh ghi 16 bit để xác định địa chỉ.
Địa chỉ luôn nằm trong một thanh ghi gọi là địa chỉ đoạn.
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
14
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
Địa chỉ lệch (offset) trong một thanh ghi khác (Ax, Bx, Cx, ...).
Địa chỉ logic:
DS:SI
DS:DI
DS:XX
Địa vật lý (phải là số 20 bit) được xác định như sau:
Địa vật lý = địa chỉ đoạn*16 + địa chỉ lệch
Ví dụ: DS = 4000h, SI = 3F4Dh
Địa chỉ logic của ngăn nhớ: 4000:3F4D
Địa chỉ vật lí của ngăn nhớ: DS * 16 + SI = 40000 + 3F4D = 43F4Dh
Tại một thời điểm CPU quản lý được 4 đoạn nhớ (DS, SS, CS, ES) , nó có thể đồng thời
truy nhập 4 đoạn đó.
Bộ nhớ được chia thành nhiều đoạn. Mỗi đoạn có kích thước tối đa là 64 KB. Vậy ta có
16 đoạn tách rời và địa chỉ lệch thay đổi từ 0000 H đến FFFFh.
Nếu địa chỉ đoạn thay đổi từ 0000h đến FFFFh thì có 64 Kđoạn. Khi này các đoạn bao
trùm lên nhau. 2 đoạn kề nhau sẽ các nhau 16 Byte (Paragraph).
Khi khởi động máy (hoặc Reset) CS được nạp giá trị F000h, IP được nạp giá trị FFF0h.
Địa chỉ này thuộc đoạn cuối, nơi đặt ROM khởi động.
Địa chỉ vật lý = F000h*16 + FFF0h = F0000h + FFF0h = FFFF0h
2.2.
Chế độ địa chỉ của 8088
2.2.1.
Chế độ địa chỉ thanh ghi
Dùng thanh ghi như là các toán hạng chứa dữ liệu cần thao tác, tốc độ thực hiện lệnh rất
nhanh vì CPU không mất thời gian tìm kiếm dữ liệu.
Ví dụ:
2.2.2.
MOV AL, BL
; AL:= BL
MOV DS, BX
; DS:= BX
ADD AL, DL
; AL:= AL + DL
Chế độ địa chỉ tức thì
Toán hạng đích là thanh ghi, hoặc ô nhớ. Toán hạng nguồn là 1 giá trị cụ thể (hằng số).
Ví dụ:
MOV AL, 0Dh
; AL:=0Dh
Lệnh này thường được dùng để nạp dữ liệu cần thao tác vào thanh ghi nào đó.
2.2.3.
Chế độ địa chỉ tực tiếp
Một toán hạng là địa chỉ offset của ô nhớ chứa giá trị cần thao tác. Toán hạng kia là
thanh ghi (không được là ô nhớ).
Ví dụ:
MOV AL, [04FCh] ; đưa vào thanh ghi AL nội dung ô nhớ có địa chỉ logic
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
15
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
; DS:04FCh.
2.2.4.
Chế độ địa chỉ gián tiếp qua thanh ghi
Một toán hạng là thanh ghi chứa địa chỉ offset của ngăn nhớ chứa giá trị cần thao tác.
Toán hạng kia là thanh ghi (không được là ngăn nhớ).
Ví dụ:
MOV [BX], AL
2.2.5.
; Đưa nội dung thanh ghi AL vào ngăn nhớ có địa chỉ
; offset nằm trong thanh ghi BX.
Chế độ địa chỉ tương đối cơ sở
Thanh ghi BX, BP và các hằng số là giá trị dịch chuyển để xác định ngăn nhớ trong DS,
SS chứa giá trị cần thao tác.
Ví dụ:
MOV [BX + N], CL
; Đưa nội dung thanh ghi CL vào ngăn nhớ có địa
chỉ
; offset BX + N (DS:BX + N)
MOV AL, [BP + N]; Đưa nội ngăn nhớ có địa chỉ offset BP + N vào thanh
; ghi AL (SS:BP + N)
2.2.6.
Chế độ địa chỉ tương đối chỉ số
Thanh ghi DI, SI và các hằng số là giá trị dịch chuyển để xác định ngăn nhớ chứa giá trị
trong DS cần thao tác.
Ví dụ:
MOV [SI + N], AH ; Đưa nội dung thanh ghi AH vào ngăn nhớ có địa chỉ
; offset tại SI + N (DS:SI + N).
MOV CL, [DI + N] ; Đưa nội dung ngăn nhớ có địa chỉ offset tại DI + N
; (DS:DI + N) vào thanh ghi CL.
2.2.7.
Chế độ địa chỉ tương đối chỉ số cơ sở
Chế độ địa chỉ này là sự kết hợp cả 2 chế độ địa chỉ trên. Dùng cả thanh ghi cơ sở và
thanh ghi chỉ số để tính địa chỉ toán hạng.
Ví dụ:
2.3.
MOV [BX + SI + N], AX ; Đưa nội dung thanh ghi AX vào ngăn nhớ có địa
; chỉ offset tại BX + SI + N (DS:BX + SI + N).
MOV CL, [BP + DI + N] ; Đưa nội dung ngăn nhớ có địa chỉ offset tại
; BP + DI + N (DS:BP + DI + N) vào th.ghi CL.
Mô tả tập lệnh của 8088
Tập lệnh của bộ vi xử lý 8088 nói chung được chia
Mã lệnh đích, nguồn
thành 6 nhóm, với 5 nhóm thao tác dữ liệu và 1 nhóm
đặc biệt (gồm các chỉ thị để điều khiển). Một lệnh thường có cấu trúc như sau:
2.3.1.
Nhóm lệnh chuyển dữ liệu
Nhóm này thực hiện vận chuyển dữ liệu (sao chép - copy) từ nơi này đến nơi khác.
MOV đích, nguồn (Move a Word or Byte)
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
16
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
Lệnh thực hiện chuyển dữ liệu từ nguồn tới đích (đích<=nguồn), dữ liệu có thể là một
byte hoặc một word (từ). Các toán hạgn có thể được tìm thấy qua các chế độ địa chỉ khác
nhau. Lệnh này không tác động đến các cờ.
LDS đích, nguồn (Load Register and DS with Word from Memory)
Lệnh thực hiện nạp một word từ bộ nhớ vào thanh ghi cho trong lệnh và một word tiếp
theo vào thanh ghi DS (đích <= nguồn, DS <= nguồn+2).
Ứng dụng: thường nạp địa chỉ đầu của vùng nhớ chứa chuỗi nguồn vào SI và DS trước
khi dùng đến lệnh thao tác chuỗi. Lệnh này không tác động đến các cờ.
Ví dụ:
LDS SI, Str
; Lệnh nạp vào SI nội dung 2 ô nhớ Str và Str+1,
; rồi nạp vào DS nội dung 2 ô nhớ Str+2 và Str+3,
; nằm trong DS.
LEA đích, nguồn (Load Effective Address)
Lệnh thực hiện nạp địa chỉ hiệu dụng vào thanh ghi. Toán hạng 'đích' thường là một
trong các thanh ghi: BX, CX, DX, BP, SI, DI. Toán hạng 'nguồn' là tên biến trong đoạn DS
được chỉ ra trong lệnh hoặc ô nhớ cụ thể.
đích<=địa chỉ lệch của nguồn (đích<=@nguồn), đích <= địa chỉ hiệu dụng của nguồn.
Lệnh này không tác động đến các cờ.
Ví dụ:
LEA DX, Str
LEA CX, [BX]
; Lệnh nạp địa chỉ offset của Str vào DX
; Lệnh nạp địa chỉ hiệu dụng (EA-Effective Address)
; EA = BX
LEA CX, [BX][DI]
; Lệnh nạp địa chỉ hiệu dụng EA = BX + DI
LES đích, nguồn
Lệnh này giống lệnh LDS nhưng 2 byte tiếp theo được nạp vào thanh ghi ES.
Ứng dụng: thường nạp vào DI và ES địa chỉ đầu của vùng nhớ chứa chuỗi trước khi thực
hiện các lệnh thao tác chuỗi. Lệnh này không tác động đến các cờ.
Ví dụ:
LES DI, Str
; Lệnh nạp địa chỉ offset của Str vào DX
IN Acc, Port (Input data from a port)
Đọc dữ liệu từ cổng vào/ra vào thanh ghi Acc (Acc <= {Port}). Với {Port} là dữ liệu của
cổng có địa chỉ là Port (là địa chỉ 8 bit = 00h..FFh).
Acc là AL => đọc 8 bit từ cổng Port, là AX => đọc 16 bit từ cổng Port và Port+1.
Thường dùng DX để chứa địa chỉ cổng nên có thể có địa chỉ từ 0000h..FFFFh
Viết lệnh: IN Acc, DX
Lệnh này không tác động đến các cờ.
Ví dụ:
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
17
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
MOV DX, 07F8h
IN
AL, DX
; Đọc 1 byte từ cổng có địa chỉ 07F8h
OUT Acc, Port (Output a byte or a word to a port)
Đưa dữ liệu từ thanh ghi Acc đến cổng vào/ra.
Acc => Port.
Lệnh này thao tác ngược lại với lệnh IN, tính chất hoàn toàn tương tự. Lệnh này không
tác động đến các cờ.
STC (Set the Carry fag): Lập cờ nhớ: CF <= 1
Lệnh này không tác động đến các cờ khác.
STD (Set the Direcion fag): Lập cờ hướng: DF <= 1
Lệnh này định hướng thao tác cho các lệnh làm việc với chuỗi theo chiều lùi (<=). Các
thanh ghi liên quan: SI, DI sẽ được tự động giảm khi làm việc xong với 1 phần tử của chuỗi.
Lệnh này không tác động đến các cờ.
STC (Set the Interrupt fag): Lập cờ cho phép ngắt: IF <= 1
Lệnh lập IF để cho các yêu cầu ngắt tác động vào chân INTR được CPU nhận biết. IF=1,
INTR=1 => CPU bị ngắt, cất thanh ghi cờ, địa chỉ trở về vào Stack rồi thực hiện chương
trình con phục vụ ngắt. Lệnh này không tác động đến các cờ khác.
CLC (Clear the Carry flag): Xoá cờ nhớ: CF <= 0.
Lệnh này không tác động đến các cờ khác.
CLD (Clear the Direction flag): Xoá cờ hướng: DF <= 0.
Lệnh định hướng thao tác cho các lệnh làm việc với chuỗi theo chiều tiến (=>). Các
thanh ghi liên quan: SI, DI sẽ tự động tăng 1 khi làm việc xong với một phần tử dữ liệu của
chuỗi. Lệnh này không tác động đến các cờ khác.
CLI (Clear the Interrupt flag): Xoá cờ cho phép ngắt: IF <= 0.
Khi thực hiện lệnh này, các ngắt che được sẽ bị che. Lệnh này không tác động đến các
cờ khác.
CMC (Complement the Carry flag): Đảo cờ nhớ: CF <= CF
Lệnh chỉ cập nhật CF, không tác động đến các cờ khác.
PUSH nguồn
Push Word on the Stack: Cất 1 từ vào ngăn xếp
SP <= SP-2
{SP} <= nguồn
Toán hạng nguồn tìm được theo các chế độ địa chỉ khác nhau. Lệnh này thường đi cặp
với lệnh POP. Lệnh này không tác động đến các cờ.
POP đích
Pop Word from top of Stack: Lấy 1 word từ đỉnh ngăn xếp vào thanh ghi
đích <= {SP}
SP <= SP+2
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
18
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
Toán hạng đích tìm được theo các chế độ địa chỉ (không được là thanh ghi đoạn mã:
CS). Dữ liệu để tại ngăn xếp không thay đổi. SS không thay đổi. Lệnh này không tác động
đến các cờ.
POPF
Pop Word from top of Stack to Flag register: Lấy 1 word từ đỉnh ngăn xếp vào thanh ghi
cờ.
RF <= {SP}
SP <= SP+2
Dữ liệu để tại ngăn xếp không thay đổi. SS không thay đổi. Lệnh này không tác động
đến các cờ.
2.3.2.
Nhóm lệnh số học
ADC đích, nguồn (Add with carry: cộng 2 toán hạng có nhớ)
đích <= đích+nguồn+CF
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu cùng độ
dài (cùng kiểu). Không được là 2 ô nhớ và không được là thanh ghi đoạn. Điều này áp dụng
hầu hết cho tất cả các lệnh số học có cú pháp tương tự.
Lệnh cập nhật các cờ: AF, CF, OF, PF, SF, ZF.
+ ADD đích, nguồn (Add: cộng 2 toán hạng có nhớ)
đích <= đích+nguồn
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu cùng độ
dài (cùng kiểu). Không được là 2 ô nhớ và không được là thanh ghi đoạn. (Tính chất giống
với lệnh ADC).
Lệnh cập nhật các cờ: AF, CF, OF, PF, SF, ZF.
SBB đích, nguồn (Substract with Borrow: Trừ có mượn)
đích <= đích-nguồn-CF
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu cùng độ
dài (cùng kiểu). Không được là 2 ô nhớ và không được là thanh ghi đoạn. (Tính chất giống
với lệnh ADC).
Lệnh cập nhật các cờ:
AF, CF, OF, PF, SF, ZF.
AF, PF chỉ liên quan đến 8 bit thấp
SUB đích, nguồn (Substract: Trừ 2 toán hạng)
đích <= đích-nguồn
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu cùng độ
dài (cùng kiểu). Không được là 2 ô nhớ và không được là thanh ghi đoạn. (Tính chất giống
với lệnh ADC).
Lệnh cập nhật các cờ:
AF, CF, OF, PF, SF, ZF.
AF, PF chỉ liên quan đến 8 bit thấp
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
19
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
Chú ý: Các ví dụ cho các lệnh ADC, ADD, SBB, SUB có thể tham khảo trong tài
liệu Kỹ thuật Vi xử lý - Văn Thế Minh hoặc phụ lục của tài liệu này.
MUL nguồn (Multiply Unsigned Byte or Word)
Nhân số không dấu. Toán hạng 'nguồn' là số nhân, tìm được theo các chế độ địa chỉ. Tuỳ
theo độ dài (kích thước) của toán hạng 'nguồn' mà ta có các trường hợp sau:
'nguồn' là 8 bit (1 byte): AX <= AL*nguồn, số bị nhân phải là số 8 bit để
trong thanh ghi AL.
'nguồn' là 16 bit (2 byte): DXAX <= AX*nguồn, số bị nhân phải là số 16
bit để trong thanh ghi AX.
Nếu byte cao (hoặc 16 bit cao) của 16 (hoặc 32) bit kết quả chứa 0 thì CF=OF=0. Vậy
CF, OF cho ta biết có thể bỏ đi bao nhiêu bit 0 trong kết quả của lệnh nhân này.
Lệnh cập nhật: CF, OF
Không xác định: AF, PF, SF, ZF
DIV nguồn (Unsigned Divide)
Chia số không dấu. Toán hạng 'nguồn' là số chia, tìm được theo các chế độ địa chỉ. Tuỳ
theo độ dài (kích thước) của toán hạng 'nguồn' mà ta có các trường hợp sau:
'nguồn' là 8 bit (1 byte): AL <= lấy nguyên(AX/nguồn), AH <= lấy
dư(AX/nguồn). Số bị chia phải là số 16 bit để trong thanh ghi AX.
'nguồn' là 16 bit (2 byte):AX <= lấy nguyên(DXAX/nguồn), DX <= lấy
dư(DXAX/nguồn). Số bị chia phải là số 32 bit để theo thứ tự trong cặp thanh ghi
DXAX.
Phần nguyên được lấy làm tròn xuống theo số nguyên sát dưới.
Nếu 'nguồn' = 0 hoặc thương lớn hơn FFh (hoặc FFFFh tuỳ theo độ dài toán hạng
'nguồn') thì 8088/8086 thực hiện ngắt INT 0.
Không xác định các cờ: AF, CF, OF, PF, SF, ZF.
IMUL nguồn (Integer Multiplication (Multiply signed Number))
Nhân số có dấu. Toán hạng 'nguồn' là số nhân, có thể tìm được theo các chế độ địa chỉ.
Tuỳ theo độ dài (kích thước) toán hạng 'nguồn' mà ta có các trường hợp sau:
'nguồn' là 8 bit (1 byte): AX <= AL*nguồn, số bị nhân phải là số 8 bit có dấu để
trong thanh ghi AL.
'nguồn' là 16 bit (2 byte): DXAX <= AX*nguồn, số bị nhân phải là số 16 bit có
dấu để trong thanh ghi AX.
Nếu tích thu được nhỏ, không lấp đầy được hết các chỗ dành cho nó thì các bit không
dùng đến được thay bằng bit dấu.
Nếu byte cao (hoặc 16 bit cao) của 16 bit (hoặc 32 bit) kết quả chỉ chứa các giá trị của
dấu thì CF=OF=0.
Nếu byte cao (hoặc 16 bit cao) của 16 bit (hoặc 32 bit) kết quả chỉ chứa một phần kết
quả thì CF=OF=0.
Vậy CF, OF: cho ta biết kết quả có độ dài thực chất là bao nhiêu.
Lệnh cập nhật: CF, OF.
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
20
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
Không xác định: AF, PF, SF, ZF.
IDIV nguồn (Integer Division (Signed Divide))
Chia số có dấu. Toán hạng 'nguồn' là số chia, có thể tìm được theo các chế độ địa chỉ.
Lệnh này dùng để chia các số nguyên có dấu. Chỗ để ngầm định của số chia, số bị chia,
thương và phần dư giống như của lệnh DIV đã giới thiệu trên. Chỉ khác là:
AL chứa thương (số có dấu), AH chứa phần dư (số có dấu). Dấu của số dư trùng
với dấu của số bị chia (AX hoặc DXAX)
Nếu 'nguồn' = 0 hoặc thương nằm ngoài -128..127 (hoặc ngoài -32768..32767 tuỳ
độ dài (kích thước) của toán hạng 'nguồn') thì 8088/8086 thực hiện lệnh INT 0.
NEG đích (Negate a Operand (From its 2's Complement))
Đảo dấu một toán hạng (lấy bù 2 của một toán hạng). Toán hạng đích có thể tìm được
theo các chế độ địa chỉ.
đích <= 0-đích = not(đích+1)
Lệnh cập nhật: AF, CF, OF, PF, SF, ZF.
INC đích (Increment Destination register or Memory)
Tăng toán hạng đích lên 1. Toán hạng đích có thể tìm được theo các chế độ địa chỉ.
đích <= đích+1
Nếu đích = FFh (hoặc FFFFh) thì đích-1 = 00h (hoặc 0000h) mà không ảnh hưởng cờ
CF. Lệnh này tương đương ADD đích,1.
Lệnh cập nhật: AF, OF, PF, SF, ZF
Không xác định CF
DEC đích (Decrement Destination register or Memory)
Giảm toán hạng đích đi 1. Toán hạng đích có thể tìm được theo các chế độ địa chỉ.
đích <= đích-1
Nếu đích = 00h (hoặc 0000h) thì đích-1 = FFh (hoặc FFFFh) mà không ảnh hưởng cờ
CF. Lệnh này tương đương ADD đích,1.
Lệnh cập nhật: AF, OF, PF, SF, ZF
Không xác định CF
XCHG đích, nguồn (Exchange 2 Operands)
Hoán đổi nội dung 2 toán hạng.
đích <=> nguồn
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu có cùng
độ dài (kích thước-kiểu). Không được đồng thời là 2 ô nhớ, không được là thanh ghi đoạn.
Sau khi thực hiện XCHG thì toán hạng này chứa nội dung cũ của toán hạng kia và ngược
lại.
Lệnh này không tác động đến các cờ.
Lệnh này thuộc nhóm lệnh vận chuyển dữ liệu.
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
21
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
2.3.3.
Nhóm lệnh logic, dịch và quay
Các lệnh logic
NOT đích (Invert Each bit of an Operand (From its 1's Complement))
Lệnh lấy bù 1 của một toán hạng (đảo bit của một toán hạng). Toán hạng đích tìm được
theo các chế độ địa chỉ.
đích <= not(đích)
Lệnh này không tác động đến các cờ.
AND đích, nguồn (And Corresponding bits of Two Operand)
Và 2 toán hạng.
đích <= đích∧nguồn
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu cùng độ
dài (kích thước), không được là 2 ô nhớ, không được là thanh ghi đoạn.
Ứng dụng: Thường dùng lệnh AND để 'che' đi (giữ lại) một số bit nào đó của toán hạng
bằng cách nhân logic (AND) toán hạng đó với một toán hạng tức thì có các bit 0, 1 ở các vị
trí cần 'che' (giữ lại). Toán hạng tức thì lúc này gọi là mặt nạ.
Lệnh xoá cờ CF, OF. Cập nhật: PF, SF, ZF (PF chỉ có nghĩa khi toán hạng 8 bit), không
xác định cờ AF.
OR đích, nguồn (Logically Or Corresponding bits of Two Operands)
Hoặc 2 toán hạng.
đích <= đích∨nguồn
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu cùng độ
dài (kích thước), không được là 2 ô nhớ, không được là thanh ghi đoạn.
Ứng dụng: Thường dùng lệnh Or để lập một số bit nào đó của toán hạng bằng cách cộng
logic (Or) toán hạng đó với một toán hạng tức thì có các bit 0, 1 ở các vị trí cần lập.
Lệnh xoá cờ CF, OF. Cập nhật: PF, SF, ZF (PF chỉ có nghĩa khi toán hạng 8 bit), không
xác định cờ AF.
XOR đích, nguồn (Exclusive Or Corresponding bits of Two Operands)
Hoặc loại trừ 2 toán hạng.
đích <= đích⊕nguồn
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu cùng độ
dài (kích thước), không được là 2 ô nhớ, không được là thanh ghi đoạn. Theo tính chất của
phép hoặc loại trừ, nếu toán hạng đích trùng toán hạng gốc thì kết quả bằng không (kết quả
= 0) và các cờ CF, OF cũng bị xoá.
Ứng dụng: Lệnh thường được dùng xoá về 0 môt thanh ghi nào đó.
Lệnh xoá cờ CF, OF. Cập nhật: PF, SF, ZF (PF chỉ có nghĩa khi toán hạng 8 bit), không
xác định cờ AF.
Các lệnh dịch, quay
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
22
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
SAL đích, CL (Shift Arithmetically Left): Dịch trái số học.
SHL đích, CL (Shift (Logically) Left): Dịch trái logic.
Toán hạng đích tìm được theo các chế độ địa chỉ. Hai lệnh này có cùng tác động là dịch
trái số học (còn gọi là dịch trái logic). Mỗi lần dịch MSB được đưa qua cờ CF và giá trị 0
được đưa vào LSB, thao tác như vậy được gọi là dịch logic. CL phải chứa sẵn số lần dịch
mong muốn.
Trong trường hợp muốn dịch 1 lần, ta viết lệnh trực tiếp: SAL đích, 1
Ứng dụng: Mỗi lần dịch, tương đương việc nhân
toán hạng với 2 của số không dấu. Vậy nếu muốn nhân
một số không dấu với 2i thì ta dịch trái số bị nhân đi i
lần. Nói chung lệnh này chạy nhanh hơn lệnh MUL.
CF
MSB
LBS
0
Cờ OF <= 1 nếu khi dịch một lần mà MSB thay đổi. Không xác định (không đúng) sau
nhiều lần dịch.
CF <= MSB sau mỗi lần dịch, vì vậy lệnh này còn dùng để tạo cờ CF từ giá trị của MSB
làm điều kiện cho các lệnh nhảy có điều kiện.
Cập nhật: SF, PF, ZF (PF chỉ có nghĩa khi toán hạng là 8 bit)
Không xác định AF.
SAR đích, CL (Shift Arithmetically Right): Dịch phải số học.
Toán hạng đích tìm được theo các chế độ địa chỉ. Lệnh có tác dụng dịch phải số học toán
hạng. Sau mỗi lần dịch MSB được giữ lại, LSB được đưa vào cờ CF. CL chứa sẵn số lần
dịch.
Trong trường hợp muốn dịch 1 lần, ta viết lệnh trực tiếp: SAR đích, 1
Ứng dụng: Sau mỗi lần dịch, tương đương việc chia toán
hạng với 2 của số có dấu. Vậy nếu muốn chia một số có dấu
với 2i thì ta dịch phải số bị chia đi i lần (vì vậy gọi là dịch
phải số học). Nói chung lệnh này chạy nhanh hơn lệnh
IDIV.
MSB
LBS
CF
Cờ OF <= 1 nếu khi dịch một lần mà LSB thay đổi. Không xác định (không đúng) sau
nhiều lần dịch.
CF <= LSB sau mỗi lần dịch, vì vậy lệnh này còn dùng để tạo cờ CF từ giá trị của LSB
làm điều kiện cho các lệnh nhảy có điều kiện.
Cập nhật: SF, PF, ZF (PF chỉ có nghĩa khi toán hạng là 8 bit).
Không xác định AF.
SHR đích, CL (Shift (Logically) Right): Dịch phải logic.
Toán hạng đích được tìm theo các chế độ địa chỉ.
Lệnh có tác động giống các lệnh SAL, SHL nhưng theo
chiều ngược lại.
MSB
LBS
CF
0
ROL đích, CL (Rotate All Bits to the Left): Quay vòng sang trái.
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
23
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
Toán hạng đích tìm được theo các chế độ địa chỉ. Lệnh có tác dụng quay vòng toán hạng
sang trái. MSB được đưa qua cờ CF và LSB. CL phải chứa CF MSB
LBS
sẵn số lần quay.
Trong trường hợp muốn quay 1 lần, ta viết lệnh trực tiếp:
ROL đích, 1
Ta thấy, nếu CL=8 và toán hạng đích là 8 bit thì kết quả không bị thay đổi vì toán hạng
quay tròn đúng 1 vòng, còn nếu CL=4 thì 2 nibble của toán hạng bị đổi chỗ cho nhau.
Cờ OF <= 1 nếu khi quay một lần mà MSB thay đổi. Không xác định (không đúng) sau
nhiều lần quay.
CF <= MSB sau mỗi lần quay, vì vậy lệnh này còn dùng để tạo cờ CF từ giá trị của MSB
làm điều kiện cho các lệnh nhảy có điều kiện.
Cập nhật: CF, OF (chỉ 2 cờ này bị ảnh hưởng).
Không xác định AF.
ROR đích, CL (Rotate All Bits to the Left): Quay vòng sang phải.
Toán hạng đích tìm được theo các chế độ địa chỉ. Lệnh có
tác dụng quay vòng toán hạng sang phải. LSB được đưa qua MSB
cờ CF và MSB. CL phải chứa sẵn số lần quay (tác động của
lệnh này giống lệnh ROL nhưng theo chiều ngược lại).
LBS
CF
RCL đích, CL (Rotate though CF to the Left): Quay
trái qua cờ CF.
Lệnh này có thể quay toán hạng sang trái thông qua cờ CF,
CL phải chứa sẵn số lần quay.
CF
LBS
MSB
Trong trường hợp muốn quay 1 lần, ta viết lệnh trực tiếp:
RCL đích, 1
Ta thấy, nếu CL=9 và toán hạng đích là 8 bit thì kết quả không bị thay đổi vì CF cùng
với toán hạng thanh ghi (8 bit) quay đúng một vòng.
Cờ OF <= 1 nếu khi quay một lần mà LSB thay đổi. Không xác định (không đúng) sau
nhiều lần quay.
CF <= MSB sau mỗi lần quay.
Cập nhật: CF, OF (chỉ 2 cờ này bị ảnh hưởng).
RCR đích, CL (Rotate though CF to the Right): Quay phải qua cờ CF.
Lệnh này có thể quay toán hạng sang phải thông qua cờ CF, MSB
CL phải chứa sẵn số lần quay.
LBS
CF
Trong trường hợp muốn quay 1 lần, ta viết lệnh trực tiếp:
RCR đích, 1
Ta thấy, nếu CL=9 và toán hạng đích là 8 bit thì kết quả không bị thay đổi vì CF cùng
với toán hạng thanh ghi (8 bit) quay đúng một vòng.
Cờ OF <= 1 nếu khi quay một lần mà MSB thay đổi. Không xác định (không đúng) sau
nhiều lần quay.
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
24
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH
CF <= LSB sau mỗi lần quay.
Cập nhật: CF, OF (chỉ 2 cờ này bị ảnh hưởng).
2.3.4.
Nhóm lệnh so sánh
CMP đích, gốc (Compare Byte or Word): So sánh 2 byte hay 2 từ (word).
đích-gốc;
Toán hạng đích, gốc tìm được theo các chế độ địa chỉ,
phải chứa dữ liệu có cùng độ dài (kích thước). Không được
đồng thời là 2 ô nhớ, không được là thanh ghi đoạn.
Toán hạng
đích = gốc
đích > gốc
đích < gốc
CF
0
0
1
ZF
1
0
0
Lệnh chỉ tạo cờ, không lưu kết quả so sánh và không làm thay đổi giá trị các toán hạng.
Lệnh này thường dùng kèm với các lệnh nhảy có điều kiện (nhảy theo cờ).
Khi so sánh 2 số không dấu, ta có quan hệ như bảng bên.
Lệnh cập nhật: AF, CF, OF, PF, SF, ZF.
TEST đích, gốc (And Operands to Update Flag): Và 2 toán hạng để tạo cờ.
đích∧gốc;
Toán hạng đích, gốc tìm được theo các chế độ địa chỉ, phải chứa dữ liệu có cùng độ dài
(kích thước). Không được đồng thời là 2 ô nhớ, không được là thanh ghi đoạn.
Lệnh chỉ tạo cờ, không lưu kết quả. Sau lệnh này giá trị các toán hạng không bị thay đổi.
Các cờ được tạo làm điều kiện cho các lệnh nhảy có điều kiện.
Lệnh xoá cờ CF, OF. Cập nhật: PF, SF, ZF (PF chỉ liên quan đến 8 bit thấp), không xác
định cờ AF.
2.3.5.
Nhóm lệnh rẽ nhánh (nhảy), lặp
Việc sử dụng nhóm các lệnh nhảy có thể làm thay đổi tính tuần tự của các câu lệnh hợp
ngữ.
Lệnh nhảy không điều kiện
JMP Nhãn (Uncondition Jump to Specified Destination) Nhảy (vô điều kiện)
đến đích Nhãn
Lệnh mới bắt đầu tại địa chỉ ứng với nhãn 'Nhãn'. Lệnh Jmp có thể nhảy lên (về phía địa
chỉ thấp) hoặc nhảy xuống (về phía địa chỉ cao) và có thể nhảy xa được tối đa 1/2 đoạn
(64Kbyte)
Lệnh này không tác động đến các cờ.
Lệnh nhảy có điều kiện (nhảy khi thoả mãn một số điều kiện)
Nguyễn văn Hải- Bài giảng Kỹ thuật vi xử lý
25