Nội dung trên được phân bố trong 05 chương với các bài tập ôn tập cuối mỗi chương được nhóm tác giả có kinh nghiệm giảng dạy lâu năm trong lĩnh vực này biên soạn đảm bảo tính chất khoa h
Trang 1TS Nguyễn Hoàng Dũng (Chủ biên)
TS Nguyễn Hoài Giang
NHÀ XUẤT BẢN GIÁO DỤC VIỆT NAM
KỸ THUẬT VI XỬ LÝ
Trang 2i
Cuốn "Kỹ thuật Vi xử lý" bao gồm các kiến thức cơ bản nhất về bộ vi xử lý,
hệ thống vi xử lý dùng làm giáo trình và tài liệu tham khảo cho các đối tượng trong lĩnh vực kỹ thuật điện, điện tử và viễn thông Để có thể nắm bắt được nhanh và hiệu quả các nội dung của sách này thì người đọc cần có kiến thức nền tảng về lĩnh vực điện tử số và điện tử tương tự
Nội dung của sách bao gồm 3 phần chủ yếu: giới thiệu chung về hệ vi xử lý; giới thiệu hệ vi xử lý 8088/8086 của hãng Intel; các vấn đề về ngắt và xử lý ngắt trong vi xử lý
Nội dung trên được phân bố trong 05 chương với các bài tập ôn tập cuối mỗi chương được nhóm tác giả có kinh nghiệm giảng dạy lâu năm trong lĩnh vực này biên soạn đảm bảo tính chất khoa học, cơ bản và thực tiễn phù hợp với đối tượng sử dụng:
Chương 1: Giới thiệu chung về bộ vi xử lý, hệ thống vi xử lý
Chương 2: Giới thiệu về bộ vi xử lý 8088/8086 của hãng Intel
Chương 3 và chương 4: Giới thiệu về lập trình ASEMBLY và tổ chức vào ra dữ liệu cho vi xử lý 8088/8086
Chương 5: Trình bày về ngắt và các vấn đề về ngắt trong vi xử lý
Giáo trình hỗ trợ sinh viên học tập và rèn luyện các kỹ năng cơ bản để nắm bắt và giải quyết các vấn đề kỹ thuật có liên quan tới chuyên ngành qua đó xây dựng tác phong và phương pháp học tập độc lập, có hiệu quả, gắn liền với thực tế và thực hành
Tuy nhiên, quá trình biên soạn không tránh khỏi các thiếu sót và các tác giả mong muốn nhận được những ý kiến xây dựng từ bạn đọc gần xa, mọi ý kiến đóng góp xin gửi về địa chỉ:
Khoa Công nghệ Điện tử và Thông tin - Viện Đại học Mở Hà Nội
Xin chân thành cảm ơn!
CÁC TÁC GIẢ
Trang 3ii
ALU Arithmetic and Logic Unit Bộ xử lý số học và logic
RAM Random Access Memory Bộ nhớ truy nhập ngẫu nhiên CPU Central Processing Unit Đơn vị xử lý trung tâm BIOS Basic Input Output System Hệ thống vào ra cơ sở
STI Set the Interrupt Flag Thiết lập cờ ngắt
CLD Clear the Direction Flag Thiết lập cờ hướng
CLI Clear the Interrupt Flag Xóa cờ ngắt
RCL Rotate through Carry Flag to the Left Quay trái qua cờ nhớ
RCL Rotate through Carry Flag to the Right Quay phải qua cờ nhớ
SAL Shift Arithmetically Left Dịch trái số học
SAR Shift Arithmetically Right Dịch phải số học
Trang 4iii
Trang 5iv
LỜI GIỚI THIỆU i
DANH MỤC CÁC TỪ VIẾT TẮT ii
MỤC LỤC iv
CHƯƠNG 1 GIỚI THIỆU CHUNG VỀ HỆ VI XỬ LÝ 1
I CÁC HỆ THỐNG ĐẾM VÀ MÃ HÓA THÔNG TIN 2
1.1 Các hệ thống đếm 2
1.2 Các phép toán trong hệ cơ số 2 4
1.3 Khoảng biểu diễn và mã bù hai 5
1.4 Mã hóa thông tin trong máy tính 6
1.5 Biểu diễn số thực ở dạng dấu phẩy động 9
II LỊCH SỬ PHÁT TRIỂN CỦA CÁC BỘ VI XỬ LÝ 12
2.1 Thế hệ 1 (1971 - 1973) 12
2.2 Thế hệ 2 (1974 - 1977) 12
2.3 Thế hệ 3 (1978 - 1982) 12
2.4 Thế hệ 4 (1982 - 1995) 12
2.5 Thế hệ 5 (1995 - nay) 13
III GIỚI THIỆU CHUNG VỀ BỘ VI XỬ LÝ VÀ HỆ VI XỬ LÝ 14
3.1 Bộ vi xử lý 14
3.2 Hệ vi xử lý 15
BÀI TẬP ÔN TẬP 19
CHƯƠNG 2 BỘ VI XỬ LÍ INTEL 8088/8086 24
I CẤU TRÚC BÊN TRONG VI XỬ LÝ 8088/8086 25
1.1 Khối BIU, EU 25
1.2 Các thanh ghi của vi xử lý 8088/8086 27
II CÁC CHẾ ĐỘ ĐỊA CHỈ CỦA BỘ VI XỬ LÍ 8088 32
2.1 Các chế độ địa chỉ 32
2.2 Phương pháp ngầm định thanh ghi đoạn 35
Trang 6v
IV TẬP LỆNH CỦA BỘ VI XỬ LÍ 8088 39
4.1 Nhóm lệnh chuyển dữ liệu 40
4.2 Nhóm lệnh thực hiện các phép tính logic và số học 47
4.3 Nhóm lệnh điều khiển chương trình 57
BÀI TẬP ÔN TẬP 63
CHƯƠNG 3 LẬP TRÌNH HỢP NGỮ CHO VI XỬ LÝ 8088/8086 71
I GIỚI THIỆU CHUNG CỦA CHƯƠNG TRÌNH HỢP NGỮ 72
1.1 Cú pháp của chương trình hợp ngữ 72
1.2 Dữ liệu cho chương trình 73
1.3 Biến và hằng 73
1.4 Khung của một chương trình hợp ngữ 76
II CÁCH TẠO VÀ CHẠY MỘT CHƯƠNG TRÌNH HỢP NGỮ TRÊN MÁY IBM PC 80
III CÁC CẤU TRÚC LẬP TRÌNH CƠ BẢN THỰC HIỆN BẰNG HỢP NGỮ 81
3.1 Cấu trúc điều kiện 81
3.2 Cấu trúc lựa chọn 82
3.3 Cấu trúc lặp 83
IV GIỚI THIỆU CHƯƠNG TRÌNH EMU 8086 85
4.1 Giới thiệu về chương trình EMU8086 85
4.2 Một số lệnh cơ bản 86
Lệnh NEG 87
4.3 Các lệnh số học 87
4.4 Các lệnh logic, lệnh nhảy 88
4.4.1 Các lệnh logic 88
4.4.2 Các lệnh JUMP 90
4.5 Các lệnh dịch và lệnh quay 91
4.6 Lệnh LOOP (lặp) trong ngôn ngữ assembly 93
4.7 Ngăn xếp, chương trình con, mảng dữ liệu 93
BÀI TẬP ÔN TẬP 99
Trang 7vi
115
I SƠ ĐỒ CHÂN TÍN HIỆU 8088 116
II GIỚI THIỆU CÁC MẠCH PHỤ TRỢ CHO VI XỬ LÝ 8088 120
2.1 Mạch tạo xung nhịp 8284 120
2.2 Mạch tạo tín hiệu điều khiển bus 8288 121
III Cấu trúc bộ nhớ bán dẫn 123
3.1 Bộ nhớ bán dẫn 123
3.2 Cấu trúc bộ nhớ bán dẫn 124
IV GHÉP NỐI VI XỬ LÝ 8088/80886 VÀ GIẢI MÃ ĐỊA CHỈ BỘ NHỚ 128 4.1 Ghép nối vi xử lý 8088 với bộ nhớ 128
4.2.Ghép nối vi xử lí 8086 với bộ nhớ 134
V GHÉP NỐI 8088 VỚI THIẾT BỊ NGOẠI VI 139
5.1 Các phương pháp điều khiển vào ra dữ liệu 139
5.2 Giải mã địa chỉ cho thiết bị vào ra 140
5.3 Các mạch cổng đơn giản 141
5.4 Mạch ghép nối vào ra song song lập trình được 8255A 141
BÀI TẬP ÔN TẬP 152
CHƯƠNG 5 NGẮT VÀ XỬ LÝ NGẮT CHO VI XỬ LÝ 8088 162
I GIỚI THIỆU CHUNG VỀ NGẮT 163
1.1 Giới thiệu 163
1.2 Các loại ngắt trong hệ 8088 163
1.3 Đáp ứng của cpu khi có yêu cầu ngắt 164
1.4 Xử lý ưu tiên khi ngắt 165
II MẠCH ĐIỀU KHIỂN NGẮT 8259A 166
2.1 Chức năng của 8259A 166
2.2 Ghép nối với 8088 168
2.3 Lập trình cho 8259 169
2.4 Một số ví dụ lập trình với 8259A 176
BÀI TẬP ÔN TẬP 178
Trang 8vii
PHỤ LỤC 1 ĐÁP ÁN BÀI TẬP ÔN TẬP 184
I Đáp án chương I 184
II Đáp án chương II 186
III Đáp án chương III 186
IV Đáp án chương IV 193
V Đáp án chương V 199
PHỤ LỤC 2 CÁC BÀI TẬP ỨNG DỤNG TRÊN EMU8086 200
PHỤ LỤC 3 CÁC LỆNH HỢP NGỮ CƠ BẢN 203
Trang 9Chương này được xây dựng giúp cho người đọc nắm được các kiến thức chung về Kỹ thuật Vi xử lý, bao gồm các kiến thức căn bản về các hệ thống đếm, cách thức chuyển đổi giữa các hệ thống đếm, cách mã hóa, lịch sử phát triển của các bộ vi xử lý và các kiến thức khái quát về đặc điểm, cấu trúc, hoạt động của một hệ vi xử lý
Mang lại kiến thức về các hệ thống đếm
thông dụng và cách mã hóa
Giới thiệu lịch sử phát triển của các bộ vi
xử lý theo 5 giai đoạn
Giúp người đọc hiểu được đặc điểm, cấu
trúc, hoạt động của một bộ vi xử lý, hệ vi xử
lý
I Các hệ thống đếm và phương pháp mã hóa thông tin trong máy tính
II Lịch sử phát triển của các bộ vi xử lý III Giới thiệu chung về bộ vi xử lý và hệ vi
xử lý Bài tập ôn tập
micro processor, MP, bộ vi xử lý, micro
controller, MC, vi điều khiển, control unit,
CU, bộ xử lý trung tâm, arithmetic and logic
unit, ALU, bộ xử lý số học,american
standard code for information interchange
(ASCII), first in first out, FIFO, read only
memory, ROM, random access memory,
RAM
1) Barry B Brey, The Intel MicroProcessors 32 bit Prentice-Hall 1995 (Chapter 1, 2)
2) Văn Thế Minh, Kỹ thuật vi xử lý Nhà xuất bản Giáo dục 1997 (Chương 1, 2) 3) Nguyễn Duy Bảo, Lê Xuân Bằng, Kỹ thuật vi xử lý (phần cơ sở) Hà Nội 2002 (Chương 1, 2)
Trang 10Lưu ý: Trong hai loại hệ thống đếm ở trên khi tính toán thường dùng hệ đếm có thứ
tự
1.1.1 Hệ thập phân (hệ cơ số 10)
Hệ thập phân (hay còn được gọi là hệ cơ số 10) thường được sử dụng trong đời sống hàng ngày của con người Hệ thập phân dùng 10 con số từ 0 đến 9 để biểu diễn các giá trị Dạng tổng quát biểu diễn một số D bất kỳ trong hệ thập phân như sau:
để mã hóa thông tin trong máy tính
Hệ nhị phân dùng 2 con số là 0 và 1 để biểu diễn các giá trị Dạng tổng quát biểu diễn một số B bất kỳ trong hệ nhị phân như sau:
𝐵 = ∑ 2𝑖 𝑑𝑖
𝑚−1
𝑖=−𝑛
d: digit (chữ số) 0 ≤ d ≤ 9 m: Số chữ số trước dấu phẩy n: số chữ số sau dấu phẩy
d: digit (chữ số) 0 ≤ d ≤ 1 m: Số chữ số trước dấu phẩy n: số chữ số sau dấu phẩy
Trang 113
Ví dụ:
1101,10112 = 1.23 + 1.22 + 0.21 + 1.20 + 1.2-1 + 0.2-2 + 1.2-3 + 1.2-4
1.1.3 Hệ thập lục phân (hệ cơ số 16)
Hệ thập lục phân (hay còn gọi được gọi là hệ cơ số 16) là sự viết rút gọn của
hệ cơ số 2, nhóm 4 số trong hệ cơ số 2 sẽ được một số trong hệ cơ số 16
Hệ thập lục phân dùng 16 con số từ 0 đến 9 và từ A đến F để biểu diễn các giá trị Dạng tổng quát biểu diễn một số H bất kỳ trong hệ thập lục phân như sau:
𝐻 = ∑ 16𝑖 𝑑𝑖
𝑚−1
𝑖=−𝑛
Ví dụ:
A4C9,1E32 = A.163 + 4.162 +C.161 + 9.160 + 1.16-1 + E.16-2 + 3.16-3
1.1.4 Chuyển đổi giữa các hệ đếm
Chuyển đổi từ hệ cơ số 10 sang hệ cơ số 2
Cách 1: Lấy số cần đổi chia cho 2 và ghi nhớ phần dư, lấy tiếp thương của kết quả
trên chia cho 2 và thực hiện tương tự cho đến khi thương cuối cùng bằng 0 Kết quả chuyển đổi sẽ là chuỗi các bit là các số dư lấy theo thứ tự ngược lại
Bảng 1.1: Minh họa chuyển đổi số thập phân sang nhị phân
Số bị chia Số chia Thương số Số dư
Cách 2: Phân tích số thập phân ra thành tổng các lũy thừa của cơ số hai với số mũ
giảm dần Kết quả là một dãy các hệ số của lũy thừa cơ số hai đó đọc từ trái qua phải
Ví dụ: Chuyển số 61 trong hệ 10 sang hệ 2
61 = 1 25 + 1.24 + 1.23 + 1.22 + 0.21 + 1.20
Kết quả: (61)10 = (111101)2
Quan hệ giữa hệ cơ số 10, hệ cơ số 2, hệ cơ số 16 được trình bày trong bảng 1.2
d: digit (chữ số) 0 ≤ d ≤ 1 m: Số chữ số trước dấu phẩy n: số chữ số sau dấu phẩy
Trang 124
Chuyển đổi từ hệ cơ số 2 sang hệ cơ số 16
Ví dụ: Chuyển đổi số 10110111 trong hệ 2 sang hệ 16
Tra bảng quan hệ các hệ cơ số ở trên ta thấy (1011)2 = B16 và (0111)2 = 716 nên (10110111)2= (B7)16
Bảng 1.2: Quan hệ giữa hệ cơ số 10, hệ cơ số 2, hệ cơ số 16
Trang 135
1.2.3 Phép nhân
1.2.4 Phép chia
1.3 Khoảng biểu diễn và mã bù hai
1.3.1 Khoảng biểu diễn
Nếu sử dụng n bit thì có thể biểu diễn được 2n số Các số này được biểu diễn theo hai cách: biểu diễn theo kiểu số không dấu và/hoặc theo kiểu số có dấu
Quy ước số có dấu:
Số dương: là số có bit trọng số cao nhất ngoài cùng bên trái (msb) bằng 0
Số âm: là số có bit trọng số cao nhất ngoài cùng bên trái (msb) bằng 1 Khoảng biểu diễn các con số (khi dùng n bit):
Số không dấu: 0 ~ (2n - 1)
Số có dấu: (-2n-1 ~ 2n-1 - 1)
Ví dụ: Sử dụng 8 bit thì biểu diễn được 28 số (256 số)
Khoảng biểu diễn:
Số không dấu: 0 ~ 255
Số có dấu: -128 ~ 127
1.3.2 Mã bù hai
Mã bù hai được sử dụng để biểu diễn một số thông qua chính số đối của số
đó Ví dụ như biểu diễn một số dương thông qua một số âm hoặc ngược lại biểu diễn một số âm thông qua một số dương
x
Trang 146
Thông thường biểu diễn một số dương giống như việc biểu diễn số không dấu nhưng thêm một bit 0 ở ngoài cùng bên trái (bit dấu) Do đó mã bù hai chủ yếu
sử dụng để biểu diễn số âm thông qua số dương tương ứng
Mã bù hai cũng được sử dụng trong phép toán hiệu của hai số A - B Khi đó
ta sẽ tính toán lần lượt số A, số (-B) và tổng của phép toán A + (-B)
Cách xác định mã bù hai của số A như sau:
Biểu diễn số A dưới dạng số có dấu
Mã bù 1 của số A là sự đảo bit (0 thành 1; 1 thành 0)
Mã bù 2 là kết quả của phép toán mã bù 1 cộng 1
1.4 Mã hóa thông tin trong máy tính
1.4.1 Các đơn vị biểu diễn thông tin trong máy tính
Đơn vị nhỏ nhất trong máy tính dùng để biểu diễn thông tin là bit (binary digit) Bit dùng biểu diễn cho con số 0 hoặc 1 trong hệ hai (ký hiệu là b)
1 Byte = 8 bit (Ký hiệu là B)
1KB = 1024 byte = 210 byte = 210 x 8 bit
1MB = 1024 KB = 210 KB = 210 x 210 byte = 220 byte = 220 x 8 bit
1GB = 1024 MB = 210 MB = 210 x 210 KB = 220KB =230 byte = 230 x 8 bit 1TB = 1024 GB = 210 GB = 210 x 210 MB = 220MB=230 KB=240 byte
= 240 x 8 bit
Trang 157
1.4.2 Các loại mã biểu diễn thông tin trong máy tính
Số BCD (Binary Coded Decimal): Số hệ mười được mã hóa bằng hệ hai Giữa hệ mười và hệ hai còn tồn tại một hệ lai là BCD Ở đây dùng 4 số hệ hai để mã hóa một số hệ mười có giá trị nằm trong khoảng tương ứng từ 0 đến 9 Như vậy, ta
sẽ còn 6 tổ hợp thừa không sử dụng của 16 trạng thái Vì tầm quan trọng của các số BCD nên các bộ vi xử lý thường có các lệnh thao tác với chúng
Ví dụ: Số 1977 biểu diễn theo số BCD là 0001 1001 0111 0111
Mã ASCII (American Standard Code for Information Interchange): Bộ mã theo tiêu chuẩn của Mỹ để trao đổi thông tin Tất cả cá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ủa 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 thế thông tin được truyền đi, được lưu giữ trong các bộ nhớ hoặc
để hiển thị trên màn hình đều ở dưới dạng kí tự và tuân theo 1 loại mã được dùng rất rộng rãi gọi là mã ASCII Việc dùng các kí tự để mã hóa thông tin theo bảng mã ASCII cho ta khả năng trao đổi thông tin với hầu hết các máy tính khác
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ự tương ứng với các mã số từ 0 đến
127 Bit thứ 8 có thể cho liên tục bằng 0 hay bằng 1 hoặc có thể dùng để chứa bit kiểm tra chẵn lẻ phục vụ cho việc phát hiện lỗi khi truyền
Trang 16Để tra cứu mã ASCII của các kí tự trong bảng 1.3 ta đọc mã kí tự theo thứ tự cột trước, hàng sau
Ví dụ: Mã ASCII của kí tự chữ cái A hoa = 41h; kí tự chữ cái a thường = 61h
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 gói (packed BCD) Khi lưu trữ, hiển thị hoặc truyền giữa các thiết bị các giá
Trang 179
trị số từ 0 đến 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 đến 39H Như vậy ta thấy trong 1 byte mã ASCII biểu diễn các số từ 0 đến 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 (0011b) Nếu trong byte mã ASCII này ta thay 4 bit cao bằng mã BCD của số 0 (0000b) thì ta thu được số BCD không gói (unpacked BCD)
Như vậy BCD không gói có độ dài 1 byte với 4 bit cao bằng không và 4 bit thấp là số BCD chuẩn mã hóa số cần biểu diễn
Ví dụ: Quan hệ giữa số BCD gói, BCD không gói và mã ASCII
Mã ASCII của 2 là 0011 0010b = 32h
Mã ASCII của 6 là 0011 0110b = 36h
Mã ASCII không gói của 2 là 0000 0010b = 02h
Mã ASCII không gói của 6 là 0000 0110b = 06h
Mã ASCII gói (chuẩn) của 26 là 0010 0110b = 26h
1.5 Biểu diễn số thực ở dạng dấu phẩy động
Trong quá trình tính toán không phải lúc nào kết quả đưa ra cũng có thể biểu diễn được trong khoảng đã quy định trước Ví dụ, muốn biểu diễn khoảng cách từ trái đất đến mặt trời là 149.600.000.000 m trên hệ đếm nhị phân để máy tính có thể
xử lí được thông tin thì xảy ra khá nhiều khó khăn Vì thế, người ta sử dụng cách biểu diễn dấu phẩy động để tăng khả năng biểu diễn và linh hoạt hơn các hệ đếm cơ bản trên
Tổng quát: một số thực X được biểu diễn theo kiểu số dấu phẩy động như sau:
X = M x RE
trong đó: M là phần định trị; R là cơ số; E là phần mũ
Thông thường thì các số dấu phẩy động được thể hiện trong bộ nhớ máy tính theo thứ tự từ trái sang phải gồm bit dấu, phần mũ, rồi đến phần định trị Với định dạng nhị phân IEEE 754 chúng thường được biểu diễn theo như bảng 1.4
Bảng 1.4: Biểu diễn định dạng nhị phân IEEE 754
Kiểu Dấu Phần
mũ
Phần định trị
Tổng số bit
Phân cực
mũ
Độ chính xác
Trang 1810
Cần lưu ý rằng phần mũ có giá trị là âm hoặc dương nhưng khi lưu trữ trong máy tính người ta không dùng hệ bù 2 để biểu diễn phần mũ mà lại sử dụng một phương pháp khác: biểu diễn phần mũ dưới dạng một số không dấu nhưng có một giá trị "phân cực" cố định thêm vào
Mỗi định dạng bán chính xác, chính xác đơn, chính xác kép… đều có một giá trị phân cực riêng
Có hai trường hợp đặc biệt: nếu phần mũ có tất cả các bit bằng 0 thì được dùng để biểu diễn các số zero và số không chuẩn hóa và nếu phần mũ có tất cả các bit bằng 1 sẽ được dùng để biểu diễn các vô cực và NaN
Như vậy, giá trị phần mũ của các số chuẩn hóa nằm ở [-14, 15] ở độ chính xác nửa, [-126, 127] ở độ chính xác đơn, [-1022, 1023] ở độ chính xác kép, [-16382, 16383] với độ chính xác bậc bốn Khi ta nói đến số chuẩn hóa là ta đã loại trừ không xét các số zero, vô cực, NaN và các số không chuẩn hóa
Cần phải nhớ rằng, phần định trị trong định dạng nhị phân của IEEE luôn có một bit 1 đầu tiên không được lưu trữ trong máy tính Nó được gọi là bit "ẩn" hay bit "hiểu ngầm"
Thường biểu diễn dấu phẩy động ở 2 dạng: cơ số 2 và cơ số 10 Tuy nhiên,
để giảm bớt công việc biên dịch, giải mã cho hệ vi xử lí thường người ta biểu diễn dấu phẩy động trực tiếp bằng hệ số 2 Với chuẩn IEEE 754/85, việc biểu diễn được tiết kiệm thêm 1 bit ở phần định trị Vì vậy, công thức tổng quát sẽ trở thành:
1.5.1 Dấu phẩy động với độ chính xác đơn 32 bit
Dạng tổng quát của trường hợp này như sau:
Trang 1911
Khoảng biểu diễn từ 10-38 đến 10+38
Ví dụ: X = -13,375(10) = -1101.011(2) = -1.101011 * 23
S = 1 → Số âm (S là 1 bit đầu tiên)
E = e – 127 = 3 → e = E + 127 = 130(10) = 1000 0010(2) (e là 8 bit tiếp theo)
M = 1 + m = 1.101011 → m = 101011 0000…00(2) (m là 23 bit cuối)
1 1 0 0 0 0 0 1 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1.5.2 Dấu phẩy động với độ chính xác đơn 32 bit
Dạng tổng quát của trường hợp này như sau:
S (1 bit) e (11 bit) m (52 bit)
Khoảng biểu diễn từ 10-308 đến 10+308
1.5.3 Dấu phẩy động với độ chính xác đơn 32 bit
Dạng tổng quát của trường hợp này như sau:
S (1 bit) e (15 bit) m (64 bit)
Khoảng biểu diễn từ 10-4092 đến 10+4092
Trang 20 Độ dài word thường là 4 bit (có thể lớn hơn)
Chế tạo bằng công nghệ PMOS với mật độ phần tử nhỏ, tốc độ thấp, dòng tải thấp nhưng giá thành rẻ
Tốc độ 10 ~ 60 us/lệnh với tần số xung nhịp 0.1 ~ 0.8 MHz
Tập lệnh đơn giản và phải cần nhiều vi mạch phụ trợ
Sử dụng công nghệ NMOS hay CMOS
Tốc độ 1 ~ 8 us/lệnh với tần số xung nhịp 1 ~ 5MHz
2.3 Thế hệ 3 (1978 - 1982)
Vi xử lý 16 bit, đại diện là 68000/68010 (Motorola) hay 8086/ 80286/ 80386 (Intel)
Tập lệnh đa dạng với các lệnh nhân, chia và xử lý chuỗi
Địa chỉ bộ nhớ có thể từ 1 ~ 16 MB và có thể phân biệt tới 64KB địa chỉ cho thiết bị ngoại vi
Có khả năng làm việc vói bộ nhớ ảo
Có các cơ chế pipeline, bộ nhớ cache
Sử dụng công nghệ HCMOS
Trang 2113
2.5 Thế hệ 5 (1995 - nay)
Vi xử lý 64 bit 68060, PowerPC (Motorola) hay Pentium, Pentium Pro, Pentium I, II, III, IV, Banias, Dothan, Yonah, Centrino, Core i3, Core i5, Core i7 (Intel)
Bus địa chỉ 36 bit, phân biệt 64GB bộ nhớ
Dùng thêm các bộ đồng xử lý (corprocessor)
Khả năng làm việc với các bộ nhớ ảo
Có cài đặt các cơ chế pipeline, bộ nhớ cache
Bảng 1.5: Một số dòng vi xử lý của hãng Intel và hãng Motorala
Nhà sản
xuất Tên vi xử lý
Bus dữ liệu Bus địa chỉ Khả năng quản lý địa chỉ
Trang 22Số chân của bộ vi xử lý được chia ra thành các nhóm sau:
Nhóm chân địa chỉ (address-A): IC có n chân địa chỉ sẽ được ký hiệu từ
A0 đến An-1
Nhóm chân dữ liệu (data -D): IC có m chân dữ liệu sẽ được ký hiệu từ D0
đến Dm-1
Nhóm chân điều khiển (control): tùy thuộc vào chân tín hiệu điều khiển
cụ thể mà ta sẽ biết được vi xử lý sẽ phải thực hiện công việc gì
Ví dụ: Vi xử lý 8088 bao gồm 40 chân tín hiệu trong đó:
20 chân tín hiệu địa chỉ: A0 đến A19
8 chân tín hiệu dữ liệu: D0 đến D7(chung với 8 chân tín hiệu địa chỉ A0
đến A7)
17 chân tín hiệu điều khiển
1 chân tín hiệu nguồn cung cấp (Vcc) và 2 chân tín hiệu nối đất (GND)
Để đánh giá về một bộ vi xử lý người ta dựa trên các yếu tố sau:
Tốc độ xử lý
Khả năng quản lý dung lượng bộ nhớ
Khả năng hỗ trợ, ghép nối với các thiết bị ngoại vi
Trong một số trường hợp, đi kèm với bộ vi xử lý là cả một họ IC hỗ trợ để làm tăng các chức năng thành phần cho hệ thống
3.1.2 Hoạt động
Vi xử lý hoạt động theo một chu trình và thực hiện hai chức năng:
Chức năng thiết lập hoạt động
Chức năng điều khiển hệ thống
Chu trình:
Các lệnh nối tiếp nhau sẽ tạo thành một chu trình lệnh
Bộ vi xử lý sử dụng cấu trúc FIFO (First In First Out) - vào trước ra trước
Trang 23Trong một chu trình lệnh, vi xử lý thực hiện những công việc sau:
Trao đổi dữ liệu với bộ nhớ
Trao đổi dữ liệu với các thiết bị ngoại vi
Xử lý dữ liệu trên các thanh ghi
3.1.3 Ứng dụng
Đối với vi xử lý, vi điều khiển thì phạm vi sử dụng tương đối rộng rãi trong nhiều lĩnh vực khác nhau như khoa học kỹ thuật, y tế, quân sự quốc phòng, khí tượng thủy văn v v
3.2 Hệ vi xử lý
Sơ đồ khối hệ thống được cho trong hình 1.1 Một hệ thống vi xử lý bao gồm
3 thành phần chính và được nối với nhau thông qua bus hệ thống:
Các thiết bị ngoại vi a©
Buss Buss
Hệ vi xử lý
Bus địa chỉ Bus dữ liệu
Trang 24Bộ vi xử lý được chia ra thành 3 loại sau:
CU: Control Unit - Đơn vị điều khiển
ALU: Arithmetic and Logic Unit - Đơn vị số học và logic
Registers set: Tập các thanh ghi
CU: thực hiện các công việc sau
Nhận lệnh từ bộ nhớ
Giải mã lệnh và phát ra tín hiệu điều khiển để thực hiện lệnh
Nhận các tín hiệu yêu cầu từ bên ngoài gửi đến
Xử lý và đáp ứng các tín hiệu yêu cầu (sau khi nhận tín hiệu từ bên ngoài) này (yêu cầu ngắt, yêu cầu trao quyền điều khiển v v)
ALU: Thực hiện các phép toán về số học (cộng, trừ, nhân, chia), các
phép toán về logic (AND, OR, NOT), các phép toán quan hệ v v
Tập các thanh ghi
Thanh ghi: là những ngăn nhớ đặc biệt nằm ngay bên trong bộ vi xử lý, dùng
để lưu trữ các dữ liệu tạm thời giúp cho hoạt động của bộ nhớ
Thanh ghi được chia ra thành các nhóm sau:
Thanh ghi địa chỉ: Dùng để chứa địa chỉ của bộ nhớ hoặc cổng vào ra
Thanh ghi dữ liệu: Dùng để chứa dữ liệu tạm thời hoặc các kết quả trung
gian
Thanh ghi lệnh: Dùng để chứa lệnh đang được thực hiện
Thanh ghi đa năng: Thực hiện được nhiều chức năng khác nhau, tùy theo
yêu cầu của người lập trình
Thanh ghi cờ: dùng để lưu giữ các trạng thái của phép toán
Trang 2517
Bộ nhớ được quản lý theo địa chỉ, mỗi ngăn nhớ có một đỉa chị xác định và duy nhất
Bộ nhớ được chia ra thành hai loại nhớ chính:
ROM: Read Only Memory - bộ nhớ chỉ đọc thông tin
RAM: Random Access Memory - Bộ nhớ truy nhập ngẫu nhiên (ghi đọc tùy ý)
Trao đổi dữ liệu giữa vi xử lý và bộ nhớ sẽ được trình bày chi tiết trong chương 4 của cuốn sách này
Bus hệ thống được chia thành 3 loại bus như sau:
Bus địa chỉ: Vận chuyển các tín hiệu địa chỉ từ vi xử lý phát ra tới bộ nhớ
hoặc cổng vào ra
Bus dữ liệu: Vận chuyển các tín hiệu dữ liệu hai chiều từ vi xử lý phát ra
tới bộ nhớ hoặc cổng vào ra và ngược lại
Bus điều khiển: Cũng giống như bus dữ liệu nhưng dùng để vận chuyển
tín hiệu điều khiển
Một số các tín hiệu điều khiển của vi xử lý 8088 do hãng Intel sản xuất:
𝑅𝐷: Read enable - Tín hiệu điều khiển đọc bộ nhớ hoặc cổng vào ra 𝑅𝐷
là tín hiệu điều khiển tích cực ở mức thấp nghĩa là khi 𝑅𝐷 = 0 thì vi xử lý
sẽ tiến hành đọc dữ liệu bộ nhớ hoặc cổng vào ra tùy thuộc theo trạng thái ghép nối tại thời điểm đọc
IO/𝑀: Input Output/𝑀𝑒𝑚𝑜𝑟𝑦 - Tín hiệu điều khiển ghép nối vi xử lý với
bộ nhớ hoặc cổng vào ra Tín hiệu điều khiển này có hai mức làm việc
Khi IO/𝑀 = 0 vi xử lý sẽ ghép nối với bộ nhớ để trao đổi dữ liệu
Khi IO/𝑀 = 1 vi xử lý sẽ ghép nối với thiết bị ngoại vi để trao đổi dữ liệu
Trang 2618
MN/𝑀𝑋: Minimum/𝑀𝑎𝑥𝑖𝑚𝑢𝑚 - Tín hiệu điều khiển chọn chế độ làm
việc của vi xử lý Vi xử lý 8088 của hãng Intel có hai chế độ làm việc tối thiểu (Min.) và tối đa (Max.)
Khi MN/𝑀𝑋 = 0 vi xử lý sẽ làm việc ở chế độ Max
Khi MN/𝑀𝑋 = 1 vi xử lý sẽ làm việc ở chế độ Min
INTR: Interrupt request - Tín hiệu điều khiển yêu cầu ngắt Tín hiệu này
tích cực ở mức cao
Khi INTR = 1 vi xử lý nhận tín hiệu yêu cầu từ bên ngoài gửi tới, yêu cầu
vi xử lý trao quyền điều khiển
Trang 27b Là một bảng mạch chính trên đó tích hợp các khối phối hợp vào/ra
c Là một bảng mạch chính trên đó tích hợp các BUS của máy tính
Trang 3123
Bài tập tự luận
1 Chuyển đổi giữa:
a Đổi từ hệ hexa sang hệ nhị phân: 5E, 2A, 4B, 6C
b Đổi từ hệ nhị phân sang hệ hexa: 1101011; 10001001; 1101001; 10110
2 Đổi các số sau sang hệ cơ số 10: 5D1616, 7D71616, 11111122, 1011010122
3 Đổi các số sau sang hệ nhị phân và hệ cơ số16: 7, 15, 22, 127, 97, 123.75
4 Một đĩa mềm có dung lượng 1.44MB lưu trữ được 400 trang văn bản Vậy nếu
dùng một ổ đĩa cứng có dung lượng 16GB thì lưu giữ được bao nhiêu trang văn bản?
5 Chuyển xâu kí tự sau thành mã nhị phân: TIN HOC
6 Dãy bit 01100010 01111001 01110100 01100101 tương ứng là mã ASCII của
dãy kí tự nào
7 Viết các số thực sau dưới dạng dấu phẩy động: 11005 ; 25,879 ; 0,000984
8 Biểu diễn các số thập phân sau dưới dạng số dấu phẩy động có độ chính xác đơn:
Trang 32CHƯƠNG 2 BỘ VI XỬ LÍ INTEL 8088/8086
Chương này được xây dựng giúp cho người đọc hiểu được cấu trúc bên trong và kiến trúc phần mềm của vi xử lý 8088/8086 Cấu trúc chương được bố cục chặt chẽ theo các nội dung cụ thể Để nắm bắt nhanh và hiệu quả các nội dung của chương thì người đọc cần có kiến thức nền tảng về lĩnh vực điện tử số, có khả năng tư duy lập trình thông qua một ngôn ngữ lập trình như C, C++
Mang lại các kiến thức về cấu trúc bên
trong của vi xử lý 8088/8086 của hãng Intel
Giới thiệu về các chế độ địa chỉ của vi xử lý
8088/8086
Hỗ trợ người đọc nắm được phương pháp
mã hóa lệnh theo chuỗi bit nhị phân của vi xử
8088 IV.Tập lệnh của bộ vi xử lý 8088 Bài tập ôn tập
excution unit (EU), bus interface unit (BIU),
arithmetic and logic unit (ALU), mã nguồn,
operation code (opcode), mod (mode), register
(reg), address mode (AM), nhóm lệnh, thủ tục,
procedure
1) Barry B Brey, The Intel MicroProcessors 32 bit Prentice-Hall
1995 (Chapter 2, 3, 4) 2) Văn Thế Minh, Kỹ thuật vi xử lý Nhà xuất bản Giáo dục 1997 (Chương 3) 3) Nguyễn Duy Bảo, Lê Xuân Bằng, Kỹ thuật vi xử lý (phần cơ sở) Hà Nội 2002 (Chương 3)
Trang 3325
I CẤU TRÚC BÊN TRONG VI XỬ LÝ 8088/8086
Cấu trúc bên trong của vi xử lý 8088 và 8086 do hãng Intel sản xuất tương đối giống nhau, bao gồm hai thành phần chính:
EU: Excution Unit - Đơn vị thực hiện
BIU: Bus Interface Unit - Đơn vị giao tiếp Bus
1.1 Khối BIU, EU
Hình 2.1: Sơ đồ khối cấu trúc bên trong vi xử lý 8088/86
Trong khối EU bao gồm:
Bốn thanh ghi đa năng 16 bit: AX, BX, CX, DX Các thanh ghi thực hiện được nhiều chức năng khác nhau tùy thuộc theo yêu cầu của người lập trình
Bốn thanh ghi con trỏ và chỉ số 16 bit: SP, BP (con trỏ); SI, DI (chỉ số) Các thanh ghi này đóng vai trò như các thanh ghi chứa địa chỉ độ lệch (offset) của các ngăn nhớ
Khối ALU thực hiện các phép toán về số học và logic
Một thanh ghi cờ 16 bit nhưng chỉ sử dụng 9 bit để làm các bit cờ
Trang 3426
Trong khối BIU bao gồm:
Bốn thanh ghi đoạn 16 bit: CS, DS, ES, SS Các thanh ghi này dùng để chứa địa chỉ đầu tiên của mỗi đoạn nhớ
Một thanh ghi con trỏ lệnh 16 bit: IP IP cho ta biết địa chỉ độ lệch của lệnh tiếp theo sẽ được thực hiện trong đoạn mã CS
Mạch phát tín hiệu địa chỉ và điều khiển Bus
Hàng đợi lệnh (đệm lệnh): Là nơi chứa các lệnh chờ đưa sang khối ALU
để thực hiện
Sự khác nhau giữa Vi xử lý 8088 và 8086:
Khác nhau ở kích thước hàng đợi lệnh Đối với vi xử lý 8088, kích thước hàng đợi lệnh chỉ có độ lớn 4 byte nhưng ở 8086 thì kích thước hàng đợi lệnh lại là 6 byte
Khác nhau ở số bit dữ liệu Cấu trúc bên trong của vi xử lý 8088 và 8086 đều có 16 bit dữ liệu Tuy nhiên ở vi xử lý 8088 khi đưa số bit dữ liệu lên trên bus dữ liệu để trao đổi thì số bit dữ liệu chỉ còn lại 8 bit Trong khi
đó ở vi xử lý 8086 vẫn còn nguyên vẹn cả 16 bit dữ liệu Chính sự khác nhau này dẫn đến việc ghép nối với bộ nhớ và thiết bị ngoại vi của hai vi
xử lý này cũng hoàn toàn khác nhau
Không gian địa chỉ bộ nhớ mà vi xử lý 8088 và 8086 quản lý là 1MB
Theo tổ chức 1 byte (8bit) cho một ngăn nhớ thì vi xử lý sẽ quản lý tới 1M địa chỉ khác nhau cho các ngăn nhớ đó Để giải mã được 1M (220) địa chỉ ngăn nhớ khác nhau thì vi xử lý sẽ phải sử dụng tối đa 20 bit địa chỉ từ A0 đến A19. Không gian địa chỉ bộ nhớbắt đầu từ ngăn nhớ có địa chỉ đầu tiên là 00000h (20 bit địa chỉ cùng bằng 0) cho đến ngăn nhớ có địa chỉ cuối cùng là FFFFFh (20 bit địa chỉ cùng bằng 1)
Không gian địa chỉ cổng vào ra mà các vi xử lý này quản lý là 64KB
Nếu tổ chức trao đổi dữ liệu 1byte (8 bit) qua mỗi cổng vào ra thì số lượng cổng vào ra cần cấp phát địa chỉ sẽ bằng 64K (216) Do đó số bít địa chỉ cần để giải
mã trong trường hợp này sẽ bằng 16 bit địa chỉ tử A0 đến A15 Không gian địa chỉ cổng vào ra sẽ từ địa chỉ cổng đầu tiên là 0000h cho đến địa chỉ cổng cuối cùng là FFFFh
Tuy nhiên có hai cách tổ chức không gian địa chỉ cho vi xử lý 8088 và 8086
Cụ thể như sau:
Không gian địa chỉ cổng vào ra chung với bộ nhớ Như vậy trong không gian 1MB bộ nhớ mà vi xử lý quản lý sẽ dành riêng 64KB cho việc ghép nối trao đổi dữ liệu với thiết bị ngoại vi
Trang 3527
Bảng 2.1: Nhóm các thanh ghi chia theo chức năng
STT Tên nhóm Kí hiệu Thanh ghi
con
Kích thước
Thanh ghi đoạn quản lý
1 Thanh ghi con trỏ
Không gian địa chỉ cổng vào ra tách biệt với bộ nhớ Khi đó vi xử lý dành riêng 64KB cho việc ghép nối trao đổi dữ liệu với thiết bị ngoại vi và đồng thời cũng dành riêng 1MB cho việc ghép nối trao đổi dữ liệu với bộ nhớ
1.2 Các thanh ghi của vi xử lý 8088/8086
Bảng 2.1 liệt kê nhóm các thanh ghi chia được theo chức năng Vi xử lí 8088/8086 có 14 thanh ghi 16 bit được chia làm 6 nhóm chính Trong đó nhóm các thanh ghi đa năng có khả năng tách đôi thành 2 phần: phần bit cao và phần bit thấp, mỗi phần là 8 bit
Trang 3628
1.2.1 Các thanh ghi đoạn và phân đoạn bộ nhớ
Trong khối BIU có 4 thanh ghi đoạn 16 bit là :
CS: Code segment - Thanh ghi đoạn mã
DS: Data segment - Thanh ghi đoạn dữ liệu
ES: Extra segment - Thanh ghi đoạn phụ
SS: Stack segment - Thanh ghi đoạn ngăn xếp
Vi xử lý 8088 chia không gian địa chỉ bộ nhớ 1MB quản lý ra thành 4 đoạn nhớ khác nhau trong đó mỗi thanh ghi đoạn chứa địa chỉ đầu của mỗi đoạn Để xác định địa chỉ logic của một ngăn nhớ bất kỳ vi xử lý cần biết hai địa chỉ: địa chỉ đầu tiên của mỗi đoạn nhớ (được cất trong thanh ghi đoạn 16 bit) và địa chỉ độ lệch khoảng cách từ ngăn nhớ đầu tiên tới ngăn nhớ cần được xác định địa chỉ (có thể là hằng số hoặc thường được cất trong một thanh ghi độ lệch 16 bit)
Địa chỉ logic của ngăn nhớ sẽ được biểu diễn như sau:
Địa chỉ logic = Địa chỉ đoạn : Địa chỉ độ lệch
= Segment : Offset
Lưu ý: Đây không phải là phép chia, dấu “:” thể hiện sự phụ thuộc
Địa chỉ vật lý của một ngăn nhớ mà vi xử lý 8088/8086 quản lý có độ dài thực tế là 20 bit Trong khi đó địa chỉ logic của ngăn nhớ chỉ được xác định và quản
lý bởi cặp địa chỉ đoạn và độ lệch 16 bit Do đó địa chỉ vật lý của ngăn nhớ sẽ được tính cụ thể theo công thức sau:
Địa chỉ vật lý = Địa chỉ đoạn x 16 + Địa chỉ độ lệch
= Địa chỉ đoạn x 10h+ Địa chỉ độ lệch (h)
Ví dụ 1 Cặp thanh ghi CS : IP chứa địa chỉ logic của 1 ngăn nhớ:
a 2000 : F0F0h
b 2F0F : 0000h
Hãy xác định địa chỉ vật lý của ngăn nhớ trong 2 trường hợp trên
Giải: Áp dụng công thức đã cho ở trên ta tính lần lượt như sau:
Trang 3729
Ở trường hợp b của ví dụ 1 cho thấy địa chỉ độ lệch bằng 0000h Điều này có nghĩa là độ lệch khoảng cách từ ngăn nhớ đầu tiên tới ngăn nhớ cần được xác định địa chỉ bằng 0 Hay nói một cách khác, trong trường hợp này chỉ ra địa chỉ vật lý của ngăn nhớ đầu tiên trong một đoạn nhớ
Do đó địa chỉ đầu tiên của đoạn luôn luôn có 4 bit cuối cùng (số hexa cuối cùng) bằng 0 Khi thấy địa chỉ có tận cùng khác 0, giả sử như khi tính toán ra địa chỉ đầu tiên của đoạn SS là 98765h là sai nguyên tắc, cần khắc phục bằng việc bỏ cách qua 10 địa chỉ, sau đó lấy địa chỉ đoạn mới
có tận cùng là 0h kế tiếp, ta được địa chỉ đầu tiên của đoạn là 98770h
Ví dụ 2 Cho địa chỉ đoạn của đoạn nhớ ES quản lý bằng 4900h Hãy xác định địa
chỉ vật lý đầu tiên và cuối cùng của đoạn nhớ này
Giải:
Trong trường hợp này ta cần xác định địa chỉ độ lệch của ngăn nhớ đầu tiên
và ngăn nhớ cuối cùng trong đoạn nhớ ES trước Sau đó áp dụng công thức tính địa chỉ vật lý để xác định địa chỉ của ngăn nhớ đầu tiên và cuối cùng này
Địa chỉ độ lệch của ngăn nhớ đầu tiên = 0000h Địa chỉ độ lệch của ngăn nhớ cuối cùng = FFFFh (độ lớn tối đa hay khoảng cách xa nhất khi cả 16 bit đều bằng 1
và được viết gọn là FFFF hệ hexa)
Địa chỉ vật lý của ngăn nhớ đầu tiên = 4900 x 10h + 0000 = 49000h
Địa chỉ vật lý của ngăn nhớ cuối cùng = 4900 x 10h + FFFF = 58FFFh
Từ đó, ta có thể xác định dung lượng bộ nhớ được tính dựa vào địa chỉ đầu địa chỉ cuối
1.2.2 Các thanh ghi đa năng
Trong khối EU có 4 thanh ghi đa năng 16 bit là AX, BX, CX, DX Các thanh ghi này thực hiện được nhiều chức năng khác nhau tùy thuộc theo yêu cầu của người lập trình Tuy nhiên khi chứa dữ liệu chỉ là 8 bit thì các thanh ghi này sẽ tự động tách làm hai nửa cao (high - H) và thấp (low - L) Do đó từ các thanh ghi đa năng AX, BX, CX và DX sẽ tách ra tương ứng AH, AL, BH, BL, CH, CL, DH, DL
AX: Accumulator - Thanh ghi tích lũy (thanh ghi chứa)
AX tham gia vào việc chứa kết quả của các phép toán nhân hay chia số
16 bit Nếu kết quả chỉ là 8 bit thì sẽ cất trong AL
BX: Base - Thanh ghi cơ sở
BX dùng để chứa các bảng tính có trong lệnh XLAT Ngoài ra BX còn được dùng như là thanh ghi độ lệch của ngăn nhớ trong đoạn dữ liệu DS
CX: Count - Thanh ghi bộ đếm
Trang 3830
CX dùng để chứa số lần lặp có trong các lệnh LOOP CL dùng để chứa số lần dịch hoặc quay trong các lệnh dịch hoặc quay thanh ghi
DX: Data - Thanh ghi dữ liệu
DX cùng với AX tham gia vào việc chứa kết quả của các phép toán nhân hay chia số 16 bit Ngoài ra DX còn được dùng để chứa địa chỉ cổng vào
ra trong các lệnh IN, OUT
1.2.3 Các thanh ghi con trỏ và chỉ số
Vi xử lý 8088/8086 có 5 thanh ghi con trỏ và chỉ số 16 bit là IP, SP, BP, SI,
DI Các thanh ghi này đóng vai trò là các thanh ghi độ lệch chứa địa chỉ độ lệch của các ngăn nhớ Ngoài ra (trừ thanh ghi IP) các thanh ghi này đôi khi được coi như là các thanh ghi đa năng
IP: Instruction Pointer - Thanh ghi con trỏ lệnh
IP dùng để chứa địa chỉ của lệnh sẽ được thực hiện trong đoạn mã CS Địa chỉ logic đầy đủ của lệnh này là CS : IP
BP: Base Pointer - Thanh ghi con trỏ cơ sở
BP trỏ vào dữ liệu có trong đoạn ngăn xếp SS Xác định địa chỉ bất kì
trong ngăn xếp Địa chỉ đầy đủ của dữ liệu này là SS : BP
SP: Stack Pointer - Thanh ghi con trỏ ngăn xếp
SP trỏ vào dữ liệu tại đỉnh của đoạn ngăn xếp SS Địa chỉ đầy đủ của dữ
liệu này là SS : SP
SI: Source Index - Thanh ghi chỉ số nguồn
SI chỉ vào dữ liệu có trong đoạn dữ liệu DS Địa chỉ đầy đủ của dữ liệu này là DS : SI
DI: Destination Index - Thanh ghi chỉ số đích
DI chỉ vào dữ liệu có trong đoạn dữ liệu DS Địa chỉ đầy đủ của dữ liệu này là DS : DI
Ngoài ra đối với các thao tác về chuỗi thì cặp thanh ghi ES : SI sẽ chỉ ra địa chỉ của phần tử thuộc chuỗi nguồn còn cặp thanh ghi ES : DI sẽ chỉ ra địa chỉ của phần tử thuộc chuỗi đích
Bảng 2.2 chỉ ra mối quan hệ giữa các thanh ghi đoạn và thanh ghi độ lệnh tương ứng
Bảng 2.2: Quan hệ giữa các thanh ghi đoạn và thanh ghi độ lệch
Thanh ghi đoạn Thanh ghi độ lệch Chú thích
Trang 3931
Hình 2.2 minh họa 9 bit sử dụng của thanh ghi cờ và được chia làm 2 loại:
6 bit cờ phép toán: CF, PF, AF, ZF, SF, OF
3 bit cờ điều khiển: DF, IF, TF
PF: Parity Flag - Cờ kiểm tra chẵn lẻ
PF = 1 khi và chỉ khi số bit 1 có trong kết quả là chắn
AF: Auxilary Carry Flag - Cờ nhớ phụ
AF = 1 khi và chỉ khi có nhớ hoặc mượn từ một số BCD thấp sang một số BCD cao của kết quả
ZF: Zero Flag - Cờ không
ZF = 1 khi và chỉ khi kết quả phép toán bằng 0
SF: Sign Flag - Cờ dấu
SF = 1 khi và chỉ khi kết quả của phép toán âm
OF: Overflow Flag - Cờ tràn
OF = 1 khi và chỉ khi kết quả của phép toán tràn ra khỏi khoảng biểu diễn khi thực hiện phép cộng hoặc trừ số có dấu
Cờ điều khiển:
Trang 4032
DF: Direction Flag - Cờ hướng
Cờ này chỉ hướng xử lý chuỗi kí tự DF = 1 sẽ xử lý chuỗi kí tự từ phải qua trái
IF: Interrupt Flag - Cờ ngắt
IF = 1 thì vi xử lý sẽ cho phép các yêu cầu ngắt (che được) được tác động (các lệnh STI: Set interrupt - thiết lập ngắt hoặc CLI: Clear interrupt - xóa ngắt được làm việc)
TF: Trap Flag - Cờ bẫy
TF = 1 thì vi xử lý sẽ chạy ở chế độ từng lệnh Chủ yếu dùng để gỡ rỗi chương trình (debug)
Ví dụ: Hãy cho biết kết quả và nội dung của các cờ phép toán 80 + 80h
Giải:
CF = 1 vì có nhớ từ bit msb; OF =1 vì kết quả cho thấy cộng hai số âm ra một số dương; PF = 1 vì số các bit 1 trong kết quả bằng 0; ZF = 1 vì kết quả phép toán bằng 0 (tính 8 bit); AF = 0 vì không có nhớ từ BCD thấp sang BCD cao
II CÁC CHẾ ĐỘ ĐỊA CHỈ CỦA BỘ VI XỬ LÍ 8088
2.1 Các chế độ địa chỉ
Chế độ địa chỉ là cách để vi xử lý tìm thấy toán hạng cho các lệnh của nó khi hoạt động Một bộ vi xử lý có thể có nhiều chế độ địa chỉ Các chế độ địa chỉ này được xác định ngay từ khi chế tạo ra bộ vi xử lý và sau này không thể thay đổi được Bộ vi xử lý 8088 có các chế độ địa chỉ sau:
Chế độ địa chỉ thanh ghi (register addressing mode)
Chế độ địa chỉ tức thì (immediate addresing mode)
Chế độ địa chỉ ô nhớ: Riêng chế độ này lại được chia ra thành 5 chế độ địa chỉ khác nhau là:
Chế độ địa chỉ trực tiếp (direct addresing mode)
Chế độ địa chỉ gián tiếp qua thanh ghi (register indirect addressing mode)
Chế độ địa chỉ tương đối cơ sở (based relative addressing mode)
Chế độ địa chỉ tương đối chỉ số (indexed relative addressing mode)
80 = 10000000 CF = 1, PF = 1, AF = 0
80 = 10000000 ZF = 1, SF = 0, OF = 1
100 = 10000 0000
+