Chúng thường được dùng để điều khiển các hệ thống thiết bị dùng trong quân sự hoặc các hệ thống máy móc của chương trình nghiên cứu vũ trụ, để xử lý các thông tin trong ngành ngân hàng,
Trang 1KHOA §IÖN - ®IÖN Tö
Trang 2Mục lục LỜI MỞ ĐẦU
Chương 1: Kiến trúc hệ vi xử lý 1
1.1 Tổ chức hệ Vi xử lý 1
1.1.1 Máy vi tính 1
1.1.2 Lịch sử phát triển của các bộ vi xử lý 2
1.2 Sơ đồ khối của hệ vi xử lý 7
1.3 Chức năng các khối 7
1.3.1 Đơn vị xử lý trung tâm 7
1.3.2 Bộ nhớ trung tâm 8
1.3.3 Thiết bị xuất nhập thông tin 8
1.3.4 Hệ thống Bus 9
Câu hỏi và bài tập chương 1 9
Chương 2: Bộ vi xử lý 80x86 Intel 10
2.1 Cấu trúc bên trong và hoạt động của bộ vi xử lý 80x86 10
2.1.1 Giới thiệu về bộ vi xử lý Intel 80x86 10
2.1.2 Giới thiệu về cấu trúc bên trong của vi xử lý 8086 11
2.2 Các chế độ định địa chỉ của bộ vi xử lý 80x86 22
2.3 Cách mã hoá lệnh của bộ vi xử lý 80x86 24
2.4 Tập lệnh của bộ vi xử lý 80x86 25
2.4.1 Nhóm lệnh số học 25
2.4.2 Nhóm lệnh logic: 28
2.4.3 Nhóm lệnh di chuyển: 32
2.4.4 Nhóm lệnh so sánh và rẽ nhánh chương trình: 35
2.4.5 Nhóm lệnh xử lý toán hạng bít: 37
2.5 Chu trình thực hiện lệnh 37
2.5.1 Chu kỳ bus đọc: 38
2.5.2 Chu trình ghi: 39
2.5.3 Chu kỳ nhận và thực hiện lệnh 39
Câu hỏi và bài tập chương 2 41
Chương 3: Lập trình hợp ngữ cho hệ vi xử lý 42
3.1 Các thành phần cơ bản của chương trình hợp ngữ 43
3.1.1 Bộ ký tự, từ khoá, nhãn 43
3.1.2 Cấu trúc dòng lệnh hợp ngữ 43
3.1.3 Các chỉ dẫn và khai báo trong chương trình hợp ngữ 44
3.1.4 Biến và hằng 46
Trang 33.1.5 Khung của chương trình hợp ngữ: 48
3.2 Các cấu trúc lập trình cơ bản bằng hợp ngữ 50
3.2.1 Cấu trúc tuần tự 50
3.2.2 Cấu trúc lặp 50
3.2.3 Cấu trúc lựa chọn 53
3.3 Các bước lập trình trên máy tính 55
3.3.1 Soạn thảo chương trình 60
3.3.2 Dịch và liên kết chương trình 62
3.3.3 Mô phỏng và chạy chương trình 65
3.4 Ví dụ và bài tập cơ bản lập trình cho vi xử lý 8086 70
Câu hỏi và bài tập chương 3 74
Chương 4: Ghép nối bộ nhớ và tổ chức vào ra dữ liệu cho 80x86 75
4.1 Giới thiệu các mạch phụ trợ cho 80x86 75
4.1.1 Mạch tạo xung nhịp 8284 75
4.1.2 Mạch điều khiển bus 8288 76
4.2 Ghép nối 80x86 với bộ nhớ 78
4.2.1 Giới thiệu về các loại bộ nhớ bán dẫn 78
4.2.2 Giải mã địa chỉ bộ nhớ 81
4.2.3 Ghép nối 80x86 với bộ nhớ 82
4.3 Ghép nối 80x86 với thiết bị ngoại vi 86
4.3.1 Các phương pháp điều khiển vào ra dữ liệu 86
4.3.2 Giải mã địa chỉ cho thiết bị vào ra 86
4.3.3 Mạch định thời 8254 86
4.3.4 Mạch ghép nối vào ra song song lập trình được 8255A 89
d Chế độ 2 (mode 2): Chế độ vào/ra 2 chiều 95
4.3.5 Mạch ghép nối vào ra nối tiếp 8251A 96
4.4.Truy nhập trực tiếp bộ nhớ DMA 97
4.4.1.Nguyên tắc DMA 97
4.4.2 Các bước thực hiện DMA của 80x86 97
4.4.3 Bộ điều khiển DMA 8237 99
Câu hỏi và bài tập chương 4 100
Chương 5: Ngắt và xử lý ngắt cho 80x86 101
5.1 Giới thiệu chung về ngắt 101
5.2 Phân loại ngắt 101
5.2.1 Ngắt cứng 101
5.2.2 Ngắt mềm 102
Trang 45.3 Xử lý của CPU khi có yêu cầu ngắt 102
5.4 Xử lý ưu tiên khi ngắt 104
5.5 Ghép nối CPU với chip điều khiển ưu tiên ngắt 8259A 104
5.5.1 Các khối chức năng chính của 8259A 105
5.5.2.Các tín hiệu của 8259A: 106
Câu hỏi và bài tập chương 5 114
Chương 6: Vi điều khiển 8051 115
6.1 Cấu trúc Vi điều khiển 8051 115
6.1.1 Giới thiệu về vi điều khiển: 115
6.1.2 Sơ đồ cấu trúc 117
6.1.3 Các thông số cơ bản 118
6.2 Tổ chức bộ nhớ của 8051 118
6.2.1 Bộ nhớ RAM 118
6.2.2 Bộ nhớ ROM 120
6.2.3 Các thanh ghi chức năng đặc biệt (SFR- Special Funtion Registors) 120
6.3 Các chế độ định địa chỉ của 8051 121
6.3.1.Chế độ định địa chỉ tức thời 121
6.3.2 Chế độ định địa chỉ thanh ghi 122
6.3.3 Chế độ định địa chỉ trực tiếp 122
6.3.4 Chế độ định địa chỉ gián tiếp 122
6.3.5 Chế độ định địa chỉ chỉ số 122
6.4 Tập lệnh của 8051 123
6.4.1 Nhóm lệnh di chuyển dữ liệu 123
6.4.2 Nhóm lệnh logic 124
6.4.3 Nhóm lệnh số học 126
6.4.4 Nhóm lệnh rẽ nhánh chương trình 126
6.4.5 Nhóm lệnh xử lý toán hạng bit 128
6.5 Lập trình điều khiển cổng làm chức năng vào – ra 129
6.5.1 Giới thiệu về các cổng vào ra song song của vi điều khiển 8051 129
6.5.2 Lập trình cho các cổng của vi điều khiển làm chức năng đầu ra 130
6.5.3 Lập trình cho các cổng của vi điều khiển làm chức năng đầu vào 133
6.6 Lập trình điều khiển khối timer/counter 136
6.6.1 Giới thiệu về các bộ timer của vi điều khiển 8051 137
6.6.2 Các thanh ghi tác động lên Timer 138
6.6.3 Mô tả hoạt động của bộ Timer 139
6.6.4 Lập trình cho Timer của 8051 ở chức năng bộ đếm 140
6.6.5 Lập trình cho vi điều khiển ở chức năng bộ định thời 144
Trang 56.7 Lập trình điều khiển ngắt 146
6.7.1 Giới thiệu hoạt động của ngắt và các ngắt của vi điều khiển 146
6.7.2 Các thanh ghi tác động lên ngắt 147
6.7.3 Lập trình với ngắt Timer 148
6.7.4 Lập trình với ngắt ngoài 152
6.8 Lập trình điều khiển cổng nối tiếp 157
6.8.1 Các cơ sở của truyền thông nối tiếp 157
6.8.3 Truyền thông nối tiếp ở vi điều khiển 8051 161
6.8.3 Lập trình cho vi điều khiển trao đổi dữ liệu nối tiếp với PC 167
Câu hỏi và bài tập chương 6 170
Chương 7: Thiết kế hệ vi xử lý chuyên dụng 173
7.1 Quy trỡnh thiết kế hệ vi xử lý chuyên dụng 173
7.1.1 Quy trỡnh phỏt triển hệ thống 173
7.1.2 Phõn tớch yờu cầu và xõy dựng sơ đồ khối hệ thống 173
7.1.3 Thiết kế phần cứng và phần mềm 173
7.1.4 Thực thi hệ thống và kiểm thử 174
7.2 Thiết kế hệ vi xử lý chuyờn dụng sử dụng vi điều khiển 8051 174
7.2.1 Điều kiện làm việc của vi điều khiển 8051 174
7.2.2 Thiết kế mạch hiển thị thời gian thực sử dụng DS12887 175
Câu hỏi và bài tập chương 7 201
TÀI LIỆU THAM KHẢO 203
Trang 6LỜI MỞ ĐẦU
Trong mấy chục năm qua, các họ vi xử lý đã phát triển nhanh chóng tạo ra sự thay đổi lớn trong cách thức con người xử lý công việc Từ công việc văn phòng đến các công việc sản xuất công nghiệp, thông tin, liên lạc vai trò của các hệ vi xử lý ngày càng được thể hiện rõ ràng và đóng vai trò quan trọng Vi xử lý đã xuất hiện trong các máy tính, các thiết bị cá nhân như điện thoại di động, các thiết bị gia dụng như máy giặt, điều hòa, v.v, và các thiết bị điều khiển công nghiệp
Phù hợp với các mục đích ứng dụng khác nhau, vi xử lý cũng được phát triển theo các hướng khác nhau mà điển hình là các chip vi xử lý mục đích chung, chip vi điều khiển và chip xử lý tín hiệu số
Học phần Vi xử lý 1 là học phần cơ sở của các ngành đào tạo Công nghệ Điện tử, Công nghệ Tự động hóa của khoa Điện-Điện tử trường ĐH Sư phạm Kỹ thuật Nam Định Đào tạo theo học chế tín chỉ, thời gian tự học của sinh viên chiếm một lượng thời gian lớn, nhằm cung cấp cho sinh viên tài liệu có tính hệ thống phục vụ quá trình tự học, chúng tôi biên soạn tập bài giảng học phần Vi xử lý gồm 2 cuốn: Vi xử lý
Điện-1 và Vi xử lý 2 Mục tiêu của học phần là trang bị cho sinh viên kiến thức cơ bản về kiến trúc của hệ vi xử lý, quy trình làm việc và lập trình điều khiển hoạt động hệ vi xử
lý Trên cơ sở đó, sinh viên có khả năng thiết kế phần cứng, viết phần mềm điều khiển
hệ vi xử lý chuyên dụng dựa trên các IC vi xử lý và vi điều khiển thông dụng
Với sự phát triển nhanh chóng của các dòng vi xử lý, các hãng sản xuất khác nhau, mức độ ngày càng tinh vi, phức tạp hơn thì việc tiếp cận môn học như thế nào là một câu hỏi lớn Với mục đích cung cấp cho người học những kiến thức cơ bản nhất
về hệ vi xử lý, chúng tôi lựa chọn vi xử lý 8086 của hãng Intel để giới thiệu với người đọc Mặc dù không còn được sản xuất, nhưng các dòng vi xử lý sau của Intel vẫn tương thích với vi xử lý này Các vi xử lý Intel xuất hiện rộng rãi trong các máy tính
cá nhân, cho phép sinh viên có một công cụ thuận lợi để tìm hiểu, thử nghiệm, kiểm tra các hoạt động cơ bản của hệ vi xử lý
Khác với sinh viên ngành học công nghệ thông tin, đối tượng của sinh viên ngành Điện-Điện tử thường là điều khiển các thiết bị trong đó đòi hỏi sự kết hợp giữa phần cứng và phần mềm Để xây dựng được một thiết bị trên vi xử lý, đòi hỏi phải thiết kế phần cứng tương đối phức tạp bao gồm tổ chức bộ nhớ, phối ghép vào ra Điều này là khó khăn với những người mới tiếp cận môn học để tạo ra một sản phẩm hoàn chỉnh Trong trường hợp này, ứng dụng vi điều khiển có nhiều thuận lợi Vi điều khiển là một hệ vi xử lý được đóng gói trên chip với các thành phần bên ngoài tối
Trang 7thiểu để hoạt động Do đó, vi điều khiển là một công cụ thực hành hiệu quả cho phép sinh viên hiểu hoạt động của hệ vi xử lý đồng thời áp dụng các kiến thức đã học được vào các sản phẩm thực tế Điều này giúp sinh viên có thêm niềm hứng thú khi học hỏi môn học và cũng góp phần kết hợp chặt chẽ giữa lý thuyết và thực hành
Để học học phần này hiệu quả đòi hỏi sinh viên phải kết hợp giữa tìm hiểu lý thuyết và làm bài tập Sinh viên cần cài đặt một số môi trường phát triển tích hợp như EMU8086, Proteus và Keil uVision hoặc Pinnacle 52
Tập bài giảng này được viết theo chương trình học phần Vi xử lý 1 đã được phê duyệt Trong phần đầu, chúng tôi giới thiệu về cấu trúc cơ bản hệ vi xử lý, nguyên tắc hoạt động của hệ vi xử lý, giới thiệu về cấu trúc vi xử lý 8086, tập lệnh, cách mã hóa lệnh, các chế độ định địa chỉ và cách viết chương trình cho 80x86 Tiếp theo, chúng tôi trình bày tổ chức bộ nhớ và các thiết bị ngoại vi, ngắt và truy nhập trực tiếp bộ nhớ
8051 Ngắt và timer cũng được giới thiệu Chương cuối trình bày về việc xây dựng một hệ vi xử lý chuyên dụng Trong các chương cùng với lý thuyết chúng tôi đưa vào các ví dụ bài tập có lời giải Cuối mỗi chương có các bài tập củng cố lý thuyết
Trong quá trình biên soạn, mặc dù đã cố gắng nhưng không tránh khỏi sai sót, kính mong sự chỉ giáo của quý thầy, cô và bạn đọc
Nhóm biên soạn
Trang 8Chương 1: Kiến trúc hệ vi xử lý 1.1 Tổ chức hệ Vi xử lý
Bộ vi xử lý có mặt trong các máy vi tính là sự phát triển liên tục cho các hệ vi xử lý
Để nắm bắt được tính kế thừa và tính liên tục của sự phát triển này trước khi đi vào tổ chức hệ vi xử lý ta sẽ giới thiệu về các loại máy tính nói chung
1.1.1 Máy vi tính
Như ta đã biết về kiến thức của máy tính nói chung, một máy tính (Computer) thông thường bao gồm các khối chức năng cơ bản như: khối xử lý trung tâm (CPU, Central Processing Unit), bộ nhớ ( Memmory ) và khối phối ghép với thiết bị ngoại vi (I/O, Input/Output ) Tuỳ theo quy mô phức tạp của các khối chức năng kể trên mà người ta phân các máy đã và đang sử dụng ra thành các loại sau:
- Máy tính lớn
Máy tính lớn (mainframe) là loại máy tính được thiết kế để giải các bài toán lớn với tốc độ nhanh Nó thường làm việc với số liệu từ 64 bit hoặc lớn hơn nữa và được trang bị bộ nhớ rất lớn Chính vì vậy máy tính cũng lớn về kích thước vật lý Chúng thường được dùng để điều khiển các hệ thống thiết bị dùng trong quân sự hoặc các hệ thống máy móc của chương trình nghiên cứu vũ trụ, để xử lý các thông tin trong ngành ngân hàng, ngành khí tượng, các công ty bảo hiểm Tiêu biểu cho loại máy tính này
là loại máy IBM 8341, honeywell DSP8 Loại máy lớn nhất trong các máy lớn được gọi là supercomputer (như loại máy Y-MP/832 của Cray)
- Máy tính con
Máy tính con (minicomputer) là một dạng thu nhỏ về kích thước cũng như về tính năng của máy tính lớn Nó ra đời nhằm thoả mãn các nhu cầu sử dụng máy tính cho các ứng dụng vừa phải mà nếu dùng máy tính lớn vào đó thì sẽ gây lãng phí Do vậy máy tính con thường làm việc với các dữ liệu có độ dài từ 32 bit với tốc độ chậm hơn
và khả năng của bộ nhớ hạn chế hơn Máy tính con thường được dùng cho các tính toán khoa học kỹ thuật, gia công dữ liệu quy mô nhỏ hay để điều khiển quy trình công nghệ Tiêu biểu cho nhóm này là loại máy VAX 6360 của Digital Equipment Corporation và MV/8000II của Data genaral
- Máy vi tính
Máy vi tính (Microcomputer) là loại máy tính rất thông dụng hiện nay Một máy
vi tính có thể là một bộ vi điều khiển (microcontroller) Chúng có khả năng làm việc với số liệu có độ dài 1 bit, 4 bit, 8 bit, 16 bit Hiện nay một số máy vi tính có tính năng
có thể so sánh được với máy tính con, làm việc với số liệu có độ dài từ là 32 bit (thậm chí là 64 bit) Ranh giới để phân chia giữa máy vi tính và máy tính con chính vì thế ngày càng không rõ nét Một đặc điểm tiêu biểu để nhận biết máy vi tính là chúng đều
Trang 9sử dụng các bộ xử lý trung tâm (CPU) được chế tạo bằng công nghệ mạch vi điện tử với mức độ tổ hợp lớn, mạch VLSI (very large of integration) mà người ta quen gọi là các bộ vi xử lý (microprocessor, P)
Các bộ vi xử lý hiện có tên thị trường thường được xếp theo các họ phụ thuộc vào các nhà sản xuất và chúng rất đa dạng về chủng loại Nổi bật nhất trong các họ vi xử lý
đó là 2 họ của 2 nhà sản xuất hàng đầu nổi tiếng trong lĩnh vực này, đó là họ vi xử lý 80x86 của Intel và họ vi xử lý 680xx của Motorola
Đặc điẻm chung của các vi xử lý thế hệ này là:
Độ dài từ thường là 4 bit (cũng có thể dài hơn)
Công nghệ chế tạo PMOS với đặc điểm mật độ phần tử nhỏ, tốc độ thấp, giá thành rẻ và có khả năng đưa ra dòng tải nhỏ
- Thế hệ 3 (1978 -1982)
Các bộ vi xử lý trong thế hệ này có đại diện là các bộ vi xử lý 16 bit 8086/80186/80286 của Intel hoặc 86000/86010 của Motorola Một điều tiến bộ hơn hẳn so với các bộ vi xử lý 8 bit thế hệ trước là các bộ vi xử lý 16 bit có tập lệnh đa dạng với các lệnh nhân, lệnh chia và các lệnh thao tác với chuỗi kí tự Khả năng phân
Trang 10biệt địa chỉ cho bộ nhớ hoặc cho thiết bị ngoại vi của các vi xử lý thế hệ này cũng lớn hơn ( từ 1MB đến 16 MB cho bộ nhớ và tới 64 K địa chỉ cho thiết bị ngoại vi đối với
họ Intel ) Đây là các bộ vi xử lý được dùng trong các máy IBM PC, PC/XT, PC/AT
và các máy Macintosh của Apple Phần lớn các bộ vi xử lý trong thế hệ này đều được sản xuất bằng công nghệ HMOS và cho phép đạt được tốc độ từ 0,1-1s/lệnh với tần số
450 MHz, Intel Pentium III 500 - 550 MHz Ngày nay các thông số cơ bản của bộ vi
xử lý ngày càng được cải thiện: tốc độ ngày càng cao ( các bộ vi xử lý hiện đại của INTEL đã đạt tới tốc độ 800 MHz - 3GHz, độ rộng kênh thông tin dữ liệu ngày càng lớn như: 32, 64 bit Điều đó đã giúp cho bài toán thiết kế các hệ vi xử lý chuyên dụng với tính năng rộng lớn trở nên dễ dàng hơn Song song với các hệ vi xử lý của hãng INTEL, hãng Motola cũng đưa ra các vi xử lý 32 bit 68020/68030/68040 và các vi
xử lý 64 bit 68060/64 Ngày nay tốc độ của các vi xử lý hiện đại của hãng MOTOROLA cũng đạt trên 3GHz Đặc điểm của các bộ vi xử lý thế hệ này có số lượng transistor rất lớn (từ vài 3 triệu đến trên 50 triệu transistor ) Phần lớn các bộ vi
xử lý mới thực hiện các lệnh trong một chu kỳ, và thực tế tất cả chúng đều có đơn vị xử
lý dấu phẩy động FPU (Floating - Point Unit) bên trong Chúng có các thanh ghi chung
16 - 32 bit Nhiều loại có phân biệt các tệp thanh nghi 32 bit (register file) cho đơn vị nguyên IU (interger unit ) và tệp thanh ghi 32 bit cho FPU Chúng có Cache memory bên trong với dung lượng lên tới 36 KB Đa số Cache memory bên trong phân đôi: dùng cho lệnh Icache và dùng cho dữ liệu Dcache Các bộ vi xử lý công nghệ cao hiện nay (Advanced Microprocessors) đã thoả mãn các yêu cầu chế tạo các máy tính lớn (mainframes) và các siêu máy tính ( supercomputers) Các vi xử lý thời này có bus địa chỉ đều là 32 bit (phân biệt 4 GB bộ nhớ) và có khả năng làm việc với bộ nhớ ảo Người ta cũng áp dụng các cơ chế hoặc các cấu trúc đã được sử dụng trong các máy tính lớn vào các bộ vi xử lý: cơ chế xử lý xen kẽ liên tục dòng mã lệnh (pipeline), bộ nhớ cache (bộ nhớ ẩn ), bộ nhớ ảo Các bộ vi xử lý này đều có bộ quản lý bộ nhớ (MMU) và nhiều khi cả các bộ đồng xử lý toán học ở bên trong Chính nhờ các cải tiến
đó mà các bộ vi xử lý thế hệ này có khả năng cạnh tranh được với các máy tính nhỏ
Trang 11trong rất nhiều lĩnh vực ứng dụng Phần lớn các bộ vi xử lý thế hệ này đều được sản xuất bằng công nghệ HCMOS
Bên cạnh các bộ vi xử lý vạn năng truyền thống thường được dùng để xây dựng các máy tính với tập lệnh đầy đủ ( complex instruction set computer, CISC) đã nói ở trên, trong thời gian này cũng xuất hiện các bộ vi xử lý cải tiến dùng để xây dựng các máy tính với tập lệnh rút gọn (reduced instruction set computer, RISC) với nhiều tính năng có thể so sánh với các máy tính lớn ở các thế hệ trước Đó là các bộ vi xử lý Alpha của Digital, PowerPC của tổ hợp hãng Apple - Motorola - IBM
- Thế hệ tiếp theo: (từ năm 2000 đến nay)
Là thời kỳ của các máy vi tính với năng lực tính toán rất lớn Công nghệ máy tính ở thời kỳ này liên quan tới việc sử dụng các mạch tích hợp cực lớn với dung lượng vài chục triệu tranzystor/chip ngày nay Nhờ có công nghệ mới mà toàn bộ CPU, bộ nhớ chính hay các thiết bị tương tự khác có thể được xây dựng gọn trên một chip Tốc
độ ở thế hệ này có thể đạt tới hàng tỷ phép tính/giây
Máy tính Neuron - Neural Network - Một kỹ thuật của trí khôn nhân tạo, bắt chước cách thức tổ chức các tế bào thần kinh nối với bộ não con người Người ta cung cấp những thông tin cho mạng thần kinh để huấn luyện cho nó nhận biết được các sự vật mẫu nhằm có thể đưa ra các dự báo hoặc giải pháp xử lý thích ứng
Tuy nhiên cũng nên lưu ý là thế hệ này hiện nay đang trong quá trình nghiên cứu, một số mẫu máy tính thử nghiệm đầu tiên đã xuất hiện trong vài năm trở lại đây
và các khái niệm liên quan đang mới hình thành
Theo sự phát triển của công nghệ, các máy tính hiện nay được thiết kế, xây dựng theo một xu hướng chung là:
- Mạnh hơn về tốc độ và khả năng tính toán
- Nhỏ hơn về kích thước
- Tiết kiệm hơn về năng lượng
* Dựa trên các máy tính hiện đang phát triển trên cơ sở gồm hai phần:
Phần cứng: gồm những đối tượng vật lý hữu hình như vi mạch, bản mạch in, dây cáp nối mạch điện, bộnhớ, màn hình, máy in, thiết bị đầu cuối, nguồn nuôi.v.v…
Phần mềm: gồm các thuật giải và sự thể hiên trên máy tính của nó là các chương trình(program), bao gồm các lệnh (instruction) Chương trình có thể được nhập vào lần lượt từ bàn phím, trình bày trên màn hình, ghi trên đĩa từ, v.v… nhưng nội dung chủ yếu là các lệnh, khác với môi trường vật lý
*Hầu hết các máy vi tính IBM họ PC hoặc các máy vi tính tương thích IBM đều sử dụng CPU Intel họ APX Bảng 1.1 liệt kê các đặc tính cơ bản của một số CPU của Intel trong đó 80486 chứa một bộ điều khiển cache tích hợp và 8 KB RAM tĩnh,
Trang 12ĐặC TíNH 8080 8086 8088 80186 80188 80286 80386 386SX 486/Pentium Bus địa chỉ (số
8,10, 12.5
6,8,10, 12.5,20
8259-
A
On chip
On chip
8253/
54
On chip
On chip
Trang 13H×nh d¹ng mét sè CPU 8 bit, 16 bit vµ 32 bit
H×nh 1.1 H×nh d¹ng mét sè CPU
Trang 141.2 Sơ đồ khối của hệ vi xử lý
- Sơ đồ khối của hệ vi xử lý:
Hình 1.2 Sơ đồ khối của hệ vi xử lý
- Chú thích:
CPU: Central Processing Unit ( Đơn vị xử lý trung tâm - chíp )
ROM: Read Only Memmory ( Bộ nhớ chỉ đọc )
RAM: Radom Acess Memmory (Bộ nhớ truy cập ngẫu nhiên )
I/O: Input/ Output: Thiết bị vào ra
Address Bus: Bus địa chỉ
Data Bus: Bus dữ liệu
Control Bus: Bus điều khiển
1.3 Chức năng các khối
1.3.1 Đơn vị xử lý trung tâm
CPU (Central Processing Unit) là thành phần chủ đạo nhất là của hệ thống máy tính, đôi khi còn được gọi là bộ xử lý hay bộ xử lý trung tâm CPU là nơi thực hiện phần lớn các phép toán, các phép tính số học, phép tính lôgic và các biến đổi mã tương ứng ở các máy vi tính ngày nay, CPU thường được xây dựng trên một hoặc vài vi mạch đóng trong một chíp IC và được gọi là bộ vi xử lý P (microprocessor)
Hai thành phần cơ bản của CPU là: đơn vị số học ALU (arithmetic logic unit)
đảm nhiệm các phép toán logic - số học và đơn vị điều khiển CU (control unit) tiến hành chuyển các lệnh từ bộ nhớ, giải mã, thực hiện lệnh hay chuyển tới ALU khi cần Bên cạnh các đơn vị ALU, CU, trong CPU còn có tập hợp các thanh ghi
Bus điều khiển Bus dữ liệu
Thiết bị ra (màn hình, máy in,ổ đĩa, máy vẽ )
CU
Phối ghép vào ra (I/O)
Thiết bị vào (Bàn phím, chuột,ổ đĩa máy quét )
Bus địa chỉ
Bộ nhớ RAM
Trang 15a Bộ nhớ RAM: ở các hệ máy vi tính, người ta sử dụng bộ nhớ bán dẫn bao gồm bộ nhớ truy cập ngẫu nhiên RAM (random access memory) hay còn gọi là bộ nhớ ghi đọc Ta có thể hiểu như đây là môi trường để xử lý thông tin Bộ nhớ này cho phép lưu trữ dữ liệu tạm thời ( mất điện thì bị mất dữ liệu )
b Bộ nhớ ROM: Bộ nhớ chỉ đọc ROM (read only memory), ta có thể coi như
là một quyển sách chỉ dùng để đọc thông tin ra, bộ nhớ này cho phép lưu trữ dữ liệu lâu dài ( thường để lưu các cấu hình phần cứng do nhà sản xuất thiết lập cho Main board )
Ngoài bộ nhớ RAM, ROM, trong các hệ máy tính hiện nay còn có một số dạng bộ nhớ khác như bộ nhớ chỉ đọc lập trình được PROM (programmable read only memory), bộ nhớ PROM xoá được bằng tia cực tím gọi là EPROM (erasable programmable read only memory) bộ nhớ PROM xoá được bằng điện EEPROM ( electrically erasable programmable read only memory ) và bộ nhớ FlashROM là bộ nhớ có thể xoá và nạp rất nhanh
1.3.3 Thiết bị xuất nhập thông tin
I/O tạo khả năng giao tiếp giữa máy tính và thế giới bên ngoài Các thiết bị ngoại
vi như màn hình, bàn phím, máy in, các bộ biến đổi D/A, A/D, các thiết bị đo lường
điều khiển đều liên hệ với máy tính qua bộ phận này mà cụ thể cho từng thiết bị
là các cổng
a Thiết bị xuất: Biến đổi các mã bên trong máy tính sau khi xử lý để con người
có thể hiểu được hoặc điều khiển các thiết bị khác Thiết bị xuất thông dụng nhất có thể kể như màn hình, máy in, faxmodem, máy vẽ, loa hay các thiết bị điều khiển
Tuy nhiên cũng cần lưu ý là ranh giới các thiết bị vào và thiết bị ra không phải khi nào cũng rõ ràng Nhiều thiết bị vừa đảm nhiệm vai trò là thiết bị vào song cũng thực hiện chức năng là thiết bị ra, ví dụ như faxmodem, CDROM đọc ghi, thiết bị đo -
điều khiển
b Thiết bị nhập : Thực hiện biến đổi tín hiệu tự nhiên hoặc cho bởi con người sang dạng mã máy để bộ vi xử lý thực hiện Thiết bị vào thông dụng nhất có thể kể như bàn phím, con chuột, máy quét scaner, thiết bị phân tích nhận dạng tiếng nói, CD-ROM
Trang 161.3.4 Hệ thống Bus
Hệ thống bus của máy tính thực hiện kết nối các khối chức năng là hệ thống bus Trong máy tính có hai nhóm bus là bus hệ thống, nối giữa CPU với bộ nhớ chính (trong các máy hiện đại ngày nay bus hệ thống được nối giữa CPU và vi mạch tổng hợp) và bus vào ra nối ghép giữa các thiết bị ngoại vi tới CPU thông qua các "cầu nối" hay còn gọi là các "cầu" Tham gia điều khiển bus có các vi mạch điều khiển bus Các
vi mạch này trước đây được nằm riêng lẻ còn hiện nay thường tích hợp vào trong các vi mạch tổng hợp chipset Hệ thống bus bao gồm 3 loại bus là bus địa chỉ, bus dữ liệu và bus điều khiển
a Bus địa chỉ: Phục vụ việc chọn ô nhớ hoặc thiết bị vào/ra Khi ghi/đọc bộ nhớ hoặc thiết bị vào/ra, bộ xử lý trung tâm sẽ đưa lên bus này địa chỉ của các thiết bị liên quan Đây là bus một chiều và xuất phát từ CPU
b Bus dữ liệu: Được dùng để chuyển dữ liệu và thường có từ 8, 16, 20, 24, 32
đến 64 đường dây tuỳ thuộc vào từng CPU cụ thể BUS dữ liệu là loại 2 chiều Các phần tử có đầu ra nối thẳng với bus dữ liệu đều phải được trang bị đầu ra 3 trạng thái
để bảo đảm cho bus hoạt động được bình thường
c Bus điều khiển: Hỗ trợ cho việc trao đổi các thông tin điều khiển và trạng thái như phân biệt thiết bị được CPU truy nhập là bộ nhớ hay thiết bị vào/ra, thao tác truy nhập là đọc hay viết v.v Bus điều khiển thường gồm hàng chục dây tín hiệu khác nhau, và xét theo cả nhóm thì đó là loại bus 2 chiều
Câu hỏi và bài tập chương 1
Câu 1: Hãy cho biết quá trình phát triển của các bộ vi xư lý
Câu 2: Vẽ sơ đồ cấu trúc của hệ vi xử lý, trình bày chức năng từng khối trong hệ vi xử
lý
Câu 3: Phân biệt bộ nhớ ROM, RAM và các thông số của chúng
Câu 4: Cho biết đặc điểm của các tuyến đường BUS địa chỉ, dữ liệu, điều khiển
Trang 17Chương 2: Bộ vi xử lý 80x86 Intel
2.1 Cấu trúc bên trong và hoạt động của bộ vi xử lý 80x86
2.1.1 Giới thiệu về bộ vi xử lý Intel 80x86
Sau khi đã tìm hiểu qua về cấu trúc của hệ vi xử lý Trong chương này ta sẽ đi sâu tìm hiểu một bộ vi xử lý cụ thể và rất điển hình đó là bộ vi xử lý của Intel
Lý do chúng ta học và tìm hiểu vể bộ vi xử lý Intel 80x86 mà không phải là vi xử lý của các hãng khác:
+ Thứ nhất, đây là bộ vi xử lý nổi tiếng một thời thuộc họ 80x86 của Intel, nó
được sử dụng trong nhiều lĩnh vực khác nhau, nhất là trong các máy IBM PC /XT Các
bộ vi xử lý thuộc họ này sẽ còn được sử dụng rộng rãi trong hàng chục năm nữa, và vi tính kế thừa của các sản phẩm trong họ 80x86, các chương trình viết cho 8088 vẫn có thể chạy trên các hệ thống tiên tiến sau này
+ Thứ hai, về góc độ sư phạm thì đây là bộ vi xử lý khá đơn giản và vì việc dạy hiểu nó là tương đối dễ đối với những người mới bắt đầu thâm nhập vào lĩnh vực này
+ Thứ ba, các họ vi xử lý tuy có khác nhau nhưng xét cho cùng cũng có khá nhiều điểm chủ yếu rất giống nhau Do đó một khi đã nắm được các vấn đề kỹ thuật của 8086, ta sẽ có cơ sở để nắm bắt các kỹ thuật của các bộ vi xử lý khác cùng trong
họ Intel 80x86 hoặc của các họ khác
Bên trong của bộ vi xử lý - Bộ vi xử lý thường được xem là bộ não của hệ máy
vi tính Bộ vi xử lý là một vi mạch tích hợp cực lớn Chúng ta sẽ nghiên cứu bộ vi xử lý
điển hình là 8086 Bộ vi xử lý 8086 gồm có 2 phần chính là đơn vị thực hiện lệnh EU (Execution Unit) và đơn vị giao tiếp BIU (Bus Interface Unit) EU thực hiện tất cả các tính toán số học và logic, còn BIU thu nhận lệnh (Fetche) và dữ liệu từ bộ nhớ Các lệnh này dùng để điều khiển và cho hoạt động của CPU
Trang 182.1.2 Giới thiệu về cấu trúc bên trong của vi xử lý 8086
a Sơ đồ cấu trúc:
Hình 2.1 Cấu trúc bên trong của vi xử lý 8086
b Vai trò của các khối chức năng trong CPU 8086
- Khối BIU, EU:
Bên trong CPU 8086 có 2 khối chính: khối phối ghép ( bus interface unit, BIU )
và khối thực hiện lệnh ( execution unit, EU ) Việc chia CPU ra thành 2 phần làm việc
đồng thời có liên hệ với nhau qua đệm lệnh làm tăng đáng kể tốc độ xử lý của CPU Các bus bên trong CPU có nhiệm vụ chuyển tải tín hiệu của các khối khác Trong số các bus đó có bus dữ liệu 16 bit của ALU, bus các tín hiệu điều khiển ở EU và bus trong của hệ thống ở BIU Trước khi đi ra bus ngoài hoặc đi vào bus trong của bộ vi xử
lý các tín hiệu truyền trên bus thường được cho đi qua các bộ đệm để nâng cao tính tương thích cho nối ghép hoặc nâng cao phối ghép
BIU đưa ra địa chỉ, đọc mã lệnh từ bộ nhớ, đọc / ghi dữ liệu từ vào cổng hoặc bộ nhớ Nói cách khác BIU chịu trách nhiệm đưa địa chỉ ra bus và trao đổi dữ liệu với bus
Trong EU ta thấy có một khối điều khiển ( control unit, CU ) Chính tại bên trong khối điều khiển này có mạch giải mã lệnh Mã lệnh đọc vào từ bộ nhớ được đưa
đến đầu vào của bộ giải mã, các thông tin thu được từ đầu ra của nó sẽ được đưa đến mạch tạo xung điều khiển, kết quả là tu thu được các dãy xung khác nhau ( tuỳ theo mã lệnh ) để điều khiển hoạt động của các bộ phận bên trong và bên ngoài CPU Trong
Trang 19khối EU còn có khối số học và lôgic (arithmetic and logic unit ALU ) dùng để thực hiện các thao tác khác nhau với các toán hạng của lệnh Tóm lại, khi CPU hoạt động
EU sẽ cung cấp thông tin về địa chỉ cho BIU để khối này đọc lệnh và dữ liệu, còn bản thân nó thì đọc lệnh và giải mã lệnh
Trong BIU còn có một bộ nhớ đệm lệnh với dung lượng 6 byte dùng để chứa các mã lệnh đọc được nằm sẵn để chờ EU xử lý ( trong tài liệu của Intel bộ đệm lệnh này còn được gọi là hàng đợi lệnh ) Đây là một cấu trúc mới được cấy vào bộ vi xử lý
8086, 8088 do việc Intel đưa cơ chế xử lý xen kẽ liên tục, dòng mã lệnh ( instruction pipelining ) vào ứng dụng trong các bộ vi xử lý thế hệ mới Pipeline là một cơ chế đã
được ứng dụng từ những năm 60 từ các máy lớn Nhân đây ta sẽ giới thiệu sơ qua một chút về cơ chế này
Trong các bộ vi xử lý ở các thế hệ trước ( như ở 8085 chẳng hạn ), thông thường hoạt động của CPU gồm 3 giai đoạn: đọc mã lệnh ( opcode fetch ), giải mã lệnh (decode ) và thực hiện lệnh ( execution ) Trong một thời điểm nhất định, CPU thế hệ này chỉ có thể thực hiện một trong ba công việc nói trên và vì vậy tuỳ theo từng giai đoạn sẽ có những bộ phận nhất định của CPU ở trạng thái nhàn rỗi Chẳng hạn, khi CPU giải mã lệnh hoặc khi nó đang thực hiện những lệnh không liên quan đến bus (thao tác nội bộ) thì các bus không được dùng vào việc gì dẫn đến tình trạng lãng phí khả năng của chúng Trong khi đó từ bộ vi xử lý 8086/88, Intel sử dụng cơ chế xử lý xen kẽ liên tục dòng mã lệnh thì CPU được chia thành 2 khối và có sự phân chia công việc cho từng khối: việc đọc mã lệnh là do khối BIU thực hiện, việc giải mã lệnh và thực hiện lệnh là
do khối EU đảm nhiệm Các khối chức năng này có khả năng làm việc đồng thời và các bus sẽ liên tục sử dụng: trong khi EU lấy mã lệnh từ bộ đệm 6 byte để giải mã hoặc thực hiện các thao tác nội bộ thì BIU vẫn có thể đọc mã lệnh từ bộ nhớ chính rồi đặt chúng vào bộ nhớ đệm lệnh đã nói Bộ đệm lệnh này làm việc theo kiểu “ vào trước - ra trước “ (first in-first out, FIFO ), nghĩa là byte nào được cất vào đệm trước sẽ được lấy ra xử lý trước Nếu có sự vào/ra liên tục của dòng mã lệnh trong bộ đệm này thì có nghĩa là có sự phối hợp hoạt động hiệu quả giữa hai khối EU và BIU theo cơ chế xử lý xen kẽ liên tục dòng mã lệnh để làm tăng tốc độ xử lý tổng thể
- Các thanh ghi:
Trong bộ vi xử lý 8086 ta còn thấy có các thanh ghi 16 bit chia thành 4 nhóm chính Ta sẽ lần lượt giới thiệu các thanh ghi nói trên cùng chức năng chính của chúng
Trang 208 bits cao (H) 8 bits thấp [L]
Nhóm này gồm có bốn thanh ghi đa năng 16 bit AX, BX, CX, DX Điều đặc biệt là khi cần chứa các dữ liệu 8 bit thì mỗi thanh ghi có thể tách ra thành hai thanh ghi 8 bit cao và thấp để làm việc độc lập, đó là các tập thanh ghi AH và AL, BH và BL,
CH và CL, DH và DL ( trong đó H chỉ phần cao, L chỉ phần thấp ) Mỗi thanh ghi có thể dùng một cách vạn năng để chứa các tập dữ liệu khác nhau nhưng cũng có công việc đặc biệt nhất định chỉ thao tác với một vài thanh ghi nào đó và chính vì vậy các thanh ghi thường được gán cho những cái tên đặc biệt rất có ý nghĩa
Trang 21AX ( accumulator, acc ): thanh chứa Các kết qủa của các thao tác thường được chứa ở đây ( kết quả của phép nhân, chia ) Nếu kết quả là 8 bit thì thanh ghi AL được coi là acc
BX ( base ): thanh ghi cơ sở thường chứa địa chỉ cơ sở
CX ( count ): bộ đếm CX thường được dùng để chứa số lần lặp trong trường hợp các lệnh LOOP ( lặp ), còn CL thường cho ta 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 BX tham gia các thao tác của phép nhân hoặc chia các số 16 bit DX thường dùng để chứa địa chỉ của các cổng trong các lệnh vào/ ra dữ liệu trực tiếp
+ Nhóm 2 (nhóm các thanh ghi con trỏ và chỉ số)
BP: con trỏ cơ sở ( base pointer ) BP luôn trỏ vào một dữ liệu nằm trong đoạn ngăn xếp SS Địa chỉ đầy đủ của một phần tử trong đoạn ngăn xếp ứng với SS:BP
SP: con trỏ ngăn xếp ( stack pointer ) SP luôn trỏ vào đỉnh hiện thời của ngăn xếp nằm trong đoạn ngăn xếp SS Địa chỉ đỉnh ngăn xếp ứng với SS:SP
SI: chỉ số gốc hay nguồn ( source index ) SI chỉ vào dữ liệu trong đoạn dữ liệu
DS mà địa chỉ cụ thể đầy đủ ứng với DS:SI
DI: chỉ số đích ( destination index ) DI chỉ vào dữ liệu trong đoạn dữ liệu DS mà
địa chỉ cụ thể đầy đủ ứng với DS:DI
Riêng 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 gốc
+ Nhóm 3 (nhóm các thanh ghi lệnh điều khiển và trạng thái
IP Instruction point
MSW Machina State Word
Trang 22- Thanh ghi IP: ( Instruction pointer ) con trỏ lệnh IP luôn trỏ vào lệnh tiếp theo sẽ
được thực hiện nằm trong đoạn mã CS Địa chỉ đầy đủ của lệnh tiếp theo này ứng với CS:IP
-Thanh ghi cờ F (Flag):
Đây là thanh ghi khá đặc biệt trong CPU, mỗi bit của nó được dùng để phản ánh một trạng thái nhất định của kết quả phép toán do ALU thực hiện hoặc một trạng thái hoạt động của EU Dựa vào các cờ này người lập trình có thể có các lệnh thích hợp tiếp theo cho bộ vi xử lý ( các lệnh nhảy có điều kiện ) Thanh ghi cờ gồm 16 bit nhưng người ta chỉ dùng hết 9 bit của nó để làm các bit cờ
Hình 2.3 Thanh ghi cờ Các cờ cụ thể:
CF ( carry flag ): cờ nhớ CF = 1 khi có nhớ hoặc muợn từ MSSP
PF ( parity flag ): cờ parity PF phản ánh tính chẵn lẻ ( parity ) của tổng số bit 1
có trong kết quả
AF ( auxilialyry carry flag ): cờ nhớ phụ rất có ý nghĩa khi ta làm việc với các
số BCD.AF = 1 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 )
ZF ( zero flag ): cờ rỗng ZF =1 khi kết quả = 0
SF ( sign flag ): cờ dấu SF = 1 khi kết quả âm
OF ( over flow flag ): cò tràn OF = 1 khi kết quả là một số bù 2 vượt qua ngoài giới hạn biểu diễn dành cho nó
Trên đây là 6 bit cờ trạng thái phản ánh các trạng thái khác nhau của kết sau một thao tác nào đó, trong đó 5 bit cờ đầu thuộc byte thấp của thanh cờ là các cờ giống như của
bộ vi xử lý 8 bit 8085 của Intel Chúng được lặp hoặc xoá tuỳ theo các điều kiện cụ thể sau các thao tác của ALU Ngoài ra, bộ vi xử lý 8086 còn có các cờ điều khiển sau đây ( các cờ này được lập hoặc xoá bằng các lệnh riêng ):
Trang 23TF ( trap flag ): cờ bẩy TF = 1 thì CPU làm việc ở chế độ chạy từng lệnh ( chế
độ này dùng khi cần tìm lỗi trong một chương trình )
IF ( interrupt enable flag ): cờ cho phép ngắt IF = 1 thì CPU cho phép các yêu cầu ngắt ( che được ) được tác động
DF ( direction flag ): cờ hướng DF = 1 khi CPU làm việc với chuổi ký tự theo thứ tự từ phải sang trái ( vì vậy D chính là cờ lùi )
-Thanh ghi cờ MSW (Machina State Word) thanh ghi từ mã trạng thái chương trình + Nhóm 4 (nhóm các thanh ghi đoạn, mảng)
- Chứa mã chương trình
- Chứa dữ liệu và kết quả không gian của chương trình
- Tạo ra một vùng nhớ đặc biệt gọi là ngăn xếp ( stack ) dùng vào việc 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ác thanh ghi đoạn 16 bit này chỉ ra địa chỉ đầu của bốn đoạn trong bộ nhớ, dung lượng lớn nhất của mỗi đoạn nhớ này là 64 Kbyte và tại một thời điểm nhất định bộ vi
xử lý chỉ làm việc được với bốn đoạn nhớ 64 Kbyte này Việc thay đổi giá trị của các thanh ghi đoạn làm cho các đoạn có thể dịch chuyển linh hoạt trong phạm vi không gian 1 Mbyte, vì vậy các đoạn này có thể nằm cách nhau khi thông tin cần lưu trong chúng đòi hỏi dung lượng đủ 64 Kbyte hoặc cũng có thể nằm trùm nhau do có những
đoạn không cần dùng hết đoạn dài 64 Kbyte và vì vậy những đoạn khác có thể bắt đầu nối tiếp ngay sau đó Điều này cũng cho phép ta truy nhập vào bất kỳ đoạn nhớ ( 64 Kbyte ) nào nằm trong toàn bộ không gian 1M
Nội dung các thanh ghi đoạn sẽ xác định địa chỉ của ô nhớ nằm ở đầu đoạn Địa chỉ này còn gọi là địa chỉ cơ sở Địa chỉ của các ô nhớ khác nằm trong đoạn tính được bằng cách cộng thêm vào địa chỉ cơ sở một giá trị gọi là địa chỉ lệch hay độ lệch ( Offset ), gọi như thế vì nó ứng với khoảng lệch của toạ độ một ô nhớ cụ thể nào đó so với ô đầu đoạn Độ lệch này được xác định bởi các thanh ghi 16 bit khác đóng vai trò
Trang 24nhớ nào đó trong một đoạn bất kỳ CPU 8086 phải dùng đến 2 thanh ghi 16 bit ( một thanh ghi để chứa địa chỉ cơ sở, còn thanh kia chứa độ lệch ) và từ nội dung của cặp thanh ghi đó tạo ra địa chỉ vật lý theo công thức sau: Địa chỉ vật lý = Thanh ghi đoạn x16 + Thanh ghi lệch
Việc dùng 2 thanh ghi để ghi nhớ thông tin về địa chỉ thực chất để tạo ra một loại địa chỉ gọi là địa chỉ logic và được ký hiệu như sau: Thanh ghi đoạn: Thanh ghi lệch hay segment: offset
Địa chỉ kiểu segment: offset là logic vì nó tồn tại dưới dạng giá trị của các thanh ghi cụ thể bên trong CPU và ghi cần thiết truy cập ô nhớ nào đó thì nó phải được đổi ra địa chỉ vật lý để rồi được đưa lên bus địa chỉ
b Sơ đồ chân của vi xử lý 8086
Hình 2.4 Sơ đồ chân của vi xử lý 8086
Vi xử lý 8086 có bus địa chỉ 20 bit, bus dữ liệu 16 bit, 3 chân nguồn và 17 chân dùng cho các chức năng điều khiển Tuy nhiên, ta có thể dùng kỹ thuật ghép kênh thời gian (time multiplexing) để cho phép một chân có nhiều chức năng nên các chân sẽ được phân ra:
- 16 chân dữliệu và địa chỉ(AD0 - AD15): các chân này sẽ là các đường địa
chỉ trong trạng thái T1 và dữliệu trong các trạng thái T2 – T4
Trang 25(maximum mode) Chế độ tối thiểu chỉ dùng cho các hệ thống CPU đơn giản còn chế
độ tối đa dùng cho các hệ thống phúc tạp hơn giao tiếp với các bộ nhớ và I/O riêng Các tín hiệu chung cho cả 2 chế độ tối đa và tối thiểu
AD15 - AD0 Bus dữ liệu / địa chỉ 2 chiều, 3 trạng thái A19/S6 - A16/S3 Địa chỉ / trạng thái Ngõ ra 3 trạng thái
TEST Chờ kiểm tra điều khiển Ngõ vào
READY Chờ trạng thái điều khiển Ngõ vào
NMI Yêu cầu ngắt không thể Ngõ vào
Bảng 2.1 Các tín hiệu chung cho cả 2 chế độ tối đa và tối thiểu
Các tín hiệu chỉ dùng cho chế độ tối thiểu
IO/ M Điều khiển I/O và bộ nhớ Ngõ ra 3 trạng thái
DT/ R Truyền / nhận dữ liệu Ngõ ra 3 trạng thái
DEN Cho phép dữ liệu Ngõ ra 3 trạng thái
BHE /S7 Đường trạng thái Ngõ ra 3 trạng thái
ALE Cho phép chốt địa chỉ Ngõ ra
Bảng 2.2 Các tín hiệu chỉ dùng cho chế độ tối thiểu Các tín hiệu chỉ dùng cho chế độ tối đa
RQ / GT1,0 Yêu cầu / cấp bus 2 chiều LOCK Điều khiển khóa ưu tiên bus Ngõ ra 3 trạng thái S2 - S0 Trạng thái chu kỳ bus Ngõ ra 3 trạng thái
QS1, QS2 Trạng thái hàng lệnh Ngõ ra
Bảng 2.3 Các tín hiệu chỉ dùng cho chế độ tối đa + Nguồn cung cấp và xung nhịp (VCC, GND và CLK):
Trang 26- Dòng điện cực đại là 340 mA (10 mA cho loại CMOS)
- Xung nhịp dùng dạng xung chữ nhật có chu kỳ với thời gian cạnh lên và xuống nhỏ hơn 10 ns
- Tiêu hao công suất và tần số xung nhịp cực đại:
+ Các chân trạng thái trong chế độ tối đa (S0, S1 và S2- status):
Các chân này sử dụng bởi bộ điều khiển bus 8288 để tạo các tín hiệu điều khiển + Các chân điều khiển bus (HOLD, HLDA, 0 /GT RQ , 1 /GT RQ ,LOCK): Chế độ tối thiểu:
- HOLD (giữ): ngõ vào tác động mức cao làm cho CPU hở mạch tất cả các bus của nó, tách CPU khỏi bộ nhớ của nó và I/O để cho phép thiết bị khác xử lý bus
hệ thống Quá trình này gọi là truy xuất bộ nhớ trực tiếp (DMA – Direct Memory Access)
- HLDA (Hold acknowledge): ghi nhận yêu cầu DMA đối với bộ điều khiển DMA
Chế độtối đa:
- 0 /GT RQ , 1 /GT RQ (Request / Grant): các chân này dùng cả hai chức năng vào (nhận yêu cầu) và ra (chấp nhận yêu cầu) Khi một thiết bị muốn lấy điều khiển của bus cục bộ, nó sẽ phát yêu cầu bằng cách đưa tín hiệu mức thấp vào chân yêu cầu Sau khi nhận yêu cầu, 8086 sẽ ở trạng thái HOLD và gửi tín hiệu chấp nhận ra chân này ở đây, chân 0 /GT RQ có độ ưu tiên cao hơn chân 1 /GT RQ
- LOCK: báo cho các thiết bị khác biết không thể lấy điều khiển của bus cục bộ + Các chân ngắt (NMI, INTR và INTA):
INTR và NMI là các yêu cầu ngắt khởi động bằng phần cứng, làm việc chính xác như các ngắt mềm NMI (Non-Maskable Interrupt) là ngõ vào tác động cạnh lên
NMI là ngắt không thể che được và luôn được phục vụ, thường dùng cho các sự kiện như hư nguồn hay các lỗi bộ nhớ INTR tác động mức cao và có thể bị che bằng cách xoá cờ IF trong thanh ghi cờ bằng lệnh CLI
Khi NMI tích cực, điều khiển sẽ được chuyển đến địa chỉ chứa trong các vị trí 00008h - 0000Bh Khi INTR tích cực, chu kỳ ghi nhận ngắt (interrupt acknowledge cycle) được thực hiện Quá trình này giống như chu kỳ đọc bộ nhớ ngoại trừ INTA tích cực thay vì RD Thiết bị tạo ngắt sẽ đặt một giá trị 8 bit vào data bus và chuyển điều khiển đến vị trí giá trị x4 đến giá trị x4 + 3
+ Chân RESET: hoạt động khi có xung tác động mức cao, dùng để khởi động lại (P Sau khi khởi động, (P sẽ đọc lệnh tại địa chỉ FFFF0h RESET được sử dụng khi
hệ thống có sự cố
+ Các chân điều khiển bus (READY, RD, ALE, DEN, DT/R, WR và IO/M)
Trang 27Trong các chân điều khiển này, chỉ có hai chân READY và RD làm việc ở chế
độ tối đa
- Chân READY: ngõ vào READY được lấy mẫu ở cạnh lên của xung nhịp T2 Nếu chân này ở mức thấp (không sẵn sàng) thì sẽ thêm vào một chu kỳ T3 nữa Chu trình này sẽ tiếp tục cho đến khi nào chân READY lên mức cao Ngõ vào này thường được điều khiển bởi thiết bị bộ nhớ chậm, không thể cung cấp dữ liệu kịp thời cho CPU
- Chân IO/M (IO/Memory – Xuất nhập /Bộ nhớ): xác định chu kỳ bus hiện hành làm việc với bộ nhớ (mức thấp) hay I/O (mức cao)
- Chân RD (Read): tín hiệu tác động mức thấp chỉ chiều truyền dữ liệu từ bộ nhớ hay I/O đến CPU Ta có thể kết hợp với tín hiệu này với IO/M để tạo các tín hiệu MEMR và IOR Nó được xuất ra trong trạng thái T2 và lấy đi trong trạng thái T4 Thiết bị bộ nhớ hay I/O giả sử là đã đặt byte hay word vào các đường dữ liệu khi RD trở về mức cao
- Chân WR (Write): tín hiệu này ngược với RD, nó xác định chiều truyền dữ liệu từ CPU đến I/O hay bộ nhớ
Hình 2.5 Tạo tín hiệu điều khiển bộ nhớ và I/O
- Chân ALE (Address Latch Enable - cho phép chốt địa chỉ): tín hiệu ra trên chân này có thể dùng để phân kênh các đường địa chỉ, dữ liệu và trạng thái trên AD0 -AD15, A16/S3 #A19/S6 và BHE/S7 Mọi chu kỳ bắt đầu với xung ALE trong trạng thái T1 Địa chỉ 20 bit được bảo đảm sẽ hợp lệ khi ALE chuyển từ mức cao xuống mức thấp
- Chân DEN (Data Enable – cho phép dữ liệu): tín hiệu này được dùng với DT/R để cho phép nối các bộ đệm hai chiều vào data bus Nó ngăn ngừa sự tranh chấp bus bằng cách cấm các bộ đệm dữ liệu cho đến trạng thái T2 khi các đường dữ liệu /
địa chỉ không còn lưu trữ địa chỉ của bộ nhớ hay I/O
Trang 28- Chân DT/R (Data transmit/receive – truyền/nhận dữliệu): dùng để điều khiển chiều của luồng dữ liệu qua các bộ đệm (nếu có) vào bus dữ liệu của hệ thống Khi ở mức thấp, nó chỉ thực hiện tác vụ đọc và khi ở mức cao nó chỉ thực hiện tác vụ ghi
Hình 2.6 Các chu kỳ đọc ghi của 8086 + Bus dữliệu (AD0 -AD15):
16 chân này tạo thành bus dữ liệu hai chiều Các đường này chỉ hợp lệ trong các trạng thái T2 -T4 Trong trạng thái T1, chúng giữ16 bit thấp của địa chỉ bộ nhớ hoặc I/O
+ Bus địa chỉ(AD0 - AD15 và AD16/S3 - AD19/S6):
20 chân này tương ứng với bus địa chỉ 20 bit và cho phép CPU truy xuất 1 MB
vị trí bộ nhớ Các đường ra này chỉ hợp lệ trong trạng thái T1, chuyển thành các đường dữ liệu và trạng thái trong trạng thái T2 -T4
+ Chọn chế độ MX:
Chân này dùng để chọn chế độ hoạt động cho 8086, nếu ở mức cao thì sẽ hoạt
động ở chế độ tối thiểu còn ở mức thấp thì sẽ hoạt động ở chế độ tối đa
Trang 29Bộ vi xử lý 8086 và cả họ 80x86 nói chung đều có 7 chế độ địa chỉ sau:
Chế độ địa chỉ thanh ghi ( register addressing mode )
Chế độ địa chỉ tức thì ( immediate addressing mode )
Chế độ địa chỉ trực tiếp ( direct addressing mode )
Chế độ địa chỉ gián tiếp qua thanh ghi ( register indirect addressing mode ) Chế độ địa chỉ tương đối cơ sở ( based indexed relative addressing mode ) Chế độ địa chỉ tương đối chỉ số ( indexed relative addressing mode )
Chế độ địa chỉ tương đối chỉ số cơ sở (based indexed relative addressing mode) Các chế độ địa chỉ này sẽ được giải thích thông qua các chế độ địa chỉ của lệnh MOV ( lệnh di chuyển ) và lệnh ADD ( lệnh cộng )
a Chế độ địa chỉ thanh ghi:
Trong chế độ địa chỉ này người ta dùng các thanh ghi bên trong CPU như là các toán hạng để chứa dữ liệu cần thao tác Vì vậy khi thực hiện lệnh có thể đạt tốc độ truy nhập cao hơn so với các lệnh có truy nhập trên bộ nhớ
Ví dụ: MOV BX, DX ; chuyển nội dung DX vào BX
b Chế độ địa chỉ tức thì:
Trong chế độ địa chỉ này toán hạng đích là một thanh ghi hay một ô nhớ, còn toán hạng nguồn là một hằng số và ta có thể tìm thấy toán hạng này ở ngay sau mã lệnh ( chính vì vậy chế độ địa chỉ này có tên là chế độ địa chỉ tức thì ) Ta có thể dùng chế độ địa chỉ này để nạp dữ liệu cần thao tác vào bất kỳ thanh ghi nào ( trừ các thanh ghi đoạn và thanh cờ ) hoặc vào bất kỳ ô nhớ nào trong đoạn dữ liệu DS
Ví dụ: MOV CL, 100 ; chuyển 100 vào CL
MOV ( BX ), 10 ; chỉ DS:BX Tại đây ( BX ) có nghĩa là ô nhớ có địa chỉ DS:BX
c Chế độ địa chỉ trực tiếp:
Trong chế độ địa chỉ này một toán hạng chứa địa chỉ lệnh của ô nhớ dùng chứa dữ liệu còn toán hạng kia chỉ có thể là thanh ghi mà không được là ô nhớ
Ví dụ:
MOV AL, ( 1234H ) ; chuuyển nội dung ô nhớ DS:1234 vào AL
MOV ( 4320H ), CX ; chuyển nội dung CX vào 2 ô nhớ liên tiếp DS:4320
Trang 30d Chế độ gián tiếp qua thanh ghi:
Trong chế độ địa chỉ này một toán hạng là một thanh ghi được sử dụng để chứa địa chỉ lệch của ô nhớ chứa dữ liệu, còn toán hạng kia chỉ có thể là thanh ghi mà không
được là ô nhớ
Ví dụ: MOV AL, ( BX ) ; chuyển nội dung ô nhớ có địa chỉ DS:BX vào AL
MOV ( SI ), CL ; chuyển nội dung CL vào ô nhớ có địa chỉ DS:SI
e Chế độ địa chỉ tương đối cơ sở :
Trong chế độ địa chỉ này các thanh ghi cơ sở như BX và BP và các hằng số biểu diễn các giá trị dịch chuyển ( displacement values ) được dùng để tính địa chỉ hiệu dụng của toán hạng trong các vùng nhớ DS và SS Sự có mặt của các giá trị dịch chuyển xác định tính tương đối ( so với cơ sở ) của địa chỉ
Ví dụ:
MOV CX, ( BX ) +10 ; chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ DS: (BX +
10 ) và ; DS: ( BX+10 ) vào CX
MOV CX, ( BX+10 ) ; một cách viết khác của lệnh trên
MOV CX, 10 ( BX ) ; một cách viết khác của lệnh đầu
MOV AL, ( BP ) +5 ; chuyển nội dung ô nhớ SS: ( BP+5 ) vào AL
f Chế độ địa chỉ tương đối chỉ số:
Trong chế độ địa chỉ này các thanh ghi chỉ số như SI và DI và các hằng số biểu diễn các giá trị dịch chuyển được dùng để tính địa chỉ hiệu dụng của toán hạng trong các vùng nhớ DS và SS Sự có mặt của các giá trị dịch chuyển xác định tính tương đối ( so với chỉ số) của địa chỉ
Ví dụ:
MOV CX, ( SI ) +10 ; chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ DS: ( DI + 10 )
và ; DS: ( DI+10 ) vào CX
g Chế độ địa chỉ tương đối chỉ số cơ sở:
Kết hợp hai chế độ địa chỉ chỉ số và cơ sở ta có chế độ địa chỉ chỉ số cơ sở Trong chế
độ địa chỉ này ta dùng cả thanh ghi cơ sở lẫn thanh ghi chỉ số để tính địa chỉ của toán hạng Nếu ta dùng thêm cả thành phần biểu diển sự dịch chuyển của địa chỉ thì ta có chế độ địa chỉ phức hợp nhất: chế độ địa chỉ tương đối chỉ số cơ sở Ta có thể thấy chế
độ địa chỉ này rất phù hợp cho việc địa chỉ hoá các mảng hai chiều
Ví dụ:
MOV AX, [ BX ] [SI ]+8 ; chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ ; DS:(BX+SI+8 ) và DS:(BX+SI+9 ) vào AX MOV AX, [BX+SI+8] ; một cách viết khác của lệnh trên
MOV CL, [BP+DI+5] ; chuyển nội dung ô nhớ SS:( BP+DI+5 ) vào CL
Trang 312.3 Cách mã hoá lệnh của bộ vi xử lý 80x86
Lệnh của bộ vi xử lý được ghi bằng các ký tự dưới dạng gợi nhớ ( memonic )
để người sử dụng nhận biết Đối với bản thân bộ vi xử lý thì lệnh cho nó được mã hoá dưới dạng các số 0 và 1 (còn gọi là mã máy ) vì đó là dạng biểu diễn thông tin duy nhất mà máy hiểu được Vì lệnh do bộ vi xử lý được cho dưới dạng mã nên sau khi nhận lệnh bộ vi xử lý phải thực hiện việc giải mã lệnh rồi sau đó mới thực hiện lênh
Một lệnh có thể có độ dài một vài byte tuỳ theo bộ vi xử lý Giả thiết một bộ
vi xử lý nào đó dùng 1 byte để chứa các mã lệnh ( opcode ) của nó Ta có thể tính được
số lệnh lớn nhất mà 1 byte này có thể mã hoá được là 256 lệnh Trong thực tế việc ghi lệnh không phải hoàn toàn đơn giản như vậy Việc mã hoá lệnh cho bộ vi xử lý là rất phức tạp và bị chi phối bởi nhiều yếu tố khác nữa
Đối với bộ vi xử lý 8086 một lệnh có thể có độ dài từ 1 đến 6 byte
Trên một câu lệnh của vi xử lý thường có: Tên lệnh, toán hạng, chú thích
Giữa tên lệnh và toán hạng cách nhau bởi một khoảng trắng, giữa các toán hạng cách nhau bởi một dấu phảy ( có một số lệnh không có dấu phảy: DIV,MUL )
Ví dụ: MOV AL,0Fh ;chuyển giá trị 0FH vào thanh ghi AL
Để tìm hiểu cách mã hoá lệnh, ta xét lệnh MOV toán hạng nguồn, toán hạng
đích dùng để chuyển dữ liệu giữa hai thanh ghi hay một ô nhớ và một thanh ghi Lệnh MOV mã hoá nhưsau:
Để mã hóa lệnh MOV, ta cần dùng ít nhất là 2 byte trong đó 6 bit dùng cho mã lệnh Bit D xác định hướng truyền của dữ liệu, D = 0 xác định dữ liệu sẽ đi từ thanh ghi cho bởi 3 bit Reg, D = 1 xác định dữ liệu sẽ đi đến thanh ghi cho bởi 3 bit Reg Bit W xác
định sẽ truyền 1 byte (W = 0) hay 1 word (W = 1)
3 bit Reg dùng để chọn thanh ghi sử dụng:
Bảng 2.4 Vùng thanh ghi
2 bit mod và 3 bit R/M (Register / Memory) dùng để xác định chế độ địa chỉcho các
Trang 32Bảng 2.5 Vùng chế độ Tổng quát, 8086/8088 có khoảng 300 tác vụ có thể có trong tập lệnh của nó Mỗi lệnh kéo dài từ 1 đến 6 byte Từ ví dụ trên, ta thấy mã lệnh có các vùng:
- Vùng mã lệnh (opcode): chứa mã lệnh của lệnh sẽthực thi
- Vùng thanh ghi (reg): chứa các thanh ghi sẽ thực hiện (bảng 2.1)
- Vùng chế độ (mod): (bảng 2.2)
00: toán hạng bộ nhớ trực tiếp nếu R/M = 110, ngược lại là toán hạng gián tiếp 01: toán hạng gián tiếp, độ dời 8 bit
10: toán hạng gián tiếp, độ dời 16 bit
11: sử dụng 2 thanh ghi, vùng R/M sẽ là vùng Reg
- Vùng thanh ghi / bộnhớR/M (Reg/Mem)
+ Tác động lên cờ: AF, CF, PF, SF, ZP/
Trang 33+ Ví dụ: MOV AL,100
ADD AL,10 ;AL=100+10=110
- Lệnh cộng có nhớ: ADC-Add With Carry ( cộng có nhớ )
+ Viết lệnh: ADC Đích, Gốc
+ Mô tả: Đích = Đích + Gốc + CF
Trong đó toán hạng đích và gốc có thể tìm được theo các chế độ địa chỉ khác nhau Nhưng phải chứa dữ liệu có cùng độ dài và không được phép đồng thời là 2 ô nhớ và cũng không được là thanh ghi đoạn Điều hạn chế này cũng áp dụng cho các lệnh khác có ngữ pháp tương tự
+ Cập nhật: AF, CF, OF, PF, SP, ZP
+ Ví dụ: MOV AL,100
ADD AL,200 ;AL=100+200-256=44 ( tràn, CF=1)
ADC AL,2 ;AL=44+2+1=47
- Lệnh trừ: SUB - Substract ( trừ hai toán hạng không dấu)
+ Viết lệnh : SUB Đích,Gốc
+ Mô tả : Đích = Đích - Gốc
Trong đó toán hạng đích và gốc có thể tìm được theo các chế độ địa chỉ khác nhau, nhưng phải chứa dữ liệu có cùng độ dài và không được phép đồng thời là 2 ô nhớ
và cũng không được là thanh ghi đoạn
+ Cập nhật : AF, CF, OF, PF, SF, ZP ( AF và PF chỉ liên quan đến 8 bit thấp) + Ví dụ: MOV AL,100
SUB AL,10 ;AL=100+10=90
- Lệnh trừ có mượn: SBB - Substract with Brrow (trừ có mượn)
+ Viết lệnh : SBB Đích,Gốc
+ Mô tả : Đích = Đích - Gốc - CF
Trong đó toán hạng đích và gốc có thể tìm được theo các chế độ địa chỉ khác nhau, nhưng phải chứa cùng một loại dữ liệu và không được phép đồng thời là 2 ô nhớ
và cũng không được là thanh ghi đoạn
+ Cập nhật : AF, CF, OF, PF, SF, ZP (AF và PF chỉ liên quan đến 8bit thấp) + Ví dụ : Các ví dụ sau đây có thể đại diện cho các chế độ địa chỉ có thể có trong lệnh trừ này cũng như một số các lệnh khác với ngữ pháp tương tự
SBB AL,74H ; AL AL - 47 - CF SBB CL,BL ; CL CL - BL - CF
SBB DL,[SI] ; DL DL - {DS:SI} - CF
- Lệnh nhân: MUL - Multiply Unisigned Byte or Word (nhân số không dấu)
Trang 34Trong đó toán hạng Gốc là số nhân và có thể tìm được theo các chế độ địa chỉ khác nhau
+ Mô tả : tuỳ theo độ dài của toán hạng Gốc ta có 2 trường hợp tổ chức phép nhân, chỗ để ngầm định cho số bị nhân và kết quả :
Nếu Gốc là số 8 bit : ALGốc
Số bị nhân phải là số 8 bit để trong AL
Sau khi nhân : AX tích
Nếu Gốc là số 16 bit : AXGốc
Số bị nhân phải là số 16 bit để trong AX
Sau khi nhân : DXAX tích
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
Như vậy các cờ CF và OF sẽ báo cho ta biết có thể bỏ đi bao nhiêu số 0 trong kết quả
+ Ví dụ :
MOV AL,10 MUL 100 ;AX=1000 ;AL=low(1000); AH=high(1000)
Nếu ta cần nhân một số 8 bit với một số 16 bit , ta để số 16 bit tại Gốc và số 8 bit ở AL Số 8 bit này ở AL cần phải được mở rộng sang AH bằng cách gán AH=0 để làm cho số bị nhân nằm trong AX Sau cùng chỉ việc dùng lệnh MUL Gốc và kết qủa
có trong cặp DXAX
+ Cập nhật : CF, OF Không xác định : AF, PF, SF, ZP
- Lệnh chia số không dấu: DIV - Unsingned Divide ( chia 2 số không có dấu )
+ Viết lệnh: DIV Gốc Trong đó toán hạng Gốc là số chia và có thể tìm được theo các chế độ địa chỉ khác nhau
+ Mô tả: Tuỳ theo độ dài của toán hạng gốc ta có 2 trường hợp bố trí phép chia Các chỗ để ngầm định cho số bị chia và kết quả:
Nếu Gốc là số 8 bit: AX/Gốc Số bị chia phải là số không dấu 16 bit để trong AX
Nếu Gốc là số 16 bit: DXAX/Gốc Số bị chia phải là số không dấu 32 bit để trong cặp thanh ghi DXAX
Nếu thương không phải là số nguyên nó được làm tròn theo số nguyên sát
đuôi
Nếu Gốc = 0 hoặc thương thu được lớn hơn FFH hoặc FFFFH ( tuỳ theo độ dài của toán hạng Gốc ) thì 8086 thực hiện lệnh ngắt INT 0
+ Không xác định: AF, CF, OF, PF, SF, ZP
Trang 35+ Ví dụ:
MOV AX,125 MOV BL,10
- Lệnh tăng: Inc-Increment Destination Register or Memory ( Tăng toán hạng
+ Cập nhật: AF, OF, PF, SF, ZP Không tác động: CF/
2.4.2 Nhóm lệnh logic:
Các lệnh tiêu biểu như: AND, OR, NOT, XOR, ROR, ROL, RCL, RCR
- Lệnh và: AND - And Corresponding Bits of Two Operands ( Và 2 toán hạng ) + Viết lệnh: AND Đích, Gốc
Xoá: CF, OF
+ Cập nhật: PF, SF, ZP, PF chỉ có nghĩa khi toán hạng là 8 bit Không xác
định: AF
Ví dụ:
Trang 36MOV AL,10101010B
AND AL,11110000B ;AL=00001010B
- Lệnh hoặc: OR - Logically Or Corresponding Bits of Two Operands (hoặc hai toán hạng)
+ Viết lệnh : OR Đích,Gốc
+ Mô tả : Đích Đích hoặc Gốc
Trong đó toán hạng đích và gốc có thể tìm được theo các địa chỉ khác nhau, nhưng phải chứa dữ liệu cùng độ dài và không được phép đồng thời là 2 ô nhớ và cũng không được là thanh ghi đoạn Phép OR thường dùng để lập một vài bit nào đó của toán hạng bằng cách cộng loogic toán hạng đó với toán hạng tức thời có các bit 1 tại các vị trí tương ứng cần thiết lập
- Lệnh phủ định: NOT - Invert Each Bit of an Operand ( lấy bù của một toán hạng,
đảo bit của một toán hạng)
+ Cập nhật : PF, SF, ZP, PF chỉ có nghĩa khi toán hạng là 8 bit Không xác định :
AF
Trang 37+ Ví dụ :
MOV AL,10001100B MOV BL,10000010B XOR AL,BL ; AL=00001110B
- Lệnh xoay trái: ROL - Rotate All Bits to the Left (Quay vòng sang trái)
+ Viết lệnh : RCR Đích,CL
Trong đó toán hạng đích có thể tìm được theo các chế độ địa chỉ khác nhau + Mô tả :
CF MSB LSB
Lệnh này dùng để quay vòng toán hạng sang trái, MSB sẽ được đưa qua cờ CF
và LSB CL phải được chứa sẵn số lần quay mong muốn Trong trường hợp quay một lần có thể viết trực tiếp : ROL Đích,1
+ Ví dụ:
MOV AL,10100001B MOV CL,2
ROL AL,CL ;AL=10000110b, CF=0 (Từ các bộ vi xử lý thế hệ sau như 80186, 80286 thì có thể viết trực tiếp kiểu này với
số lần quay lớn nhất là 32) Ta nhận thấy số lần của quay là 9 thì kết quả không thay
đổi vì cặp CF và toán hạng quay tròn đúng một vòng
- Lệnh xoay trái qua cờ nhớ: RCL - Rotate through CF to the left (Quay trái thông qua cờ nhớ)
Trang 38Sau lệnh RCL cờ CF mang giá trị cũ của MSB, còn cờ OF 1 nếu sau khi quay một lần mà bit MSB bị thay đổi so với trước khi quay Cờ OF sẽ không được xác định sau nhiều lần quay
+ Ví dụ:
MOV AL,10100001B MOV CL,2
STC ;lệnh đặt cờ CF=1 RCL AL,CL ;AL=10000111B, CF=0
- Lệnh xoay phải: ROR - Rotate All Bits to the right (Quay vòng sang phải)
+ Viết lệnh : ROR Đích,CL
Trong đó toán hạng đích có thể tìm được theo các chế độ địa chỉ khác nhau + Mô tả :
MSB LSB CF
Lệnh này dùng để quay vòng toán hạng sang phải, LSB sẽ được đưa qua cờ CF
và MSB CL phải được chứa sẵn số lần quay mong muốn Trong trường hợp quay một lần có thể viết trực tiếp :
ROR Đích,1
+ Tác động vào cờ : chỉ có CF và OF bị ảnh hưởng
Sau lệnh ROR cờ CF mang giá trị cũ của LSB, còn cờ OF 1 nếu sau khi quay một lần mà bit MSB bị thay đổi so với trước khi quay Cờ OF sẽ không được xác định sau nhiều lần quay Lệnh này thường 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
- Lệnh xoay phải qua cờ nhớ:
RCR - Rotate though CF to the right (quay phải thông qua cờ nhớ)
Trang 39+ Tác động vào cờ : chỉ có CF và OF bị ảnh hưởng
Sau lệnh RCR cờ CF mang giá trị cũ của LSB, còn cờ OF 1 nếu sau khi quay một lần mà bit MSB bị thay đổi so với trước khi quay Cờ OF sẽ không được xác định sau nhiều lần quay
+ Lệnh này không tác động đến các cờ
+ Ví dụ :
MOV AL, 74H ; AL 74 MOV CL,BL ; CL BL MOV DL,[SI] ; DL {DS:SI}
MOV AL,Table [BX] ; AL {DS:(Table+BX)}
Một số lệnh di chuyển khác như: MOVS/MOVSB/MOVSW - Move String Byte
or String Word (Chuyển 1 phần tử của 1 chuỗi sang một chuỗi khác)
- Lệnh nạp địa chỉ hiệu dụng vào thanh ghi: LEA - Load Effective Address (Nạp địa chỉ hiệu dụng vào thanh ghi)
+ Viết lệnh : LEA Đích,Gốc
Trong đó :
Đích thường là một trong các thanh ghi : BX, CX, DX, BP, SI, DI
Gốc là tên biến trong đoạn dữ liệu ( DS ) được chỉ rõ trong lệnh hoặc ô nhớ cụ thể
+ Mô tả : Đích Địa chỉ lệch của Gốc, hoặc
Đích Địa chỉ hiệu dụng của Gốc
Đây là lệnh để tính địa chỉ lệch của biến hoặc địa chỉ của ô nhớ chọn làm gốc rồi nạp vào thanh ghi đã chọn
+ Lệnh này không tác động đến các cờ
+ Ví dụ :
LEA DX, MSG ; nạp địa chỉ lệch của bản tin ; MSG vào DX
Trang 40LEA CX, [BX] [DI] ; nạp vào CX địa chỉ hiệu dụng ; do BX và DI chỉ ra : EA =BX+DI
- Lệnh dịch ( lấy ) một byte từ bảng trong bộ nhớ: XLATB - Translate a byte in AL (
Đổi nội dung AL theo bảng cho trước)
0123H 0123H
+ Lệnh này không tác động đến các cờ
-Lệnh vào từ cổng: In- Input Data From a Port (đọc dữ liệu từ cổng vào thanh ACC )
+ Viết lệnh: In ACC, Port
+ Mô tả: ACC = {Port}
Trong đó {Port } là dữ liệu của cổng có địa chỉ là Port Port là địa chỉ 8 bit của cổng, nó có thể có các giá trị trong khoảng 00H đến FFH Như vậy ta có thể có các khả năng sau:
Nếu ACC là AL thì dữ liệu 8 bit được đưa vào từ cổng Port
Nếu ACC là AX thì dữ liệu 16 bit được đưa vào từ cổng Port và cổng Port+1
Có một cách khác để biểu diển địa chỉ cổng là thông qua thanh ghi DX Khi dùng thanh ghi DX để chứa địa chỉ cổng ta sẽ có khả năng địa chỉ cổng hoá mềm dẽo hơn Lúc này địa chỉ cổng nằm trong dải 0000H FFFFH và ta phải viết lệnh theo dạng: