26 0 5MB
HỌC VIỆN KỸ THUẬT MẬT MÃ
KỸ THUẬT VI XỬ LÝ
8/15/2019
1
TÀI LIỆU MÔN HỌC [1] Nilesh B.Bahadure, Microprocessors The 8086/8088, 80186/80286, 80386/80486 and the Pentium Family, 2010. [2] Th.S Đặng Hùng Việt, Giáo trình Kỹ thuật vi xử lý, Học viện KTMM, 2016. [3] TS Hồ Khánh Lâm, Giáo trình Kỹ thuật vi xử lý, Học viện Công nghệ BCVT (tập 1,2), 2007. [4] Văn Thế Minh. Kỹ thuật vi xử lý. NXB Giáo dục, 1999.
8/15/2019
2
NỘI DUNG MÔN HỌC
Chương 1: Tổng quan về bộ vi xử lý và hệ vi xử lý Chương 2: Bộ vi xử lý Intel 8086 Chương 3: Ghép nối Vi xử lý với bộ nhớ và thiết bị ngoại vi Chương 4: Các phương pháp vào ra dữ liệu Bài tập, thực hành.
8/15/2019
3
CHƯƠNG 1 TỔNG QUAN VỀ BỘ VI XỬ LÝ VÀ HỆ VI XỬ LÝ 1.1. Bộ vi xử lý
1.2. Hệ vi xử lý
8/15/2019
4
1.1. BỘ VI XỬ LÝ 1.1.1. Khái niệm. Khái niệm: – Là một vi mạch logic chế tạo theo công nghệ LSI (Large scale integrated) cho đến VLSI (very large scale integrated) – Hoạt động dưới sự điều khiển của chương trình đặt trong bộ nhớ. – Bộ VXL là hạt nhân của hệ VXL, nắm quyền kiểm soát toàn bộ các thành phần có trong hệ thống. – Thực hiện các phép toán số học, logic, đưa ra các quyết định và thông tin với thế giới bên ngoài qua các cổng vào/ra dưới sự điều khiển của chương trình cài đặt trong bộ nhớ. 8/15/2019
5
1.1. BỘ VI XỬ LÝ 1.1.2. Lịch sử phát triển
8/15/2019
6
1.1. BỘ VI XỬ LÝ 1.1.2. Phân loại bộ vi xử lý – Bộ VXL đa năng: bao gồm tất cả các phần tử tính toán trên một chip (trừ bộ nhớ và các cổng vào ra – 8086/8088, 6800) – Bộ VXL on-chip: bao gồm cả bộ nhớ và các cổng vào ra
8/15/2019
7
1.1. BỘ VI XỬ LÝ 1.1.3. Công suất bộ vi xử lý Là khả năng xử lý dữ liệu bao gồm – Độ dài từ: 4, 8, 16, 32, 64 bit – Khả năng đánh địa chỉ – Tốc độ thực hiện lệnh MIPS (Millions of Instructions Per Second) = f*N/ (M+T) f là tần số, N số lượng ALU, M số lượng vi lệnh, T thời gian truy cập bộ nhớ 8/15/2019
8
1.1. BỘ VI XỬ LÝ 1.1.3. Kiến trúc chung của bộ vi xử lý
8/15/2019
9
1.2. HỆ VI XỬ LÝ 1.2.1. Kiến trúc phần cứng
8/15/2019
10
1.2. HỆ VI XỬ LÝ 1.2.2. Phần mềm Phần mềm là chương trình do người lập trình tạo ra để giải quyết nhiệm vụ bài toán đặt ra khi thiết kế hệ thống. Các chương trình này được đặt trong bộ nhớ ROM và RAM khi hệ thống hoạt động. Trong máy tính,phần mềm được phân lớp.
Các lớp trong là các chương trình quản lý, điều khiển, các dữ liệu cố định... làm nhiệm vụ trung gian giữ người và máy được gọi là hệ điều hành (HĐH). Các chương trình của HĐH thường khá lớn và được nạp một phần trong ROM, phần còn lại được chứa trong bộ nhớ ngoài và được nạp vào RAM mỗi khi khởi động máy. Các chương trình do người lập trình viết ở lớp ngoài để giải quyết một bài toán nào đó, khi thực hiện sẽ được HĐH nạp vào trong RAM ở vị trí theo sự phân bố của HĐH. Khi phần cứng thực hiện xong chương trình đó thì bài toán được giải. 8/15/2019
11
1.2. HỆ VI XỬ LÝ 1.2.3. Hoạt động của hệ vi xử lý Quá trình nhận lệnh: CPU nhận lệnh từ bộ nhớ trung tâm. Để nhận 1 byte lệnh, từ giá trị của thanh ghi địa chỉ lệnh, CPU tạo ra các bit địa chỉ đưa ra Bus địa chỉ xác định byte lệnh cần lấy vào. Sau đó CPU đưa các tín hiệu điều khiển đọc byte lệnh về CPU. Khi đó nội dung của các thanh ghi địa chỉ lệnh tự động tăng 1 đơn vị để chuẩn bị cho việc nhận byte lệnh tiếp theo. Quá trình giải mã lệnh: Byte đầu tiên của lệnh là byte mã lệnh. CPU giải mã byte mã lệnh này để xác định chức năng của lệnh. Nếu lệnh không cần toán hạng chuyển sang chu kỳ thực hiện lệnh. Nếu lệnh cần toán hạng, CPU xác định toán hạng cho lệnh. Quá trình thực hiện lệnh. – Nếu là lệnh dừng, thì CPU dừng quá trình làm việc cho tới khi Reset – Nếu không phải thì CPU thực hiện lệnh và gửi kết quả. Trong quá trình thực hiện lệnh, nếu là lệnh thao tác ngay trong bộ VXL thì CPU sẽ thực hiện lệnh, còn nếu là lệnh cần thao tác với bên ngoài thì CPU gửi tín hiệu địa chỉ và điều khiển để thực hiện. – Sau đó quá trình lại quay lại lệnh tiếp theo. Các quá trình nhận lệnh, giải mã lệnh và 8/15/2019 12 thực hiện lệnh có thể tiến hành tuần tự hay song song tuỳ theo cấu trúc từng bộ VXL
1.2. HỆ VI XỬ LÝ 1.2.4. Các bước thiết kế một hệ vi xử lý Bước 1: Phân tích chức năng nhiệm vụ của hệ vi xử lý cần thiết kế. Bước 2: Tổ chức phần cứng cho hệ vi xử lý cần thiết kế. Bước 3: Xây dựng phần mềm cho hệ vi xử lý cần thiết kế. Bước 4: Nạp chương trình cho hệ vi xử lý là hiệu chỉnh hệ thống. 8/15/2019
13
Nội dung cần nắm vững -Khái niệm, cấu trúc bộ vi xử lý và hệ vi xử lý -Phân biệt các khái niệm vi xử lý, vi điều khiển, chip…
8/15/2019
14
CHƯƠNG 2 BỘ VI XỬ LÝ INTEL 8086
8/15/2019
15
2.1. CÁC THÔNG SỐ CƠ BẢN Là bộ vi xử lý thuộc thế hệ thứ 3. Bộ vi xử lý 8086 xử lý dữ liệu 16 bit của Intel, các thông số cơ bản của 8086 như sau: Được đóng trong vỏ 40 chân Nguồn nuôi: chỉ một loại nguồn +5V Có khả năng xử lý dữ liệu 8 hay 16 bit. Cả bus dữ liệu bên trong và ngoài đều là 16 bit Bus địa chỉ 20 bit, bộ vi xử lý sử dụng cả 20 bit để địa chỉ hoá bộ nhớ, do vậy khả năng địa chỉ hoá tối đa là 1MB bộ nhớ. Với cổng vào/ra, bộ vi xử lý sử dụng 8 bit địa chỉ trong chế độ địa chỉ trực tiếp, và 16 bit địa chỉ trong chế độ địa chỉ gián tiếp. Có khả năng làm việc song song giữ đơn vị điều khiển bus (BIU) và đơn vị xử lý (EU). Có thể làm việc ở 2 chế độ: chế độ tối thiểu (MIN), chế độ mở rộng (MAX). 8/15/2019
16
2.2. ĐẶC ĐIỂM CHÂN VÀ TÍN HIỆU
8/15/2019
17
2.2. ĐẶC ĐIỂM CHÂN VÀ TÍN HIỆU
8/15/2019
18
2.2. ĐẶC ĐIỂM CHÂN VÀ TÍN HIỆU
8/15/2019
19
2.2. ĐẶC ĐIỂM CHÂN VÀ TÍN HIỆU
8/15/2019
20
2.2. ĐẶC ĐIỂM CHÂN VÀ TÍN HIỆU
8/15/2019
21
2.2. ĐẶC ĐIỂM CHÂN VÀ TÍN HIỆU
8/15/2019
22
2.2. ĐẶC ĐIỂM CHÂN VÀ TÍN HIỆU
8/15/2019
23
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.1. Sơ đồ
8/15/2019
24
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.2. Đơn vị giao tiếp bus (BIU) Chức năng: giao tiếp với các thành phần bên ngoài (bộ nhớ, cổng vào/ra) thông qua bus hệ thống. BIU thực hiện các chức năng: - Tạo địa chỉ vật lý từ địa chỉ logic của ô nhớ cần truy xuất; - Đọc mã lệnh từ bộ nhớ đưa tới hàng đợi lệnh; - Truy xuất bộ nhớ hay cổng vào/ra để đọc hoặc gửi dữ liệu.
8/15/2019
25
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.2. Đơn vị giao tiếp bus (BIU) Các khối: • Bộ cộng: tạo địa chỉ vật lý • 4 thanh ghi đoạn 16 bit CS, DS, SS, ES; một thanh ghi con trỏ lệnh 16 bit IP • Hàng đợi lệnh: dùng để lưu trữ tạm thời các byte lệnh sẽ được đưa vào thực hiện trong EU. Hàng đợi lệnh được cấu tạo theo kiểu FIFO. Hàng đợi lệnh của 8086 là 6 byte. • Khối điều khiển Bus: Khối điều khiển bus (bus control unit) thực hiện việc ghép nối giữa CPU với Bus hệ thống.
8/15/2019
26
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.2. Đơn vị giao tiếp bus (BIU)
8/15/2019
27
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.2. Đơn vị giao tiếp bus (BIU)
8/15/2019
28
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.2. Đơn vị giao tiếp bus (BIU)
8/15/2019
29
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.3. Đơn vị thực hiện lệnh EU (Executive Unit) Chức năng: EU nhận mã lệnh và dữ liệu từ BIU, thực thi lệnh. Kết quả thực thi lệnh được chuyển ra bộ nhớ hoặc cổng vào/ra thông qua BIU. Các khối: • Các thanh ghi tạm thời: lưu mã lệnh, dữ liệu tạm thời tạm thời. Mã lệnh sau đó được đưa tới bộ giả mã để xác định lệnh. • ALU: thực hiện các phép toán số học và logic • Điều khiển EU: điều khiển quá trình thực hiện lệnh. • 8 thanh ghi 16 bit: AX, BX, CX, DX, SP, BP, SI, DI và một thanh ghi cờ (FR) (chức năng của các thanh ghi này sẽ đề 8/15/2019 30 cập sau)
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.3. Executive Unit
8/15/2019
31
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.3. Executive Unit
8/15/2019
32
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.3. Executive Unit
8/15/2019
33
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.3. Executive Unit
8/15/2019
34
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.3. Executive Unit
8/15/2019
35
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.3. Executive Unit
8/15/2019
36
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.3. Executive Unit
Cờ trạng thái: có 6 cờ trạng thái là AF, CF, SF, PF, ZF, OF: phản ánh các trạng thái khác nhau của kết quả sau một thao tác nào đó. CF (Carry flag): cờ nhớ chính, CF=1 khi có nhớ hoặc mượn từ bit MSB. AF (Axuxiliary flag): cờ nhớ phụ, rất có ý nghĩa khi 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). SF (Sign flag): cờ dấu, SF=1 khi kết quả âm. PF (Parity flag): cờ chẵn lẻ, PF =1 khi số các số 1 ở kết quả phép toán là chẵn ZF (Zero flag): cờ Zero, ZF=1 khi kết quả phép toán bằng 0 OF (Over flag): cờ tràn, OF=1 khi kết quả là một số bù 2 vượt ra ngoài giới hạn biểu diễn dành cho nó. 8/15/2019
37
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.3. Executive Unit
Cờ điều khiển: có 3 cờ điều khiển là IF, TF, DF. Các cờ này được lập xóa bằng các lệnh riêng IF (Interrupt flag): cờ ngắt, khi IF=1 CPU cho phép các yêu cầu ngắt (che được) được tác động. TF (Trap flag): cờ bẫy, TF=1 thì CPU sẽ ở chế độ chạy từng lệnh, giúp cho việc hiệu chỉnh và gỡ rối chương trình. 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 qua trái (vì vậy DF chính là cờ lùi).
8/15/2019
38
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.3. Executive Unit
8/15/2019
39
2.3. KIẾN TRÚC BÊN TRONG 8086 2.3.4. Các thanh ghi Các thanh ghi đoạn: DS, CS, ES, SS (16 bit) Các thanh ghi đa năng: AX, BX, CX, DX (16 bit) Các thanh ghi con trỏ và chỉ số: IP, BP, SI, DI ( 16 bit) Thanh ghi cờ: 16 bit, nhưng có 9 bit được sử dụng D15 D14 D13 D12 D11 D10 D9 x x x x O D I
8/15/2019
D8 T
D7 S
D6 Z
D5 x
D4 A
D3 x
D2 P
D1 x
D0 C
40
2.4. TẬP LỆNH 2.4.1. Khái niệm về lệnh và cách mã hóa lệnh Byte 1
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Mã lệnh
Trợ giúp
Dữ liệu
Dữ liệu
Dữ liệu
Dữ liệu
Định dạng lệnh của 8086 Byte 1: chứa mã lệnh, xác định thao tác của lệnh. Đây là byte lệnh bắt buộc đối với tất cả các lệnh. Byte 2: Nếu lệnh cần phải xác định toán hạng thì có mặt byte 2 để giúp byte 1 xác định toán hạng cho lệnh. Các byte còn lại byte 3, 4, 5, 6: để chứa dữ liệu cho lệnh. Tuỳ theo dữ liệu cho trong lệnh mà sẽ xuất hiện các byte khi dịch. Nếu lệnh cần dữ liệu là byte, thì có mặt byte 3. Nếu là Word hay hằng địa chỉ, thì sẽ có thêm byte 3 và 4. Còn nếu cần phải thay đổi hằng địa chỉ cả offset và cả segment, thì cả byte 3, 4, 5, 6 đều có mặt. 8/15/2019
41
2.4. TẬP LỆNH 2.4.1. Khái niệm về lệnh và cách mã hóa lệnh (tiếp)
Byte 1 1
0
0
0
Opcode
1
Byte 2 0 D
W
mod
REG
M/R
Byte 3
Byte 4
DispL
DispH
Dữ liệu cho trong lệnh Địa chỉ trực tiếp Địa chỉ trực tiếp phần thấp phần cao
Dạng thức của lệnh MOV của 8086
8/15/2019
42
2.4. TẬP LỆNH 2.4.1. Khái niệm về lệnh và cách mã hóa lệnh (tiếp) Để mã hoá lệnh MOV cần ít nhất là 2 byte là byte 1 và byte 2. Các byte 3 và byte 4 cần thiết với những lệnh có dữ liệu hay địa chỉ được cho trong lệnh. Trong đó: – Mã lệnh (Opcode) gồm 6 bit đầu. Với lệnh MOV để di chuyển dữ liệu giữa thanh ghi thanh ghi hoặc thanh ghi ô nhớ, mã lệnh là 100010 (Đối với các thanh ghi đoạn thì điều này lại khác). – Trong các thao tác chuyển dữ liệu, một toán hạng bắt buộc phải là thanh ghi. Bộ vi xử lý dung 2 hoặc 3 bit để mã hoá các thanh ghi như ở bảng 2.1. – Bit D dùng để chỉ hướng đi của dữ liệu. Nếu D=1, dữ liệu đi đến thanh ghi cho bởi 3 bit của REG, D=0 thì dữ liệu đi từ thanh ghi cho bởi 3 bit của REG – Bit W chỉ kích thước toán hạng. W=0 toán hạng là byte, W=1 toán hạng là word. – Giá trị của 2 bit mod kết hợp với 3 bit R/M tạo ra 5 bit dùng để chỉ ra chế độ địa chỉ cho các toán hạng của lệnh cho trong bảng 2.2.
8/15/2019
43
2.4. TẬP LỆNH 2.4.1. Khái niệm về lệnh và cách mã hóa lệnh (tiếp) Thanh ghi
Mã
Thanh ghi đoạn
Mã
CS
01
W=1
W=0
AX
AL
000
DS
11
BX
BL
011
ES
00
CX
CL
001
SS
10
DX
DL
101
SP
BH
100
DI
AH
111
BP SI
CH DH
101 110
8/15/2019
44
2.4. TẬP LỆNH 2.4.1. Khái niệm về lệnh và cách mã hóa lệnh (tiếp) Phối hợp MOD và R/M để tạo ra các chế độ địa chỉ MOD
00
01
10
R/M
11 W=1
W=0 000 001 010 011 100 101 110
[BX]+[SI] [BX]+[DI] [BP]+[SI] [BP]+[DI] [SI] [DI] D16 (địa chỉ trực tiếp)
[BX]+[SI]+d8 [BX]+[DI]+d8 [BP]+[SI]+d8 [BP]+[DI]+d8 [SI]+d8 [DI]+d8 [BP]+d8
[BX]+[SI]+d16 [BX]+[DI]+d16 [BP]+[SI]+d16 [BP]+[DI]+d16 [SI]+d16 [DI]+d16 [BP]+d16
AL CL DL BL AH CH DH
AX CX DX BX SP BP SI
111
[BX]
[BX]+d8
[BX]+d16
BH
DI
8/15/2019
45
2.4. TẬP LỆNH 2.4.1. Khái niệm về lệnh và cách mã hóa lệnh (tiếp) Ví dụ 1: Xét lệnh MOV AL, BL
1
0 0 0 1 0 1 0 1
1 0
0 0 0 1 1
Mã hoá AL Opcode
BL Chuyển tới thanh ghi Chuyển 1 byte Ví dụ 2: Xét lệnh MOV AL, [BX]
1 0 0 1 1
0 1 0 1 0 0 0 0 0 1 1
Opcode Chuyển tới thanh ghi Chuyển 1 byte 8/15/2019
Mã hoá CL [BX] 46
2.4. TẬP LỆNH 2.4.2. Các chế độ địa chỉ của 8086
Chế độ địa chỉ thanh ghi Chế độ địa chỉ tức thì Chế độ địa chỉ trực tiếp Chế độ địa chỉ gián tiếp qua thanh ghi Chế độ địa chỉ tương đối chỉ số. Chế độ địa chỉ tương đối cơ sở Chế độ địa chỉ tương đối chỉ số, cơ sở
8/15/2019
47
2.4. TẬP LỆNH 2.4.2. Các chế độ địa chỉ của 8086
Chế độ địa chỉ thanh ghi MOV CL,BL ; chuyển nội dung của BL vào CL ADD AL, DL ; Cộng nội dung của AL và DL rồi ; đưa kết quả vào AL.
Chế độ địa chỉ tức thì MOV CL, 100 ; chuyển 100 vào thanh ghi CL MOV AX, A000h; chuyển A000h vào AX MOV DS, AX ; chuyển nội dung của AX, vào DS ; (không chuyển trực tiếp A000h vào DS) MOV [BX], 5 ; chuyển 5 vào ô nhớ có địa chỉ DS:BX Chú ý: không áp dụng với các thanh ghi đoạn và thanh ghi cờ Chế độ địa chỉ trực tiếp MOV AL, [1234h] MOV [4320h], CX 8/15/2019
48
2.4. TẬP LỆNH 2.4.2. Các chế độ địa chỉ của 8086 Chế độ địa chỉ gián tiếp qua thanh ghi MOV AX, [BX]
Chế độ địa chỉ tương đối cơ sở hay
MOV CX, [BX]+10 MOV CX, [BX+10]
Chế độ địa chỉ tương đối chỉ số. MOV AX, [SI]+10 hay
MOV AX, [SI+10]
Chế độ địa chỉ tương đối cơ sở chỉ số MOV AX, [BX][SI]+8 Hay MOV AX, [BX+SI+8] ; thanh ghi đoạn là DS MOV CL, [BP+DI+5] ; thanh ghi đoạn là SS 8/15/2019
49
2.4. TẬP LỆNH 2.4.2. Các chế độ địa chỉ của 8086 Bỏ ngầm định thanh ghi đoạn: Đó là những thanh ghi đoạn đã được ngầm định đối với những offset được cho trong lệnh khi xác định địa chỉ ô nhớ, được tổng kết trong bảng sau:
8/15/2019
50
2.4. TẬP LỆNH 2.4.2. Các chế độ địa chỉ của 8086 Chế độ địa chỉ Trực tiếp Gián tiếp qua thanh ghi
Tương đối cơ sở Tương đối chỉ số Tương đối chỉ số cơ sở
8/15/2019
Toán hạng [offset] [BX] [SI] [DI] [BX]+Disp [BP]+Disp [SI]+Disp [DI]+Disp [BX]+[DI]+Disp [BX]+[SI]+Disp [BP]+[DI]+Disp [BP]+[SI]+Disp
Thanh ghi ngầm định DS DS DS DS DS SS DS DS DS DS SS 51 SS
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 Các lệnh chuyển dữ liệu Các lệnh số học Các lệnh logic Các lệnh làm việc với xâu ký tự Các lệnh nhảy Các lệnh khác Lưu ý: Tất cả các lệnh thao tác với 2 toán hạng của 8086 thì các toán hạng phải có cùng độ dài dữ liệu. 8/15/2019
52
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 1. Các lệnh chuyển dữ liệu MOV Cú pháp: MOV dest, source Chức năng: chuyển giá trị từ toán hạng nguồn (source) vào toán hạng đích (dest) XCHG Cú pháp: XCHG dest, source Chức năng: đổi nội dung giữ toán hạng nguồn và toán hạng đích. Các toán hạng có thể là thanh ghi dữ liệu 8 hay 16 bit (không sử dụng thanh ghi đoạn) hoặc là ô nhớ được xác định theo các chế độ địa chỉ. Cả 2 toán hạng không đồng thời là 2 ô nhớ. XLAT Cú pháp: XLAT Chức năng: chuyển giá trị 8 bit từ ô nhớ vào thanh ghi AL. Địa chỉ của ô nhớ là DS:BX+AL
8/15/2019
53
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 1. Các lệnh chuyển dữ liệu PUSH Cú pháp: PUSH source Chức năng: Cất giá trị toán hạng nguồn vào đỉnh ngăn xếp SP = SP-2 (SP) source Chú ý: Trong đó, source là thanh ghi dữ liệu, thanh ghi đoạn (trừ CS) hoặc ô nhớ 16 bit tìm theo các chế độ địa chỉ khác nhau. PUSHF Cú pháp: PUSHF Chức năng: cất giá trị thanh ghi cờ vào đỉnh ngăn xếp. SP = SP-2 (SP) FR 8/15/2019
54
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 1.
Các lệnh chuyển dữ liệu
POP Cú pháp: POP dest Chức năng: chuyển giá trị từ đỉnh ngăn xếp vào toán hạng đích. dest (SP) SP=SP+2 Chú ý: Trong đó , dest là thanh ghi dữ liệu, thanh ghi đoạn (trừ CS) hoặc ô nhớ 16 bit tìm theo các chế độ địa chỉ khác nhau. POPF Cú pháp: POPF Chức năng: FR (SP) SP SP+2 8/15/2019
55
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 1. Các lệnh chuyển dữ liệu
IN Cú pháp:
IN Acc, port Hoặc IN Acc, DX
Chức năng: Acc (port) Acc (DX) OUT Cú pháp:
OUT port, Acc Hoặc OUT DX, Acc Chức năng: chuyển giá trị (8 bit hoặc 16 bit) từ thanh ghi AL hoặc AX ra cổng có địa chỉ là port hoặc địa chỉ là nội dung của DX
8/15/2019
56
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 2. Nhóm các lệnh số học ADD Cú pháp: ADD dest, source Chức năng: dest dest+source Trong đó, toán hạng dest và source 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, không được phép đồng thời là 2 ô nhớ và không là thanh ghi đoạn. Ảnh hưởng đến các cờ: AF, CF, OF, PF, SF, ZF
ADC Cú pháp: ADC dest, source Chức năng: dest dest+source+CF toán hạng dest và source giống trong lệnh ADD Ảnh hưởng đến các cờ: AF, CF, OF, PF, SF, ZF
8/15/2019
57
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 2. Nhóm các lệnh số học AAA Cú pháp: AAA Chức năng: hiệu chỉnh kết quả sau khi cộng 2 byte ra dạng ASCII. Lệnh này được thực hiện để hiệu chỉnh kết quả nằm ở thanh ghi AL sau khi thực hiện lệnh cộng. Việc hiệu chỉnh như sau: – Nếu giá trị của 4 bit thấp của thanh ghi AL>9 hoặc giá trị của cờ AF=1 thì tiến hành cộng 06h vào AL, sau đó cộng 1 vào giá trị của thanh ghi AH và dựng cờ AF lên 1. Tiếp đến đưa 4 bit cao của thanh ghi AL xuống 0. – Ngược lại, nếu giá trị của 4 bit thấp của thanh ghi AL 9 hoặc giá trị của cờ AF=1 thì tiến hành cộng 06h vào AL và dựng cờ AF lên 1. ⁻ Nếu giá trị của 4 bit cao của thanh ghi AL>9 hoặc cờ CF=1 thì tiến hành cộng 60h vào AL và dựng cờ CF=1.
Ví dụ: MOV AL, 28h ; AL=28h MOV BL, 68h ; BL=68h ADD AL, BL; AL=90h và AF=1 DAA ; AL=AL+06h, vì AF=1 và ta có AL=96 là kết quả đúng 8/15/2019
59
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 2. Nhóm các lệnh số học SUB Cú pháp: SUB dest, source Chức năng:destdest- source Trong đó, toán hạng dest và source 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, không được phép đồng thời là 2 ô nhớ và không là thanh ghi đoạn. Ảnh hưởng đến các cờ: AF, CF, OF, PF, SF, ZF (AF và PF chỉ liên quan đến 8 bit thấp)
SBB Cú pháp: SBB dest, source Chức năng:dest dest - source - CF Ảnh hưởng đến các cờ: AF, CF, OF, PF, SF, ZF (AF và PF chỉ liên quan đến 8 bit thấp). 8/15/2019
60
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 2. Nhóm các lệnh số học AAS Cú pháp: AAS Chức năng: hiệu chỉnh kết quả sau khi trừ 2 byte dạng ASCII. Lệnh này được thực hiện để hiệu chỉnh kết quả ở thanh ghi AL sau khi thực hiện lệnh trừ. ⁻ Nếu giá trị của 4 bit thấp của thanh ghi AL>9 hoặc giá trị của cờ AF=1 thì tiến hành trừ 06h vào AL, sau đó trừ giá trị của thanh ghi AH đi 1 và dựng cờ AF lên 1. Tiép đến đưa 4 bit cao của thanh ghi AL xuống 0 và đặt giá trị cờ CF=giá trị cờ AF. ⁻ Ngược lại, nếu giá trị của 4 bit thấp của thanh ghi AL9 hoặc AF=1 thì AL AL-06h ⁻ Nếu 4 bit cao của AL>9 hoặc CF=1 thì AL AL-60h
Ảnh hưởng đến các cờ: AF, CF, PF, SF, ZF Không xác định : OF 8/15/2019
62
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 2. Nhóm các lệnh số học INC Cú pháp:
INC dest
Chức năng:dest dest+1 Chú ý: nếu dest=FFh (hoặc FFFFh) thì dest+1=00h (hoặc 0000h) mà không ảnh hưởng tới cờ CF; Ảnh hưởng đến các cờ: AF, OF, PF, SF, ZF; Không tác động cờ: CF
DEC Cú pháp: Chức năng:
DEC dest dest dest-1
Chú ý: nếu dest=00h (hoặc 0000h) thì dest-1=FFh (hoặc FFFFh) mà không ảnh hưởng tới cờ CF; Ảnh hưởng đến các cờ: AF, OF, PF, SF, ZF ; Không tác động cờ: CF 8/15/2019
63
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 2. Nhóm các lệnh số học CMP Cú pháp: CMP dest, source Chức năng: So sánh giá trị của toán hạng dest với toán hạng source. Sau khi so sánh các toán hạng không bị thay đổi. Lệnh này thường được dùng để tạo cờ cho các lệnh nhảy có điều kiện, nếu: CF ZF Dest = source 0 1 Dest > source 0 0 Dest < source 1 0 Trong đó, toán hạng dest và source 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ớ. 8/15/2019
64
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 2. Nhóm các lệnh số học MUL Cú pháp: MUL source Chức năng: Nhân nội dung của thanh ghi AX hoặc AL với nội dung toán hạng source. Giá trị của 2 toán hạng đều là không dấu. Kết quả sẽ được cất như sau: • Nếu toán hạng source là 8 bit thì kết quả đặt trong thanh ghi AX • Nếu toán hạng source là 16 bit thì kết quả đặt trong cặp thanh ghi AXDX Trong đó, source là số nhân và có thể tìm được theo các chế độ địa chỉ khác nhau. 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ả – Ảnh hưởng đến các cờ: CF, OF; Không xác định: AF, PF, SF, ZF
Ví dụ: MOV AL,1 MOV BL, 128 MUL BL 8/15/2019
; kết quả đặt trong AX và AX=00000000 10000000; khi đó CF=OF=0 65
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 2. Nhóm các lệnh số học IMUL Cú pháp: IMUL source ;(source: xem lệnh MUL) Chức năng: Nhân nội dung của thanh ghi AX hoặc AL với nội dung toán hạng source. Giá trị của 2 toán hạng đều là dạng có dấu. Kết quả sẽ được cất như sau: Chú ý: nếu tích được thu nhỏ, không đủ lấp đầy hết được các chỗ dành cho nó thì các bit không dùng được thay bằng bit dấu. • Nếu byte cao (hoặc 16 bit cao) của 16 (hoặc 32) bit kết quả chứa các giá trị của dấu thì CF=OF=0. • Nếu byte cao (hoặc 16 bit cao) của 16 (hoặc 32) bit kết quả chứa một phần kết quả thì CF=OF=1 • Như vây, CF, OF sẽ báo cho ta biết kết quả cần độ dài thực chất là bao nhiêu • Ảnh hưởng đến các cờ: CF, OF ; Không xác định: AF, PF, SF, ZF
8/15/2019
66
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 2. Nhóm các lệnh số học IMUL Ví dụ 1: IMUL BL
; Nếu AL=1, BL=-128 thì ; có kết quả là: AX=11111111 10000000 ; khi đó CF=OF=0
ví dụ 2: IMUL BL
8/15/2019
; Nếu AL=2, BL=-128 thì ; có kết quả là: AX=11111111 00000000 ; khi đó CF=OF=1
67
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 2. Nhóm các lệnh số học DIV Cú pháp: DIV source Chức năng: chia không dấu giữa giá trị của thanh ghi AX hoặc AXDX cho nội dung của toán hạng source. Kết quả được cất như sau: – Nếu toán hạng bị chia là 16 bit thì thương sẽ đặt trong thanh ghi AL, phần dư đặt trong AH – Nếu toán hạng bị chia là 32 bit thì thương sẽ đặt trong thanh ghi AX, phần dư đặt trong DX Trong đó, source là số chia và có thể tìm được theo các chế độ địa chỉ khác nhau. Không xác định: AF, CF, OF, PF, SF, ZF 8/15/2019
68
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 3. Nhóm các lệnh logic
NOT Cú pháp: NOT dest Chức năng: dest dest Không tác động đến các cờ.
8/15/2019
69
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 3. Nhóm các lệnh logic
AND Cú pháp: AND dest, source Chức năng: dest dest AND source Xóa cờ : CF, OF Ảnh hưởng đến các cờ: PF, SF, ZF (PF chỉ có nghĩa khi toán hạnglà 8 bit) không xác định: AF
8/15/2019
70
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 3. Nhóm các lệnh logic OR Cú pháp: OR dest, source Chức năng: dest dest OR source Xóa cờ : CF, OF Ảnh hưởng đến các cờ: PF, SF, ZF (PF chỉ có nghĩa khi toán hạnglà 8 bit) không xác định: AF
XOR Cú pháp: XOR dest, source Chức năng: dest dest XOR source Xóa cờ : CF, OF Ảnh hưởng đến các cờ: PF, SF, ZF (PF chỉ có nghĩa khi toán hạnglà 8 bit) không xác định: AF 8/15/2019
71
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 4. Nhóm các lệnh dịch quay CF SHL
MSB
LSB 0
Cú pháp: SHL dest, count
Chú ý: nếu count =1 có thể đặt trực tiếp trong lệnh, nếu count >= 2 đặt thông qua CL •Ảnh hưởng đến các cờ: PF, SF, ZF (PF chỉ có nghĩa khi toán hạnglà 8 bit) •không xác định: AF
8/15/2019
72
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 4. Nhóm các lệnh dịch quay MSB
SHR
LSB
CF
LSB
CF
0
Cú pháp: SHR dest, count MSB
SAR Cú pháp: SAR dest, count 8/15/2019
73
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 3. Nhóm các lệnh logic
CF
LSB
MSB
ROL Cú pháp: ROL dest, count MSB
LSB
CF
ROR Cú pháp: ROR dest, count
8/15/2019
74
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 3. Nhóm các lệnh logic RCL
CF
LSB
MSB
Cú pháp: RCL dest, count MSB
LSB
CF
RCR Cú pháp: RCR dest, count
8/15/2019
75
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 5. Nhóm các lệnh làm việc với chuỗi ký tự MOVSB(W) Cú pháp: hoặc
MOVSB MOVSW
Chức năng: Chuyển một xâu ký tự theo từng byte (từng word) từ một vùng nhớ này (vùng nhớ nguồn) sang vùng nhớ khác (vung nhớ đích). DS:SI trỏ đến xâu ký tự nguồn và ES:DI trỏ đến xâu ký tự đích. Sau mỗi lần chuyển một byte (hoặc một word) thì giá trị của SI và DI tự động tăng lên 1 (hoặc 2) khi cờ hướng DF=0, hoặc giảm đi 1 (hoặc 2) khi cờ hướng DF=1. Không ảnh hưởng tới các cờ 8/15/2019
76
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 5. Nhóm các lệnh làm việc với chuỗi ký tự CMPSB(W) Cú pháp: hoặc
CMPSB CMPSW
Chức năng: so sánh 2 xâu ký tự theo từng byte (hay theo từng word) nằm ở 2 vùng nhớ. DS:SI và ES:DI trỏ đến 2 xâu ký tự. Sau mỗi lần so sánh từng byte (hoặc từng word) thì giá trị của SI và DI tự động tăng lên 1 (hoặc 2) khi cờ hướng DF=0, hoặc giảm đi 1 (hoặc 2) khi cờ hướng DF=1. Ảnh hưởng đến các cờ: AF, CF, OF, PF, SF, ZF 8/15/2019
77
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 5. Nhóm các lệnh làm việc với chuỗi ký tự SCASB(W) Cú pháp: SCASB hoặc SCASW Chức năng: so sánh nội dung theo từng byte (hoặc theo từng word) của vùng nhớ được trỏ bởi ES:DI với nội dung của thanh ghi AL(AX). Sau mỗi lần so sánh thì giá trị của DI tự động tăng lên 1 (hoặc 2) khi cờ hướng DF=0, hoặc giảm đi 1 (hoặc 2) khi cờ hướng DF=1.
Ảnh hưởng đến các cờ: AF, CF, OF, PF, SF, ZF
8/15/2019
78
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 5. Nhóm các lệnh làm việc với chuỗi ký tự LODSB Cú pháp: hoặc
LODSB LODSW
Chức năng: chuyển nội dung theo từng byt e (hoặc từng word) của vùng nhớ được trỏ bởi DS:SI vào thanh ghi AL (hoặc AX). Sau mỗi lần chuyển thì giá trị của SI tự động tăng lênh 1(hoặc 2) khi cờ hướng DF=0, hoặc giảm đi 1 (hoặc 2) khi cờ hướng DF=1. Không ảnh hưởng tới các cờ
8/15/2019
79
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 5. Nhóm các lệnh làm việc với chuỗi ký tự STOSB(W) Cú pháp:
STOSB hoặc STOSW
Chức năng: chuyển nội dung theo từng byte (hoặc từng word) của thanh ghi AL (hoặc AX) vào vùng nhớ được trỏ bởi ES:DI. Sau mỗi lần chuyển thì giá trị của DI tự động tăng lên 1 (hoặc 2) khi cờ hướng DF=0, hoặc giảm đi 1 (hoặc 2) khi cờ hướng DF=1. Không ảnh hưởng tới các cờ
8/15/2019
80
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 6. Nhóm các lệnh lặp tiền tố •Cú pháp: REP lệnh làm việc với xâu ký tự hoặc REPE/REPNE/REPZ/REPNZ lệnh làm việc với xâu ký tự
•Chức năng: tiền tố lặp REP thực hiện lệnh đứng sau nó một số lần cho đến khi CX=0. Sau mỗi lần thực hiện, nội dung thanh ghi CX giảm đi 1. Tiền tố này thường đứng trước các lệnh CMPSB(W), SCASB(W).
8/15/2019
81
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 7. Nhóm các lệnh nhảy Các lệnh trong nhóm này có thể tạm chia thành 4 nhóm nhỏ: • Nhóm các lệnh nhảy không điều kiện: CALL, RET, JMP • Nhóm các lệnh nhảy có điều kiện • Nhóm các lệnh lặp: LOOP, LOOPE/LOOPZ • Nhóm các lệnh ngắt mềm: INT, INTO, IRET.
8/15/2019
82
2.4. TẬP LỆNH 2.4.3. Tập lệnh của 8086 8. Các lệnh khác CLC : năng: xóa giá trị cờ CF về 0 CMC đảo giá trị hiện thời của cờ CF STC lập giá trị cờ CF lên 1 CLD xóa giá trị cờ DF về 0 STD đưa giá trị cờ DF lên 1 CLI xóa giá trị cờ IF về 0 STI đưa giá trị cờ IF lên 1 NOP lệnh không thực hiện gì cả. 8/15/2019
83
2.5. LẬP TRÌNH HỢP NGỮ 2.5.1. Cú pháp của một lệnh Tên
Toán tử
Chiều dài từ 1-31 ký tự, là chữ cái, số, các ký tự đặc biệt: ?, @, _, $, %. − Không bắt đầu bằng chữ số và không có dấu cách ở giữa. − Nếu là dấu chấm thì ở đầu. − Trường tên có thể có hay không tuỳ trường hợp cụ thể. − Một nhãn kết thúc bởi dấu (:) 8/15/2019
Toán hạng Chú giải Trường chú giải phải bắt đầu bằng dấu (;). Chương trình dịch sẽ bỏ qua khi gặp nó. −Toán tử thật: thao tác của lệnh và sẽ được chương trình dịch ra mã máy. −Toán tử giả (lệnh hướng dẫn biên dịch): không được dịch ra mã máy mà chỉ báo cho chương trình biên dịch làm một việc gì đó.
− Toán tử thật, trường toán hạng chứa các dữ liệu được thao tác trong lệnh. − Toán tử giả: trường này chứa các thông tin cho quá trình biên dịch 84
2.5. LẬP TRÌNH HỢP NGỮ 2.5.2. Dữ liệu cho chương trình 3.2.2.1. Dữ liệu kiểu số Ví dụ: 0101B ; số hệ 2 1234 ; số hệ 10 0ABCDh ; số hệ 16
3.2.2.2. Dữ liệu kiểu ký tự Được đặt trong cặp dấu trích dẫn đơn hay kép, hoặc dùng trực tiếp mã ASCII Ví dụ: “abc” Hoặc ‘abc’ Hoặc 61h, 62h, 63h 8/15/2019
85
2.5. LẬP TRÌNH HỢP NGỮ 2.5.3. Biến và hằng 2.5.3.1. Khai báo biến
Toán tử giả DB DW DD Biến kiểu byte: Ví dụ: B1 B2 Biến kiểu word: Ví dụ: W1 8/15/2019
Biểu diễn Định nghĩa biến kiểu byte Định nghĩa biến kiểu từ Định nghĩa biến kiểu từ kép Tên_biến DB giá_trị_khởi_đầu DB 5 DB ? Tên_biến DW giá_trị_khởi_đầu DW 30 86
2.5. LẬP TRÌNH HỢP NGỮ 2.5.3. Biến và hằng 2.5.3.1. Khai báo biến Biến mảng: các phần tử cùng loại byte hoặc từ. Ví dụ: M1 DB 0Ah, 0Bh, 0Ch Khi muốn định nghĩa các phần tử có cùng một giá trị khởi đầu thì có thể dùng toán tử DUP như sau: Repeat_count DUP(value) Ví dụ: M2 DB 10 DUP(0) M3 DB 10 DUP(?) M4 DB 4, 5, 6, 7, 8, 9 M5 DB 0,1,2 DUP(3,2 DUP(5),6) 8/15/2019
9 8 7 6 5 4
M4
87
2.5. LẬP TRÌNH HỢP NGỮ 2.5.3. Biến và hằng 2.5.3.2. Khai báo biến
Biến kiểu xâu ký tự : Là trường hợp đặc biệt của biến mảng, trong đó các phần tử của mảng là các ký tự. Ví dụ: S1 DB ‘abc’ ; tương đương với S2 DB 61h, 62h, 63h ; hoặc S3 DB ‘a’, 62h, 63h 2.3.3.2. Khai báo hằng Tên_hằng
EQU
LF Chao
0Ah ‘Hello’
hằng_số
Ví dụ:
8/15/2019
EQU EQU
88
2.5. LẬP TRÌNH HỢP NGỮ 2.5.4. Khung chương trình hợp ngữ (trong chế độ đơn giản) Khai báo quy mô bộ nhớ Cú pháp: .MODEL
kiểu_bộ_nhớ
Kiểu bộ nhớ TINY
Mô tả - Cả mã lệnh và dữ liệu nằm trong một đoạn.
SMALL
- Hỗ trợ một đoạn mã lệnh và một đoạn dữ liệu. - Mã lệnh và dữ liệu đều là NEAR - Hỗ trợ cho nhiều đoạn mã lệnh, một đoạn dữ liệu. - Mã lệnh là FAR, dữ liệu là NEAR - Hỗ trợ cho một đoạn mã lệnh, nhiều đoạn dữ liệu. - Mã lệnh là NEAR, dữ liệu là FAR - Hỗ trợ cho nhiều đoạn mã lệnh, nhiều đoạn dữ liệu. - Mã lệnh là FAR, dữ liệu là FAR - Không đoạn nhớ nào lớn hơn 64KB - Hỗ trợ cho nhiều đoạn mã lệnh, nhiều đoạn dữ liệu. - Mã lệnh là FAR, dữ liệu là FAR - Đoạn nhớ có thể lớn hơn 64KB (do người lập trình viết lệnh)
MEDIUM COMPACT LARGE
HUGE 8/15/2019
89
2.5. LẬP TRÌNH HỢP NGỮ 2.5.4. Khung chương trình hợp ngữ (trong chế độ đơn giản) Khai báo đoạn ngăn xếp (Stack segment) Cú pháp:
Ví dụ:
.STACK kích_thước .STACK 100
Khái báo đoạn dữ liệu (Data segment) Cú pháp: .DATA ; Khai báo và gán giá trị cho các biến và định nghĩa hằng Ví dụ: .DATA Chao CR LF
Khai báo đoạn mã Cú pháp: .CODE 8/15/2019
DB DB DB
‘Hello!’ 13 10
tên 90
2.5. LẬP TRÌNH HỢP NGỮ 2.5.4. Khung chương trình hợp ngữ (trong chế độ đơn giản)
Khai báo đoạn mã Cú pháp: .CODE
tên
“Tên”: ở đây là tên một đoạn. Khi dùng kiểu SMALL thì không cần phải khai báo tên
Tên_CTC Proc ; các lệnh của thân chương trình chính CALL tên_ctc : Tên_CTC Endp ; các lệnh của chương trình con RET Tên_ctc Endp 8/15/2019
91
2.5. LẬP TRÌNH HỢP NGỮ 2.5.4. Khung chương trình hợp ngữ (trong chế độ đơn giản) Khung của CT hợp ngữ để dịch ra file có đuôi .EXE .MODEL .STACK .DATA
SMALL 100 ; các định nghĩa biến và hằng để ở đây
.CODE
MAIN PROC ; khởi đầu cho DS MOV AX, @data MOV DS, AX ; Các lệnh của chương trình chính ; Trở về DOS MOV AH, 4Ch INT 21h MAIN ENDP ; các chương trình con (nếu có) để ở đây END MAIN 8/15/2019
92
2.5. LẬP TRÌNH HỢP NGỮ 2.5.4. Khung chương trình hợp ngữ (trong chế độ đơn giản)
Khung chương trình hợp ngữ để dịch ra file có đuôi .COM .MODEL Small .CODE ORG 100h START: JMP CONTINUE ; các định nghĩa cho biến và hằng để ở đây CONTINUE: MAIN PROC ; các lệnh của chương trình chính để ở đây INT 20h ; trở về DOS MAIN ENDP ; các chương trình con (nếu có) để ở đây END START 8/15/2019
93
2.5. LẬP TRÌNH HỢP NGỮ 2.5.4. Khung chương trình hợp ngữ (trong chế độ đơn giản) Phân bố bộ nhớ cho chương trình .COM Địa chỉ lệch 0000h
Đoạn đầu chương trình (PSP)
0100h
JMP CONTINUE
IP
Dữ liệu nằm ở đây CONTINUE: (chiều tiến của mã và dữ liệu)
FFFFh
(chiều tiến của ngăn xếp)
SP
File chương trình .COM trong bộ nhớ 8/15/2019
94
95/Chapter
BÀI TẬP 1. Cho 100 ô nhớ có địa chỉ đầu là 12345h. Viết chương trình tim MIN Sắp xếp nội dung 100 ô nhớ đó theo thứ tự tăng dần 2. Viết chương trình nhận từng byte dữ liệu từ cổng có địa chỉ 10h và gửi ra cổng có địa chỉ 20h Cho tới khi gặp byte dữ liệu =0 thì dừng Cho tới khi gặp 2 byte dữ liệu liên tiếp = 0 thì dừng. 3. Viết chương trình nhận 1 byte dữ liệu từ cổng có địa chỉ 10h và kiểm tra bit D7. Nếu D7=1 thì gửi nội dung ô nhớ có địa chỉ 1000Ah ra cổng có địa chỉ 20h Nếu D7=0 thì gửi nội dung ô nhớ có địa chỉ 1000Bh ra cổng có địa chỉ 30h
96/Chapter
BÀI TẬP 1. Viết chương trình assembly nhập vào từ bàn phím 5 số (có một chữ số). Hiển thị lên màn hình giá trị MIN. 2. Viết chương trình assembly nhập vào từ bàn phím các số (có một chữ số) cho tới khi nhấn phím ESC thì dừng. Hiển thị lên màn hình giá trị MAX 3. Viết chương trình assembly nhập vào từ bàn phím 2 số (có một chữ số, tổng nhỏ hơn 10). Tính tổng và hiển thị kết quả lên màn hình. 4. Viết chương trình assembly nhập vào từ bàn phím 2 số (có một chữ số). Tính tổng và hiển thị kết quả lên màn hình.
97/Chapter
BÀI TẬP 5. Viết chương trình nhập vào từ bàn phím 5 chữ cái thường a, b, c, d, e.
Hiển thị lên màn hình các chữ cái hoa tương ứng. Hiển thị lên màn hình theo thứ tự ngược lại.
6. Viết chương trình nhập vào bàn phím các số (có một chữ số) cho tới khi nhấn phím ESC thì dừng. Hiển thị lên màn hình theo thứ tự tăng dần. 7. Viết chương trình nhập vào từ bàn phím một số có độ dài 2 byte. Hiển thị lên màn hình mã nhị phân tương ứng.
CHƯƠNG 3
GHÉP NỐI VI XỬ LÝ VỚI BỘ NHỚ VÀ THIẾT BỊ NGOẠI VI
8/15/2019
98
Chương 3: GHÉP NỐI 8086 VỚI BỘ NHỚ VÀ THIẾT BỊ NGOẠI VI
8/15/2019
99
3.1. CÁC TÍN HIỆU CỦA 8086 VÀ CÁC MẠCH PHỤ TRỢ 8284, 8288 3.1.1. Các tín hiệu của 8086
8/15/2019
100
3.1.1. CÁC TÍN HIỆU CỦA 8086 AD0-AD15: ALE =1: 16 chân địa chỉ cho bộ nhớ hoặc I/O ALE=0: 16 đường dữ liệu A19/S6-A16/S3 4 bit địa chỉ cao S4 S3 4 bit trạng thái: 0 0 • S6 luôn bằng 1 • S5: trạng thái của IF • S4, S3: bit trạng thái về thanh ghi đoạn • đang truy cập
READY: input pin, 0 => vi xử lý vào trạng thái đợi 1: has no effect
ES
0
1
SS
1
0
CS or No
1
1
DS
101/Chapter
3.1.1. CÁC TÍN HIỆU CỦA 8086 INTR TEST nếu =0, CPU ở trạng thái đợi và thực hiện lệnh NOP =1, lệnh WAIT đợi đến khi TEST=0
NMI RESET MN/MX BHE/S7 0: cho phép truy cập byte cao dữ liệu Trạng thái S7 luôn bằng 1
RD
Các chân ở chế độ min M/IO WR
102/Chapter
3.1.1. CÁC TÍN HIỆU CỦA 8086 (tiếp) Các chân ở chế độ min INTA: interrupt acknowledge ALE: address latch enable DT/R: data transmit/receive 1: bus dữ liệu đang truyền dữ liệu đi 0: bus dữ liệu đang nhận dữ liệu DEN: Data enable HOLD HLDA (Hold Acknowledge)
103/Chapter
3.1.1. CÁC TÍN HIỆU CỦA 8086 (tiếp) Các chân ở chế độ Max S2, S1, S0: ghép nối với điều khiển bus 8288 chu kỳ điều khiển của bus
S2
S1
S0
0 0 0
0 0 1
0 1 0
chấp nhận yêu cầu ngắt đọc thiết bị ngoại vi Ghi thiết bị ngoại vi
0 1
1 0
1 0
Dừng đọc mã lệnh
1 1 1
0 1 1
1 0 1
đọc bộ nhớ ghi bộ nhớ bus rỗi
104/Chapter
3.1.1. CÁC TÍN HIỆU CỦA 8086 (tiếp) Các chân ở chế độ Max RQ/GT0 và RQ/GT1: Request/Grant • Tín hiệu yêu cầu dùng bus của các bộ vi xử lý khác/chấp nhận treo bus của CPU • GT0 có mức ưu tiên cao hơn GT1
LOCK • 0: cấm các bộ vi xử lý khác dùng bus
QS0 và QS1: • trạng thái của hàng đợi lệnh QS1 QS0
Trạng thái hàng đợi lệnh
0
0
không hoạt động
0
1
đọc byte mã lệnh đầu tiên
1
0
hàng đợi rỗng
1
1
đọc byte tiếp theo
105/Chapter
106/Chapter
3.1.2. MẠCH TẠO XUNG NHỊP 8284 VÀ GHÉP NỐI VỚI 8086 3.1.2.1. Sơ đồ chân tín hiệu của 8284 CSYNC PCLK AEN1
RDY1 READY RDY2 AEN2
CLK GND
1 2 3 4
18 17 16 15
5 8284 6 7 8 9
14 13 12 11 10
Vcc X1 X2 ASYNC
EFI F/C OSC
RES RESET
Hình 3.2. Mạch tạo xung đồng hồ 8284
107/Chapter
3.1.2. MẠCH TẠO XUNG NHỊP 8284 VÀ GHÉP NỐI VỚI 8086 3.1.2.2. Sơ đồ ghép nối 8086 với 8284 X1
5V
CLK
X2
10k
8284 RESET
K
CLK
10 μ
F/C
CSYNC
8086 RESET
Khởi động hệ thống
3.1.3. MẠCH ĐIỀU KHIỂN BUS 8288 VÀ GHÉP NỐI VỚI 8086 3.1.2.1. Sơ đồ chân tín hiệu của 8288 IOB CLK S1 DT/R ALE AEN MRDC AMWC MWTC
GND
1 2 3 4 5 8288 6 7 8 9 10
20 19 18 17 16 15 14 13 12 11
Vcc
S0 S2 MCE / PDEN
DEN CEN
INTA IORC AIOWC RESET
108/Chapter
3.1.3. MẠCH ĐIỀU KHIỂN BUS 8288 VÀ GHÉP NỐI VỚI 8086 3.1.2.2. Ý nghĩa chân tín hiệu của 8288 S2 0 0 0 0 1 1 1 1
S1 0 0 1 1 0 0 1 1
S0 0 1 0 1 0 1 0 1
Chu kỳ điều khiển của BUS Chấp nhận yêu cầu ngắt Đọc cổng I/O Ghi cổng I/O Dừng Đọc mã lệnh Đọc bộ nhớ Ghi bộ nhớ Bus rỗi (nghỉ)
Tín hiệu INTA IORC IOWC, AIOWC Không MRDC MRDC MWTC, AMWC Không
109/Chapter
3.2. GHÉP NỐI VỚI 8086 VỚI BUS HỆ THỐNG
110/Chapter
3.2.1. Các chu kỳ bus của 8086 T1
T2
T3
T4
CLK
Tw (Chu kỳ đợi – Wait) ALE A16/S3-A19/S6 AD0-AD15 WR
Hight active Address
Status Signal
Address
Data
TWR
DEN
Low active Low active
Hình 3.5. Chu kỳ bus ghi
3.2. GHÉP NỐI VỚI 8086 VỚI BUS HỆ THỐNG
111/Chapter
3.2.1. Các chu kỳ bus của 8086 (tiếp) T1
T2
T3
T4
CLK ALE A16/S3-A19/S6 AD0-AD15 RD
Tw Address
Hight active
Status Signal
Address
Data TRD
Low active
DEN Low active Hình 3.6. Chu kỳ bus đọc
112/Chapter
3.2. GHÉP NỐI VỚI 8086 VỚI BUS HỆ THỐNG LS373
A16-A19
A16/S3 -A19/S6 G
AD0 -AD15
OC
2x LS373 G
A0-A15
OC
ALE 2x LS245
+5V
MN / MX
DEN
DT/R BHE M / IO
G DIR
LS244
RD
WR
D0-D15
OC1 OC2
BHE M/IO RD WR
Hình 3.7. Sơ đồ ghép nối 8086 với BUS chế độ MIN
113/Chapter
3.2. GHÉP NỐI VỚI 8086 VỚI BUS HỆ THỐNG LS373 A16/S3 - A19/S6
A16-A19
G OC 2x LS372
AD0 -AD15
CPU 8086
G
OC 2x LS245
MN/MX
8288
S0
S0
S1
S1
S2
S2
ALE DT / R DEN
A0-A15
D0-D15
DIR G
AIOWC
AIOWC
AMWC MWTC
AMWC MWTC
IORC
IORC
MRDC INTA
MRDC INTA
Hình 3.8. Sơ đồ ghép nối 8086 với BUS chế độ MAX
3.3. TỔ CHỨC BỘ NHỚ CHO 8086
114/Chapter
3.3.1. Cấu trúc chung của IC nhớ A0 A1
D0 D1
Address
Data Am-1
WR RD
Dn-1
WE OE
Hình 3.9. Cấu trúc chung của 1 IC nhớ
115/Chapter
3.3. TỔ CHỨC BỘ NHỚ CHO 8086 (tiếp) 3.3.2. Giới thiệu một số IC nhớ tiêu biểu. Bảng 3.4. Họ EPROM 27x Số hiệu Chip Dung lượng 2708 1K*8 2716 2K*8 2732 4K*8 2764 8K*8 27128 16K*8 27256 32K*8 27512 64K*8 - Tac = 450ns - Vpp : Read 5V, Program 25V - Vcc: Power 5V - GND: Ground
- A0-A10: Address Inputs - D0-D7: Data Outputs - CS: Chip enable - OE: Output enable
116/Chapter
3.3. TỔ CHỨC BỘ NHỚ CHO 8086 (tiếp) 3.3.2. Giới thiệu một số IC nhớ tiêu biểu. Bảng 3.5.Một số IC nhớ RAM Số hiệu Chip
Dung lượng
HT 6116
2K*8
CY 6264
8K*8
CY 62256
32K*8
HM 62864
64K*8
- CS: Chip Selet Input - WR: Output Enabe Input - I/O1-I/O8: DataInputs/Outputs - A0-A14: Address Inputs - OE: Output enable
Hình 3.11. Sơ đồ SRAM 62256 - Tac từ 55-70ns - VCC: Power (5V) - VSS: Grond
117/Chapter
3.3. TỔ CHỨC BỘ NHỚ CHO 8086 (tiếp) 3.3.3.Nguyên tắc và các bước tổ chức bộ nhớ cho 8086 Nguyên tắc tổ chức bộ nhớ Mỗi ô nhớ phải có địa chỉ duy nhất Hai ô nhớ có địa chỉ hơn kém nhau một đơn vị Truy cập được cả dữ liệu 8 bit và 16 bit
A0 -A19
FFFFFh FFFFEh . . . 00001h 00000h
D0 – D15
=
A1 -A19
A0
FFFFEh FFFFCh . . . 00002h 00000h
+
A1 -A19 BHE
FFFFFh FFFFDh . . . 00003h 00001h
D8 – D15 D0 – D7 (Băng lẻ) (Băng chẵn) Hình 3.12 Sự phân băng cho BUS 16 bit
118/Chapter
3.3. TỔ CHỨC BỘ NHỚ CHO 8086 (tiếp) 3.3.3.Nguyên tắc và các bước tổ chức bộ nhớ cho 8086 Các bước tổ chức bộ nhớ Xác định số lượng IC cần tổ chức: Xác định số đường địa chỉ chọn ô nhớ: • tùy thuộc vào dung lượng của IC thành phần.
Xây dựng bản đồ địa chỉ: • xác định địa chỉ cho từng ô nhớ • bộ nhớ RAM phải bắt đầu từ địa chỉ 00000H (nếu hệ thống sử dụng ngắt để chứa bảng vectơ ngắt), • bộ nhớ ROM phải chứa địa chỉ khởi động (FFFF0H)
Xây dựng mạch:
119/Chapter
3.3. TỔ CHỨC BỘ NHỚ CHO 8086 (tiếp) 3.3.4. Tổ chức bộ nhớ RAM cho 8086
Ví dụ: Tổ chức bộ nhớ RAM có dung lượng 32K*8bit dùng cho hệ VXL 8086, bắt đầu từ địa chỉ 14000h. Sử dụng IC nhớ RAM có dung lượng 8K*8bit để thực hiện.
Số lượng IC: 4 IC (8k*8bit), 2 cho băng chẵn, 2 cho băng lẻ Số đường địa chỉ chọn ô nhớ: 13 đường từ A1-A13 Bản đồ địa chỉ Sơ đồ tổ chức:
120/Chapter
Bản đồ địa chỉ A19-A16 0001 ... 0001 0001 ... 0001
Băng chẵn: A15-A12 A11-A8 0100 0000 ... ... 0111 1111 1000 0000 ... ... 1011 1111
A0=0 ( =X) A7-A4 A3-A0 Số HEX 0000 0000 14000h ... ... ... 1111 1110 17FFEh 0000 0000 18000h ... ... ... 1111 1110 1BFFEh
Băng lẻ A0=1 (
0100 ... 0111 1000 ... 1011
0000 ... 1111 0000 ... 1111
0000 ... 1111 0000 ... 1111
RAM 2
RAM 4
=0 )
A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Số HEX 0001 ... 0001 0001 ... 0001
IC
0001 ... 1111 0001 ... 1111
14001h ... 17FFFh 18001h ... 1BFFFh
IC RAM 1
RAM 3
121/Chapter
Sơ đồ (sử dụng mạch logic để giải mã) A1-A13
RAM2
D0 – D7 D8 – D15
A0 A15,A17-A19 A14 A16 A0 A14,A17-A19 A15 A16
A15,A17-A19 A14 A16
A14,A17-A19 A15 A16
RAM4
RAM1
RAM3
122/Chapter
Sơ đồ (sử dụng mạch 74LS138 để giải mã) A1-A13
RAM2
D8 – D15
A0
A14 A15 A16
D0 – D7
A B C
RAM4
A17 A18 – A19
RAM1 G1 74LS138
RAM3
123/Chapter
3.3. TỔ CHỨC BỘ NHỚ CHO 8086 (tiếp) 3.3.4. Tổ chức bộ nhớ ROM cho 8086
Ví dụ: Tổ chức bộ nhớ ROM có dung lượng 64K*8bit dùng cho hệ 8086. Sử dụng IC nhớ ROM có dung lượng 16K*8bit Số lượng IC nhớ phải dùng: 4 IC nhớ ROM (16K*8bit), 2 IC cho băng chẵn, 2 IC cho băng lẻ. Số đường địa chỉ chọn ô nhớ: 14 đường từ A1-A14 Bản đồ địa chỉ: Sơ đồ tổ chức:
124/Chapter
Bản đồ địa chỉ Băng chẵn: A0=0 ( BHE =x) A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Số HEX 1111 1111 1111 1 1 1 1 1 1 1 0 FFFFEh ... ... ... ... ... ... 1111 1000 0 0 0 0 0 0 0 0 0 0 0 0 F8000h 1111 0111 1111 1 1 1 1 1 1 1 0 F7FFEh ... ... ... ... ... ... 1111 0000 0 0 0 0 0 0 0 0 0 0 0 0 F0000h Băng lẻ A0=1 ( BHE 0 ) A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Số HEX 1111 1111 1111 1 1 1 1 1 1 1 1 FFFFFh ... ... ... ... ... ... 1111 1000 0 0 0 0 0 0 0 0 0 0 0 1 F8001h 1111 0111 1111 1 1 1 1 1 1 1 1 F7FFFh ... ... ... ... ... ... 1111 0000 0 0 0 0 0 0 0 0 0 0 0 1 F0001h
IC ROM 2
ROM 4
IC ROM 1
ROM 3
125/Chapter
Sơ đồ (sử dụng mạch 74LS138 để giải mã) A1-A14
ROM4
D8 – D15
A0 A15 A16 A17
A18 A19
D0 – D7
A B C
ROM2
G2A
G2B
ROM3
G1 74LS138
ROM1
126/Chapter
BÀI TẬP 1. Tổ chức bộ nhớ RAM có dung lượng 16K*8bit dùng cho hệ VXL 8086. Sử dụng IC nhớ RAM có dung lượng 4K*8bit để thực hiện. (hệ thống sử dụng ngắt). 2. Tổ chức bộ nhớ RAM có dung lượng 8K*8bit dùng cho hệ VXL 8086, bắt đầu từ địa chỉ 31000h. Yêu cầu: Sử dụng IC nhớ RAM có dung lượng 2K*8bit. Sử dụng mạch giải mã 74LS138 để tổ chức
127/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA 3.4.1. Nguyên tắc ghép nối Không gian địa chỉ cổng: 00000H 1MB FFFFFH
00000H FFFFFH
Bộ nhớ
00000H 64KB
FFFFFH
Cổng vào
Lệnh: MOV Tín hiệu điều khiển:
64KB Cổng ra
IN
OUT
a. Không gian riêng biệt cho bộ nhớ và cổng vào ra 00000H
Vào/ra
Bộ nhớ
Kiểu lệnh và tín hiệu điều khiển chung cho cả hai: MOV
FFFFFH b. Không gian chung cho bộ nhớ và cổng vào/ra
128/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) 3.4.1. Nguyên tắc ghép nối Giải mã địa chỉ cho cổng vào/ra Sử dụng mạch logic cơ bản Tín hiệu địa chỉ
Tín hiệu địa chỉ
RD
OSP
ISP
Tín hiệu địa chỉ
Tín hiệu địa chỉ
RD
ISP (Xung chọn cổng vào)
OSP (Xung chọn cổng ra)
129/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) 3.4.1. Nguyên tắc ghép nối Sửdụng mạch giải mã có sẵn A0 A1
A2 A3
A B C
A2
. . .
A4-A7
G2A RD
A1
y0
y0
. . .
A4-A7
G2A G2B
G2B
G1
A3
A B C
y7
Giải mã cổng vào có địa chỉ chẵn từ F0H-FEH
G1
y7
Giải mã cổng ra có địa chỉ lẻ từ F1H-FFH
130/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) 3.4.2.Ghép nối với cổng vào/ra đơn giản D0
D
Q
D7
Q0
. . .
. . .
Bus dữ liệu của CPU
Thiết bị ra Q7
G
79H
Một mạch phối ghép ra đơn giản dùng 74LS373
Từ thiết bị vào
D0 . . . D7
78H
Q0 . . . Q7
. . . OC1
Tới Bus dữ liệu của CPU
OC2
Một mạch phối ghép ra đơn giản dùng 74LS244
131/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) 3.4.3.Ghép nối với cổng vào/ra song song PPI 8255A 3.4.3.1. Sơ đồ chân tín hiệu
132/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) 3.4.3.Ghép nối với cổng vào/ra song song PPI 8255A 3.4.3.2. Sơ đồ cấu trúc PA0-PA7 Nhóm A Cổng A Điều khiển Nhóm A
D0-D7
A1 A0 RESET
Đệm số liệu
Logic điều khiển đọc/ghi
Điều khiển Nhóm B
Sơ đồ khối chức năng của 8255A
Nhóm A Cổng C Nửa cao
PC4-PC7
Nhóm B Cổng C Nửa thấp
PC0-PC3
Nhóm B Cổng B
PB0-PB7
133/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) 3.4.3.Ghép nối với cổng vào/ra song song PPI 8255A 3.4.3.3. Từ điều khiển của 8255A D7
D6
D5
D4
D3
D2
D1
D0
1
MA1
MA0
A
CA
MB
B
CB NHÓM B
NHÓM A
PCL (thấp)
Chọn chế độ
1: Vào 0: Ra
00: Mode 0 01: Mode 1 1x: Mode2
PB
PA
1: Vào 0: Ra
1: Vào 0: Ra
Chọn chế độ 0: Mode 0 1: Mode 1
PCH (cao) 1: Vào 0: Ra
Từ điều khiển định nghĩa cấu hình của 8255A
134/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) 3.4.3.Ghép nối với cổng vào/ra song song PPI 8255A 3.4.3.3. Từ điều khiển của 8255A D7 0
D6 0
D5 0
D4 0
D3
D2
D1 D0 S/R
Mã hoá PCi 000: PC0 ... 111: PC7 Từ điều khiển lập/xoá PCi của 8255A
1: Lập bit 0: Xóa bit
135/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) 3.4.3.Ghép nối với cổng vào/ra song song PPI 8255A 3.4.3.4. Các chế độ làm việc của 8255A Mode 0: các cổng PA, PB, PC làm việc như các cổng đơn giản Mode 1: PA, PB là các cổng vào/ra có tín hiệu hội thoại, PC làm tín hiệu hội thoại cho PA, PC PA
INTEA
D0-D7
INTEA
PC7
OBFA
PC6
ACKA
PC3
INTRA
PA PC4 PC5
D0-D7
PC3
STBA IBFA
INTRA
INTEB
INTEB PC1
OBFB
PC2
ACKB
PC0 PB PC4,5
a. Ra
INTRB I/O
PC2 PC1 PC0 PB PC4,5
b. Vào
STBB IBFB
INTRB I/O
136/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) 3.4.3.Ghép nối với cổng vào/ra song song PPI 8255A 3.4.3.4. Các chế độ làm việc của 8255A Mode 2: PA, PB là các cổng vào/ra có tín hiệu hội thoại, PC làm tín hiệu hội thoại cho PA, PC D0-D7
PA
D0-D7
PA
PC3
INTRA
PC3
PC7
OBFA
PC7
OBFA
PC6
ACKA
PC6
ACKA
PC5
IBFA
INTE1
INTRA
INTE1 PC5
IBFA
PC4
PC4
INTE2
INTE2 PB PC0-PC2
I/O
a) PA: chế độ 2 PB: chế độ 0, vào PC0-PC2: I/O tuỳ ý theo từ điều khiển
PB PC1 PC1
OBFB
PC2 PC2
ACKB
PC0 PC0
INTRB
b) PA: chế độ 2 PB: chế độ 1, ra
137/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) Một số ví dụ về ghép nối 8086 với 8255A Ví dụ 1: sử dụng 8255A thiết kế một cổng vào trao đổi dữ liệu 16 bit (mode 1), 1 cổng ra trao đổi dữ liệu 8 bit (mode 1), 1 cổng vào trao đổi dữ liệu 8 bit (mode 0). Viết đoạn chương trình thực hiện nhận 1 byte dữ liệu từ cổng vào 8 bit và gửi ra cổng ra 8 bit. Ví dụ2: sử dụng 8255A thiết kế một cổng ra trao đổi dữ liệu 16 bit (mode 1, địa chỉ 30h), 2 cổng vào trao đổi dữ liệu 8 bit (mode 1, 34h, 35h). Viết chương trình nhận 1 byte dữ liệu từ cổng vào có địa chỉ 35h cất vào ô nhớ có địa chỉ 12345h.
138/Chapter
D0-D7 RD WR A2
D0-D7 RD WR
A1 A0
A1 A0 A3 A5 A7
A B C
M / IO
G1
BHE
OBFA ACKA
PB PC2
A4
A6
PA PC7 PC6
74LS138
y0 y1 y2 y3 y4 y5 y6 y7
8255A -1 D8-D15
D0-D7
PA
RD WR
A1 A0
PB PC1 PC2
D0-D15 IBFB STBB
8255A-2 Sử dụng 8255A thiết kế 1 cổng vào 16 bit mode 1; 1 cổng ra 8 bit mode1; 1 cổng vào 8 bit mode 0 cho hệ VXL 8086
139/Chapter
Xác định địa chỉ các cổng và nội dung của các CWR: •Sử dụng 2 cổng PB làm cổng vào trao đổi dữ liệu 16 bit mode 1, địa chỉ 62h •Sử dụng PA (8255A-1) làm cổng ra trao đổi dữ liệu 8 bit mode 1, địa chỉ 60h •Sử dụng PA (8255A-2) làm cổng vào trao đổi dữ liệu 8 bit mode 0, địa chỉ 61h •Địa chỉ PC (8255A-1): 64h •Địa chỉ PC (8255A-2): 65h •Địa chỉ CWR (8255A-1): 0110 0110=66h •Địa chỉ CWR (8255A-2): 0110 0111=67h •Nội dung CWR (8255A-1): 1010 0110=0A6h •Nội dung CWR (8255A-2): 1001 0110=96h
140/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) 3.4.4. Truyền thông tin nối tiếp dùng 8250A, 8251A 3.4.4.1. Yêu cầu truyền thông tin nối tiếp Phương pháp truyền không đồng bộ(Asynchoronuos Communication)
Chiều của dòng dữ liệu Luôn ở mức thấp
Luôn ở mức cao
Start D0 D1
D2 D3
D4
D5 D6 Parity Stop Stop
Mã ký tự cần truyền Hình 3.35. Khung cho một ký tự theo mã ASCII để truyền không đồng bộ
141/Chapter
3.4. GHÉP NỐI 8086 VỚI CỔNG VÀO RA (tiếp) 3.4.4. Truyền thông tin nối tiếp dùng 8250A, 8251A 3.4.4.1. Yêu cầu truyền thông tin nối tiếp Phương pháp truyền đồng bộ (Synchronuos Commmunication): Chiều của dòng dữ liệu SYN
SYN
SOH
HERDER
STX
TEXT
EXT hay EBT
BCC
Hình 3.36. Khuôn dạng của bản tin truyền đồng bộ theo giao thức BISYNC •SYN: ký tự đồng bộ. Sau khi phát hiện hai ký tự đặc biệt dùng làm tín hiệu đồng bộ đã biết trước, thiêt bị thu bắt đầu ghi nhận ký tự SOH. •SOH (Start of header) là byte mở đầu, xác định kích thước và các đặc tính của trường Header. •HEADER: Trường này có độ dài thay đổi, có thể dùng để chứa địa chỉ nơi nhận tin. •STX (Start of text) chỉ ra rằng ngay sau byte này là phần bắt đầu của văn bản. •TEXT: trường này có độ dài thay đổi, chứa đựng các ký tự mã ASCII hoặc EBCDIC (là nội dung tin tức cần truyền). •EXT (End of text): ký tự kết thúc văn bản •ETB: ký tự kết thúc khối văn bản •BCC (Block Check character): là khối tổng kiểm tra dùng để kiểm tra phát hiện lỗi.
142/Chapter
3.5. GHÉP NỐI 8086 VỚI MỘT SỐ TBNV 3.5.1. Ghép nối với bàn phím
+5v
d0-d7 d0-d7
Bàn phím ma trận
“0” 77h “8” D7h “4” B7h “12” E7h
“1” 7Bh “9” DBh “5” BBh “13” EBh
“2” 7Dh “10” DDh “6” BDh “14” EDh
Mã các phím
“3” 7Eh “11” DEh “7” Beh “15” EEh
PA3 PA2 PA1 PA0
R “0” “4” “8” “12”
R
R
“1” “2” “5” “6” “9” “10” “13” “14”
R “3” “7” “11” “15”
R R R R
d0-d7 y3 y2
y1
y0
PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0
Bàn phím điều khiển bằng chương trình
143/Chapter
3.5. GHÉP NỐI 8086 VỚI MỘT SỐ TBNV 3.5.1. Ghép nối với bàn phím Bắt đầu Đưa 0 ra mọi hàng
Bàn phím tốt hay xấu
Đọc các cột S
Đưa 0 ra từng hàng
Phím tốt? Đ
Đọc các cột
Đọc các cột S
Phát hiện phím bị ấn
Có phím ấn? Đ
Chống rung
Giữ chậm 20ms
S
Tìm thấy? Đ Tạo mã phím Kết thúc
Đọc các cột S
Có phím ấn?
Đ
Thuật toán điều khiển bàn phím
Tạo mã
144/Chapter
3.5. GHÉP NỐI 8086 VỚI MỘT SỐ TBNV 3.5.2. Ghép nối với bộ hiển thị
A B C D
a b ... g
74LS47
a f g
b
g
c
a. Cực tính âm
d
A a B b C ... D g 74LS49
a f g
b
g
c
d
b. Cực tính dương
145/Chapter
3.5. GHÉP NỐI 8086 VỚI MỘT SỐ TBNV 3.5.2. Ghép nối với bộ hiển thị điều khiển hiển thị LS18
. . .
D4-D6
D0-D7
Cổng ra D3 D2 D1 D0
...
+5V
Từ g/mã địa chỉ
a b c d e f g LT 7447 RBI BI
CHƯƠNG 4
CÁC PHƯƠNG PHÁP VÀO/RA DỮ LIỆU
8/15/2019
146
147/Chapter
Chương 4
CÁC PHƯƠNG PHÁP ĐK VÀO/RA DỮ LIỆU
4.1. ĐK vào/ra bằng phương pháp thăm dò 4.2. ĐK vào/ra bằng phương pháp ngắt ngắt bộ vi xử lý 4.3. ĐK vào/ra bằng phương pháp truy nhập trực tiếp bộ nhớ (DMA)
148/Chapter
4.1. ĐK VÀO/RA BẰNG PHƯƠNG PHÁP THĂM DÒ
Dùng một đoạn chương trình để kiểm tra tình trạng làm việc của thiết bị ngoại vi. Ưu điểm: không phải thiết kế thêm phần cứng Nhược điểm: không đáp ứng tức thời
149/Chapter
4.2. VÀO/RA BẰNG PHƯƠNG PHÁP NGẮT BỘ VXL 4.2.1. Ý nghĩa vào ra bằng phương pháp ngắt 4.2.2. Hệ thống của 8086 Trong hệ vi xử lý 8088/8086 có thể xếp các nguyên nhân gây ra ngắt CPU vào 3 nhóm sau: + Nhóm ngắt cứng: các yêu cầu ngắt CPU do các t.hiệu đưa tớichân INTR ,NMI • NMI là yêu cầu ngắt không che được tương đương với ngắt mềm INT 2. • INTR là yêu cầu ngắt che được. + Nhóm ngắt mềm: khi CPU thực hiện các lệnh ngắt dạng INT N, trong đó N là số hiệu ngắt (kiểu) ngắt nằm trong khoảng 00h-FFh (0-255). + Nhóm các hiện tượng ngoại lệ: đó là các ngắt do các lỗi nảy sinh trong quá trình hoạt động của CPU như phép chia cho 0, xảy ra khi tràn tính toán.. + Véc tơ ngắt + Địa chỉ véc tơ ngắt + Bảng véc tơ ngắt
150/Chapter
4.2. VÀO/RA BẰNG PHƯƠNG PHÁP NGẮT BỘ VXL (tiếp) 4.2.3. Nguyên lý vào/ra bằng phương pháp ngắt
INTR INTA
D0-D7
CPU
Bus dữ liệu
T/h đọc/ghi Từ giải mã địa chỉ
Mạch điều khiển ngắt
Cổng vào/ra
IR
Ngoại vi
151/Chapter
4.2. VÀO/RA BẰNG PHƯƠNG PHÁP NGẮT BỘ VXL (tiếp) 4.2.4. Mạch điều khiển ngắt ưu tiên 8259A
152/Chapter
4.2. VÀO/RA BẰNG PHƯƠNG PHÁP NGẮT BỘ VXL (tiếp) 4.2.4. Mạch điều khiển ngắt ưu tiên 8259A Các từ điều khiển khởi đầu ICW (ICW1 – ICW4) A0 0
D7 D6
D5
D4
x
x
1
x
D3 LTIM
D2 ADI
D0
SNGL
IC4 1: cần ICW4 0: bỏ ICW4 1: chỉ có 1 PIC 0: có nhiều PIC
Không dùng tới với hệ 16-32bit
Cách tác động của xung y/c ngắt 1: theo mức dương 0: theo sườn dương
D1
Khoảng cách giữa các vectơ ngắt 1: cách 4 byte (80x86/88) 0: cách 8 byte (8080/8085)
Tổ chức của ICW1
153/Chapter
4.2. VÀO/RA BẰNG PHƯƠNG PHÁP NGẮT BỘ VXL (tiếp) 4.2.4. Mạch điều khiển ngắt ưu tiên 8259A Các từ điều khiển khởi đầu ICW (ICW1 – ICW4)
A0 1
D7
D6
D5
D4
Off7 Off6 Off5 Off4
D3 Off3
D2
D1
D0
T2
T1
T0
ứng với các y/c ngăt IR0 – IR7 Chọn số hiệu ngắt (kiểu ngắt) cho mạch 8259A Tổ chức của ICW2
154/Chapter
4.2. VÀO/RA BẰNG PHƯƠNG PHÁP NGẮT BỘ VXL (tiếp) 4.2.4. Mạch điều khiển ngắt ưu tiên 8259A Các từ điều khiển khởi đầu ICW (ICW1 – ICW4) A0
D7 D 6
D5
D4
D3
1
S7 S6
S5
S4
S3
D2 D1
S2
D0
S1 S0
1: Đầu vào IRi nối với mạch 8259A thợ 0: Đầu vào IRi không nối với mạch thợ a) ICW3 của 8259A chủ
A0 1
D7 D 6 D5 0
0
0
D4
D3
0
0
D2 D1 D0 ID2
ID1 ID0
Mã hóa số hiệu của mạch thợ 0-7 nối với IR0 – IR7 b) ICW3 của 8259A thợ Tổ chức của ICW3
155/Chapter
4.2. VÀO/RA BẰNG PHƯƠNG PHÁP NGẮT BỘ VXL (tiếp) 4.2.4. Mạch điều khiển ngắt ưu tiên 8259A Các từ điều khiển khởi đầu ICW (ICW1 – ICW4)
A0
D7
D6
D5
D4
D3
1
0
0
0
SFNM BUF
D2 M/S
D1
D0
AEO I PM 1: cho họ 80x86/88
1: chế độ ưu tiên cố định đặc biệt 0: không phải chế độ ưu tiên cố định đặc biệt.
1: EOI tự động 0: EOI thường
0x: 8259A ở chế độ không đệm 10: mạch 8259A thợ ở chế độ đệm 11: mạch 8259A chủ ở chế độ đệm
Tổ chức của ICW4
156/Chapter
4.2. VÀO/RA BẰNG PHƯƠNG PHÁP NGẮT BỘ VXL (tiếp) 4.2.4. Mạch điều khiển ngắt ưu tiên 8259A Các từ điều khiển hoạt động OCW (OCW1 - OCW3)
157/Chapter
MẠCH GHÉP NỐI TẦNG ‘0’
BUS dliệu
A0
SP EN IR0
D0-D7 ‘1’
A0 A1
A2
BUS đ/chỉ
A3
A
y0
A0 SP EN
B
y1
D0-D7
C
74LS138 A7 A4-A6
M / IO
IR0
Đ/khiển
8259A INT
IR7
CaS0-CaS2 Đ/khiển
IR5
8259A
G 2A G 2B G1
CaS0-CaS2
IR3
y2
IR2
INT
‘0’
IR7 A0
SP EN IR0
D0-D7
IR2
INTR CaS0-CaS2
Điều khiển ( RD , WR, INTA )
Đ/khiển
8259A INT
Sơ đồ ghép nối PIC8259
IR7
VÍ DỤ
158/Chapter
* Ví dụ: Giả sử có một hệ điều khiển ngắt dùng 3IC 8259A: 1 chủ và 2 thợ dùng cho hệ 8088 và có thêm một số quy định sau: • Tác động của xung yêu cầu theo mức. • Chỉ số ngắt của mạch chủ là từ 50h, còn của mạch thợ là 60h và 70h. • Mạch ở chế độ không đệm và chế độ ưu tiên cố định thường (EOI thường). • Địa chỉ cơ sở của IC chủ và thợ là 70h, 72h và 74h. Vẽ sơ đồ phối ghép và viết đoạn chương trình khởi động cho các 8259A.
VÍ DỤ
159/Chapter
Các từ điều khiển khởi đầu như sau: • Sơ đồ trong phần ghép nối tầng • Từ ICW1=00011101. Bit d0=1 – cần ICW4; d1=0 – có nhiều PIC; d2=1 – dùng cho hệ 16 bit; d3=1 – dùng mức dương. Từ này cho cả 3 PIC. • Từ ICW2. Với PIC chủ là 01010000; còn PIC thợ 1 là 01100000 và PIC thợ 2 là 01110000. • Từ ICW3. Với PIC chủ là 00101000; còn PIC thợ 1 là 00000011 và PIC thợ 2 là 00000101. • Từ ICW4 là 00000001. Dùng cho cả 3 PIC
VÍ DỤ + Đoạn chương trình ;Gửi từ điều khiển thứ nhất ICW1 MOV AL, 1Dh OUT 70h, AL ;Gửi cho PIC chủ OUT 72h, AL ;Gửi cho PIC tớ 1 OUT 74h, AL ;Gửi cho PIC tớ 2 ;Gửi các từ điều khiển thứ hai ICW2 MOV AL, 50h OUT 71h, AL ;Gửi cho PIC chủ MOV AL, 60h OUT 73h, AL ;Gửi cho PIC tớ 1 MOV AL, 70h OUT 75h, AL ;Gửi cho PIC tớ 2 ;Gửi các từ điều khiển thứ ba ICW3 MOV AL, 28h OUT 71h, AL ;Gửi cho PIC chủ MOV AL, 03h OUT 73h, AL ;Gửi cho PIC tớ 1 MOV AL, 05h OUT 75h, AL ;Gửi cho PIC tớ 2 ;Gửi từ điều khiển thứ tư ICW4 MOV AL, 01h OUT 71h, AL ;Gửi cho PIC chủ OUT 73h, AL ;Gửi cho PIC tớ 1 OUT 75h, AL ;Gửi cho PIC tớ 2
160/Chapter
161/Chapter
4.3. VÀO/RA BẰNG PHƯƠNG DMA
Bus địa chỉ
CPU
Bus dữ liệu DMAC
HOLD
HRQ
HLDA
HACK DACK
DRQ
I/O DRQ
DACK
Bus điều khiển (các tín hiệu quan trọng: ) Hệ vi xử lý với DMAC
MEM