VXL [PDF]

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

25 0 5MB

Report DMCA / Copyright

DOWNLOAD PDF FILE

Papiere empfehlen

VXL [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

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



Thanh ghi đoạn



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: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 (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