đề cƣơng chi tiết môn học

112 13 0
đề cƣơng chi tiết môn học

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trong chế độ này yêu cầu ngắt với mức ưu tiên cao nhất hiện thời từ một mạch thợ làm việc theo kiểu nối tầng sẽ được mạch chủ nhận biết ngay cả khi mạch chủ còn đang phục vụ một yêu cầ[r]

(1)

1 Tên môn học: Kỹ thuật vi xử lý

2 Phân bố thời gian: (Với trình độ cao đẳng) 30 Lý thuyết + 30 Bài tập, thực hành

3 Môn tiên quyết:

Kỹ thuật vi xử lý môn học quan trọng việc nghiên cứu phần cứng máy tính Các kiến thức mơn học cần có để phục vụ cho môn học bao gồm:

 Kỹ thuật điện tử số (2 mức: 0, 1, nhớ)

 Kiến trúc máy tính

4 Đối tƣợng học:

Sinh viên ngành Kỹ thuật máy tính, Điều khiển tự động, Điện tử viễn thông, Kỹ thuật điện tử, Công nghệ thông tin

5 Mô tả môn học:

Trang bị cho sinh viên kiến thức có tính chất hệ thống liên quan đến kỹ thuật VXL Trang bị cho sinh viên khả tư nghiên cứu, tiếp cận với hệ VXL tiên tiến, đại Ngồi học phần cịn giúp cho sinh viên dễ dàng việc xây dựng chương trình điều khiển thiết bị ghép nối với máy tính

Nội dụng cụ thể bao gồm phần sau:

 Khái niệm, cấu trúc nguyên lý hoạt động hệ VXL

 Bộ VXL 8088/8086

 Các ghép nối 8088/8086 với thiết bị ngoại vi

 Các phương thức đièu khiển vào liệu kỹ thuật VXL

6 Nhiệm vụ sinh viên:

Sinh viên phải tham gia đủ 80% lớp Phải hoàn thành đầy đủ tập thực hành chương trình

7 Nội dung giảng dậy Chƣơng Hệ vi xử lý

1.1 Vi xử lý gì?

1.2 Các hệ vi xử lý

1.2.1 Thế hệ (1971 đến 1973) 1.2.2 Thế hệ (1974 đến 1977) 1.2.3 Thế hệ (1978 đến 1982) 1.3 Thế hệ (1983 đến nay)

1.4 Giới thiệu cấu trúc hệ vi xử lý 1.3.1 CPU - Bộ xử lý trung tâm 1.3.2 Bộ nhớ bán dẫn (ROM, RAM) 1.3.3 Hệ thống vào (I/O)

(2)

Chƣơng Bộ vi xử lý 8088 Intel

2.1 Giới thiệu hoạt động vi xử lý 8088 2.1.1 Giới thiệu chung

2.1.2 Cấu trúc hoạt động VXL 8088 2.2 Chế độ địa 8088

2.2.1 Chế độ địa ghi 2.2.2 Chế độ địa tức 2.2.3 Chế độ địa tực tiếp

2.2.4 Chế độ địa gián tiếp qua ghi 2.2.5 Chế độ địa tương đối sở

2.2.6 Chế độ địa tương đối số 2.2.7 Chế độ địa tương đối số sở 2.3 Mơ tả tập lệnh 8088

2.3.1 Nhóm lệnh chuyển liệu 2.3.2 Nhóm lệnh số học

2.3.3 Nhóm lệnh logic, dịch quay 2.3.4 Nhóm lệnh so sánh

2.3.5 Nhóm lệnh rẽ nhánh (nhảy), lặp 2.3.6 Nhóm lệnh đặc biệt

Chƣơng Lập trình hợp ngữ cho 8088 máy tính IBM PC các máy tƣơng thích IBM PC

3.1 Giới thiệu chung

3.2 Giới thiệu khung chương trình

3.2.1 Cấu trúc lệnh hợp ngữ 3.2.2 Dữ liệu cho chương trình hợp ngữ 3.2.3 Biến

3.2.4 Khung chương trình hợp ngữ 3.3 Cách tạo cho chạy chương trình hợp ngữ 3.4 Các cấu trúc lập trình assembly

3.4.1 Cấu trúc 3.4.2 Cấu trúc lựa chọn 3.4.3 Cấu trúc lặp 3.5 Truyền tham số

3.6 Một số ngắt DOS BIOS

Chƣơng Ghép 8088 với nhớ tổ chức vào liệu

4.1 Giới thiệu tín hiệu chân 8088 mạch phụ trợ 4.1.1 Bảy nhóm tín hiệu

4.1.2 Phân kênh để tách thông tin đệm bus 4.1.3 Mạch tạo xung nhịp 8284

4.1.4 Mạch điều khiển bus 8288

4.1.5 Biều đồ thời gian lệnh đọc/ghi 4.2 Phối ghép 8088 với nhớ

4.2.1 Bộ nhớ bán dẫn

4.2.2 Giải mã địa cho nhớ 4.2.3 Phối ghép 8088 với nhớ 4.3 Phối ghép 8088 với thiết bị ngoại vi

4.3.1 Các kiểu phối ghép vào

(3)

4.3.3 Các mạch cổng đơn giản

4.3.4 Mạch phối ghép vào/ra song song lập trình PPI 8255

Chƣơng Vào liệu cách thăm dò

5.1 Giới thiệu chung phương pháp điều khiển vào/ra liệu

5.2 Vào/ra liệu cách thăm dò trạng thái sẵn sàng thiết bị ngoại vi

Chƣơng Ngắt xử lý ngắt hệ vi xử lý 8088

6.1 Sự cần thiết phải ngắt CPU 6.2 Ngắt vi xử lý 8088

6.2.1 Các loại ngắt hệ 8088

6.2.2 Đáp ứng CPU có yêu cầu ngắt 6.2.3 Xử lý ưu tiên ngắt

6.2.4 Mạch điều khiển ngắt ưu tiên PPI 8259A

Chƣơng Vào liệu DMA

7.1 Nguyên tắc việc trao đổi liệu với thiết bị ngoại vi cách thâm nhập trực tiếp vào nhớ (DMA)

7.2 DMAC 8237-5 hệ vi xử lý 8088

7.2.1 Tín hiệu HOLD HLDA CPU 8088 7.2.2 Mạch DMAC 8237-5 Intel

8 Nội dung thực hành ( gồm có thực hành - 5tiết/bài)

Bài 1: Làm quen với trình dich hợp ngữ ASSEMBLER cách gọi ngắt ASM Mục đích:

 Biết cách chuyển chương trình hợp ngữ (Assembler) dạng mã máy, qua giúp sinh viên hiểu rõ chế hoạt động lệnh, cách trao đổi số liệu

 Biết cách nhập chương trình vào nhớ chạy chương trình

 Hiểu, biết cách gọi truyền tham số gọi ngắt (Chủ yếu ngát 21h DOS, với hàm hiển thị nhập ký tự Nhằm phục vụ cho việc kiểm tra kết qua cho thí nghiệm sau)

Bài 2: Trao đổi liệu thực phép tính số học Mục đích:

 Giúp sinh viên làm quen với việc nạp trao đổi liệu ghi, ghi với nhớ phép tính số học Qua thấy ý nghĩa tác dụng ghi nhớ trình lưu trữ xử lý số liệu

Bài 3: So sánh kiểm tra liệu Mục đích:

 Giúp sinh viên làm quen với cấu trúc lập trình hợp ngữ

 Biết cách so sánh kiểm tra liệu thông qua cờ

(4)

Mục đích:

 Giúp sinh viên làm quen với cấu trúc lập trình hợp ngữ

 Giúp sinh viên khảo sát thao tác đại số BOOLEAN theo phương thức mà chúng tác động ghi liệu nhớ

Bài 5: Chương trình truyền tham số Mục đích:

 Giúp sinh viên làm quen với cấu trúc lập trình hợp ngữ

 Giúp sinh viên làm quen với cấu trúc lập trình theo chương trình con, truyền tham số cho chương trình

Bài 6: Vào liệu với cổng Mục đích:

 Giúp sinh viên làm quen với kiểu giao tiếp vi xử lý với thiết bị ngồi

 Biết cách lập trình đặt chế độ làm việc cho cổng giao tiếp điều khiển ghép nối

9 Tài liệu tham khảo:

[1]Văn Thế Minh, Kỹ thuật vi xử lý, NXB Giáo Dục, 1997

[2]Đỗ Xuân Thụ & Hồ Khánh Lâm, Kỹ thuật vi xử lý máy vi tính, [3]Đỗ Xuân Tiến, Kỹ thuật lập trình điều khiển hệ thống,

[4]Lê Văn Doanh & Phạm Khắc Chương, Kỹ thuật vi điều khiển,

[5]Biên Dịch: Nguyễn Minh San - Hoàng Đức Hải, Cẩm nang lập trình hệ thống, [6]Nguyễn Đình Việt, Kiến trúc máy tính,

[7]Trần Quang Vinh, Cấu trúc máy vi tính, NXB Giáo Dục, 1998

[8]Ytha Yu & Charles Marut, Lập trình hợp ngữ (Assembly) máy vi tính IBM-PC, NXB Giáo Dục, 1996

[9]PTS Nguyễn Quang Tấn, Vũ Thanh Hiền, Lập trình với Hợp Ngữ, NXB Thống Kê, 1997

[10] Trần Bá Thái, Điều khiển ghép nối thiết bị ngoại vi, NXB thống kê, 1987

[11] Computer Organization and Assembly Language Programming For IBM PC and Compatibles Michael Thorne - The Benjamin-Cummings Publishing Company, Inc 1991

(5)

NỘI DUNG CHI TIẾT

Chƣơng HỆ VI XỬ LÝ 1.1 Vi xử lý gì?

Ngày xu hướng số hố dạng tín hiệu khẳng định rõ nét nhiều lĩnh vực: Điện tử, tin học, viễn thông, công nghệ thông tin, kỹ thuật điều khiển tự động tín hiệu số có cấu trúc đơn giản, dễ tính tốn, xử lý gia cơng

Việc xử lý, tính tốn, điều khiển thực chủ yếu máy tính PC (Hay hệ vi xử lý nói chung) Các hệ vi xử lý thường ghép nối giao tiếp với nhiều thiết bị ngoại vi khác Mỗi thiết bị làm việc môi trường khác chức năng, nhiệm vụ khác

Mơi trường thiết bị là:

 Điện, điện tử

 Cơ, điện

 Quang điện tử,

Chức năng, nhiệm vụ thiết bị như:

 Thông tin vô tuyến, hữu tuyến

 Kỹ thuật viễn thông

 Robốt, máy công cụ, dây truyền sản xuất tự động

Các hệ thống làm nhiệm vụ xử lý điều khiển nói chung ln có thành phần làm nhiệm vụ xử lý chế tạo cơng nghệ vi điện tử với độ tích hợp cao cao, chúng thường gọi vi xử lý (MicroProcessor) Các vi xử lý hoạt động (làm việc) theo chương trình, dùng để tính tốn điều khiển hoạt động hệ thống

Việc xây dựng chương trình điều khiển thiết bị cho chúng làm việc xác, đồng phức tạp Các hệ thống thông minh vai trị vi xử lý quan trọng

1.2 Các hệ vi xử lý 1.2.1 Thế hệ (1971 đến 1973)

Năm 1971 Intel cho đời vi xử lý (VXL) 4004 (dùng cho máy tính cầm tay) chế tạo cơng nghệ PMOS Đây VXL bit liệu, 12 bit địa có 2250 Transitor

Tiếp theo, Intel cho đời VXL 4040 VXL cải tiến từ VXL 4004 Trong thời gian này, Intel tiếp tục cho đời VXL 8008 VXL bit liệu

Đặc điểm vi xử lý khoảng thời gian là: o Tốc độ thực hiện: 10  60 (s/lệnh)

o Tần số đồng hồ: fCLK = 0,1  0,8 MHz

o Cần nhiều mạch phụ trợ để tạo nên hệ vi xử lý hoàn chỉnh

1.2.2 Thế hệ (1974 đến 1977)

(6)

Đặc điểm vi xử lý khoảng thời gian là: o Tập lệnh phong phú

o Là vi xử lý bit liệu

o Khả phân biệt địa nhớ lên tới 64 KB (16 bit địa chỉ)

o Khả phân biệt địa cổng 256 cổng cho thiết bị ngoại vi (sử dụng bit để đánh địa cho cổng)

o Tốc độ  (s/lệnh)

o Tần số đồng hồ: fCLK =  MHz

Ứng dụng:

o Điều khiển hệ thống công nghiệp

o Chế tạo máy tính bit Apple II

1.2.3 Thế hệ (1978 đến 1982)

Trong khoảng thời gian Intel cho đời VXL 8086, 8088, 80186, 80286 Motorola có VXL 68000, 68010

Đặc điểm vi xử lý khoảng thời gian là: o Là vi xử lý 16 bit liệu

o Tập lệnh đầy đủ

o Khả phân biệt địa nhớ từ MB đến 16 MB

o Khả phân biệt địa cổng 64 K cổng cho thiết bị ngoại vi (đối với VXL Intel)

o Tốc độ 0,1  (s/lệnh)

o Tần số đồng hồ: fCLK =  10 MHz

Ứng dụng:

Chế tạo máy tính IBM PC, PC/XT, PC/AT máy tính Macintosh Apple

1.2.4 Thế hệ (1983 đến nay)

Trong thời gian Intel thể sức mạnh vượt trội hãng khác việc chế tạo vi xử lý Intel liện tục cho đời VXL 80386, 80486 VXL 32 bit liệu, có bên đơn vị quản lý nhớ (MMU) cho phép chạy chế độ nhớ ảo đa nhiệm Tiếp theo VXL Pentium, Pentium II, Pentium III, Pentium IV VXL 64 bit liệu

Motorola có VXL 68020, 68030, 68040, 68060

Đặc điểm vi xử lý khoảng thời gian là:

o 32 bit địa chỉ, nên chế độ thực khả phân biệt địa nhớ GB Trong chế độ nhớ ảo chúng có khả quản lý khơng gian nhớ lên tới 64 TB (Teta Byte)

o Cơ chế xử lý xen kẽ dòng mã lệnh (Pipline)

o Bộ nhớ ẩn (Cache)

o Có quản lý nhớ (MMU), đồng xử lý tốn học tích hợp bên

(7)

o Tần số đồng hồ: fCLK = 10  100 MHz cao

Ứng dụng:

o Chế tạo máy tính có tốc độ cao, máy chủ đáp ứng cho xử lý lớn thống kê hàng ngày ngân hàng, khí tượng thuỷ văn, mơ trình, lĩnh vực quân

o Các máy tính

1.3 Giới thiệu cấu trúc hệ vi xử lý

Chúng ta tìm hiểu qua đời vị trí vi xử lý Bộ VXL thành phần (trái tim) máy tính, kết hợp với phận mạch điện tử khác nhớ (bộ nhớ bán dẫn), phối ghép vào để tạo nên hệ vi xử lý nói chung mà máy tính trường hợp ứng dụng thể hệ vi xử lý

 CPU (Central Processing Unit) - Bộ xử lý trung tâm

 Memory: Bộ nhớ bán dẫn

 I/O (Input/Output): Khối phối ghép với thiết bị ngoại vi

 Bus tập đường dây truyền thơng tin, tín hiệu gồm:

 Data bus

 Control bus

 Address bus

1.3.1 CPU - Bộ xử lý trung tâm

Là mạch điện tử có độ tích hợp cao (là trái tim hệ vi xử lý) Ngày thường vi mạch có độ tích hợp VLSI

Chức năng:

o Điều khiển hoạt động hệ vi xử lý (hoạt động tính tốn)

o Thực lệnh, xử lý liệu

Nguyên tắc hoạt động

CPU

Memory ROM RAM

I/O Interfacing

Thiết bị vào

Thiết bị

Address bus

Control bus Data bus

(8)

Hoạt động theo chương trình nằm nhớ Nó nhận nhận lệnh từ nhớ, lệnh ghi dạng bit 0, sau giải mã lệnh thành xung điều khiển tương ứng thao tác lệnh để điều khiển khối chức thực thao tác Q trình thực bao gồm trao đổi liệu với nhớ Để thực trên, bên CPU có ghi lưu địa lệnh chuẩn bị thực hiện, gọi ghi trỏ lệnh (Instruction Pointer - PC), hay cịn gọi đếm chương trình (Program Counter - PC)

Các thành phần vi xử lý:

o Đơn vị điều khiển (Control Unit - CU): điều khiển hoạt động CPU thành phần khác hệ theo chương trình định (dãy lệnh) xung điều khiển

o Đơn vị số học logic (Arithmetic and Logic Unit - ALU): thực chức xử lý liệu (tính tốn) cộng, trừ, nhân, chia, NOT, AND, OR

o Tập ghi (Registers Set): ngăn nhớ đặc biệt nằm CPU để tăng tốc độ trao đổi liệu Một số ghi lưu trữ thông tin tạm thời phục vụ cho việc thực chương trình

o Bus bên (Internal Bus): Hệ thống bus CPU tập đường dây làm

nhiệm vụ kết nối, vận chuyển thơng tin (tín hiệu) thành phần với

1.3.2 Bộ nhớ bán dẫn (ROM, RAM)

Là phận quan trọng hệ vi xử lý Nó có nhiệm vụ lưu trữ chương trình liệu Bộ nhớ bao gồm nhớ nhớ ẩn (cache L1, L2) Khi khởi động máy, chương trình điều khiển chứa ROM điều khiển hoạt động toàn hệ Các chương trình ứng dụng, phần chương trình điều khiển, kết chạy chương trình để RAM Ngồi cịn có nhớ ngồi (ổ đĩa từ, quang ) lưu trữ lâu dài chương trình liệu, thiết bị ngoại vi

1.3.3 Hệ thống vào (I/O) Chức

Giao tiếp, trao đổi thông tin hệ vi xử lý với giới bên

Các thành phần

o Thiết bị ngoại vi: Bàn phím, hình, chuột, máy in, ổ đĩa từ, ổ đĩa quang chuyển đổi ADC, DAC , chuyển đổi thơng tin dạng thành dạng phù hợp với máy tính ngược lại liên hệ với máy tính thơng qua khối phối ghép vào/ra

o Mạch phối ghép vào/ra dùng ghép nối thiết bị ngoại vi với hệ vi xử lý (máy tính) Trong mạch phối ghép vào/ra có phận phối ghép cụ thể hệ thống bus với giới bên gọi cổng vào (I/O port) Mỗi cổng có địa xác định I/O port vào: nhận thơng tin từ bên ngồi vào hệ thống, I/O port ra: đưa thông tin từ hệ giới bên

1.3.4 Liên hệ khối

Hệ thống bus tập đường dây dùng để kết nối, trao đổi thông tin từ phần mạch tới thành phần khác (các khối) phạm vi máy tính (1 hệ vi xử lý)

(9)

Bus địa

Theo phát triển vi xử lý, độ rộng bus địa tăng từ 16, 20, 24 32 bit Bus địa dùng để vận chuyển địa từ CPU đến nhớ hay mạch phối ghép vào/ra để tìm ngăn hay nhớ cổng vào/ra cần trao đổi liệu

o Khả phân biệt địa CPU phụ thuộc độ rộng bus địa

o Bus địa gồm An-1 A0 (n bit)  quản lý 2n địa

o Độ rộng bus địa cho biết khả phân biệt quản lý không gian nhớ

Bus liệu

Độ rộng bus liệu thường 8, 16, 32 64 tuỳ theo vi xử lý Ngày vi xử lý thường làm việc với bus liệu có độ rộng 64 bit, chí 128 bit Độ rộng bus liệu định số bit liệu mà CPU có khả nhận hay gửi (đọc/ghi) hay xử lý lúc

Bus liệu bus chiều, liệu truyền từ CPU đến nhớ hay cổng vào/ra ngược lại

Bus điều khiển

Độ rộng bus điều khiển thường nhỏ độ rộng bus địa bus liệu Mỗi tín hiệu điều khiển có chiều định CPU gửi tín hiệu điều khiển tới khối đồng thời nhận tín hiệu điều khiển từ khối gửi đến Trong chừng mực coi bus điều khiển chiều Tính chiều khơng phải tín hiệu điều khiển cụ thể mà nhóm tín hiệu

o Các tín hiệu phát từ CPU: MEMR (tín hiệu điều khiển đọc nhớ), MEMW (tín hiệu điều khiển ghi nhớ), IOR (tín hiệu điều khiển đọc cổng vào ra), IOW (tín hiệu điểu khiển ghi cổng vào ra)

o Tín hiệu điều khiển ngắt: INTR

o Tín hiệu điều khiển chuyển nhượng bus (HOLD, HLDA)

(10)

Chƣơng BỘ VI XỬ LÝ 8088 CỦA INTEL 2.1 Giới thiệu hoạt động vi xử lý 8088

2.1.1 Giới thiệu chung

Bộ vi xử lý 8088 thuộc họ vi xử lý Intel Điển hình: 8085 vi xử lý bit

8086 vi xử lý 16 bit hoàn chỉnh 8088 vi xử lý 16 bit trong/ bit ngồi

Các đặc tính kỹ thuật chủ yếu:

o Số ghi: 14 thanhg ghi 16 bit

o Bus địa chỉ: 20 bit

o Bus liệu: 16 (8086) (8088)

o Tập lệnh: 115 (là số lệnh công bố nhiều tài liệu)

o Tốc độ chuẩn: 4.77 MHz

o Số chân vi xử lý: 40

Bộ vi xử lý 8086 Intel phát triển từ năm 1978 vào đưa vào thị trường từ năm 1980 Đây vi xử lý 16 bit bán hoàn chỉnh, ghi bên 16 bit xử lý 16 bit liệu lúc, 8086 liên hệ với kênh số liệu bên bus liệu 16 bit bus địa 20 bit

Bộ vi xử lý 8088 đời sau 8086, có cấu trúc bên tập lệnh hoàn toàn giống 8086, khác 8086 kênh truyền liệu với bên 8088 sử dụng kênh liệu bit nên việc truyền liệu ghi với nhớ chậm so với 8086 Đây bước lùi kỹ thuật đem lại nhiều lợi ích kinh tế Tại thời điểm lịch sử đó, bus DataMaster bit sử dụng rộng rãi thị trường, nhiều loại card mở rộng chip hỗ trợ có sẵn thị trường loại bit nên giá thấp loại 16 bit tương ứng Việc sử dụng bus liệu bit giúp cho người sử dụng nâng cấp máy tận dụng card bit máy cũ phải mua với giá thấp Đồng thời giúp cho nhà sản xuất máy tương thích với IBM PC có thêm nhiều hội lựa chọn sản phẩm hãng khác Chiến lược phát triển có tính kế thừa góp phần làm cho khách hàng IBM ngày gia tăng

Chọn vi xử lý 8088 để nghiên cứu vì:

o Tập lệnh chung cho vi xử lý nói

o Tính phức tạp vừa phải, phù hợp với người tìm hiểu

2.1.2 Cấu trúc hoạt động VXL 8088

Sự hoạt động vi xử lý 8088/8086 thực việc thực lặp lặp lại thao tác lấy lệnh (fetch), giải mã lệnh (decode) thực (execute) Sơ đồ khối vi xử lý 8088/8086 hình vẽ với đơn vị chính:

- EU (Execution Unit): Đơn vị (khối) thực lệnh

(11)

EU

Đơn vị EU 8088 8086 giống nhau, bao gồm ALU, ghi cờ, ghi đệm ghi đa Các bus liệu bên EU 16 bit EU không nối trực tiếp với bên ngồi, nhận lệnh từ hàng đợi lệnh bên BUI Nếu lệnh cần truy nhập nhớ cổng vào/ra (I/O port - thiết bị ngoại vi) EU yêu cầu BIU lấy gửi liệu Tất địa mà EU thao tác 16 bit, gửi sang BIU BIU thực tính tốn để tạo địa vật lý 20 bit phát chân địa chip

Các ghi

Có ghi, thành phần nhớ có tốc độ truy nhập cao Bao gồm ghi đa Ax, Bx, Cx, Dx Mỗi ghi 16 bit phân chia thành ghi bit làm việc độc lập

 AX (Accumulator, Acc): Thanh chứa, chứa tạm thời liệu (toán hạng, kết phép toán nhân, chia coi Acc) AX phân chia thành AH (Phần cao) AL (Phần thấp)

 BX (Base): Thanh ghi sở, thường dùng để chứa địa sở cần truy nhập lệnh XLAT BX phân chia thành BH (Phần cao) BL (Phần thấp)

 CX (Count): Bộ đếm, thường dùng để đếm số lần lặp cơng việc (số lần lặp vịng lặp) CX phân chia thành CH (Phần cao) CL (Phần thấp) CX thường dùng để chứa số lần lặp lệnh LOOP, CL thường chứa số lần dịch quay lệnh dịch quay ghi

các ghi tạm

thanh ghi cờ

Logic điều khiển

BUS AX

BX CX DX SP BP SI DI

Khối điều khiển

của EU

Đệm lệnh (hàng đợi lệnh) (6 byte cho 8086)

BUS Bus địa (20 bit)

các ghi đa

các ghi đoạn trỏ lệnh ghi

con trỏ số

Bus liệu ALU(16bit)

Bus liệu (8 bit)

Bus bit liệu 20 bit địa

EU BIU

(12)

AX: Accumulator BX: Base

CX: Count DX: Data Stack Pointer Base Pointer Source Index

Destination Index Instruction Pointer Status flags

Code Segment Data Segment Stack Segment Extra Segment

General Registers

Segment Registers

 DX (Data): Thanh ghi đữ liệu, sử dụng để chứa toán hạng, kết DX AX dùng để chứa toán hạng kết phép nhân, chia số 16 bit DX chứa địa cổng lệnh vào trực tiếp (IN, OUT) DX phân chia thành DH (Phần cao) DL (Phần thấp)

SP BP SI DI IP FLAGS

Hình vẽ: Bộ vi xử lý 8088 tập ghi

Các ghi trỏ, số

Các ghi SP, BP ghi trỏ không tách rời

 SP (Stack Pointer): Thanh ghi trỏ ngăn xếp, trỏ vào đỉnh thời ngăn xếp nằm đoạn ngăn xếp SS (Nó ln kết hợp với ghi SS) Ta có địa logic SS: SP Sau thao tác cất word vào stack (thao tác Push) SP tự động giảm đơn vị, sau thao tác lấy word khỏi stack (thao tác Pop), SP tự động tăng đơn vị

 BP (Base stack Pointer): Con trỏ sở, trỏ vào liệu cụ thể nằm đoạn ngăn xếp SS Ta có địa logic SS: BP

 SI (Source Index): Thanh ghi số nguồn (hay nguồn), vào liệu nằm đoạn DS Ta có địa logic DS: SI

 DI (Destination Index): Thanh ghi số đích, liệu đoạn DS Ta có địa logic DS: DI

Ta có cặp SP, BP với SS SI, DI với DS

Trong lệnh thao tác với liệu kiểu chuỗi cặp ES:DI ứng với địa phần tử thuộc chuỗi đích cịn cặp DS:SI ứng với địa phần tử thuộc chuỗi nguồn

Khối ALU

Làm nhiệm vụ thực lệnh số học logic

 Số học: +, -, *, /, so sánh, đảo dấu

 Logic: NOT, AND, OR, XOR Thanh ghi cờ:

Đây ghi 16 bit, bit sử dụng để thể trạng thái vi xử lý thời điểm định trình thực chương trình (dãy câu lệnh),

AH AL

BH BL

CH CL

DH DL

(13)

chỉ dùng bit vi xử lý 8088/8086 Mỗi bit gọi cờ (flag) Giá trị cờ biểu diễn ký hiệu gợi nhớ cách biểu diễn chương trình Debug DOS

15 14 13 12 11 10 x x x x O D I T S Z x A x P x C

Các cờ vi xử lý 8085

(x: Không định nghĩa (don't care), với bit thấp cờ vi xử lý 8085)

Hình vẽ: Sơ đồ ghi cờ 8088/86

 Cờ trạng thái: Biểu diễn trạng thái phép toán vừa thực

 CF (Carry Flag): Cờ nhớ (cờ tràn)

CF = (CY - CarrY) kết phép tốn vượt (tràn) khn khổ biểu diễn (có nhớ (mượn) lên (từ) MSB), CF = (NC - No Carry) trường hợp ngược lại Cờ thường sử dụng thực phép cộng, trừ số nhiều byte

Ví dụ:

1011 0001 + 0110 1001 10001 1010

 PF (Parity Flag): Cờ chẵn lẻ

PF = (PE - Parity Even) số bit kết phép toán (hay phép vận chuyển liệu) chẵn, PF = (PO - Parity Old) trường hợp ngược lại

 AF (Carry Flag): Cờ nhớ phụ (tràn phụ - cờ bổ trợ)

Cờ có ý nghĩa ta làm việc với số BCD AF = (AC - Auxiliary Carry) có nhớ mượn từ số BCD thấp (4 bit thấp) sang số BCD cao (4 bit cao) AF = (NA - No Auxiliary carry) trường hợp ngược lại

 SF (Sign Flag): Cờ dấu Trong vi xử lý 8088/8086 số âm biểu diễn dạng số bù 2, nên phải dùng cờ SF để thị dấu kết

SF = (NG - NeGative), kết phép toán số âm, SF = (PL- PLus) trường hợp ngược lại

 ZF (Zero Flag): Cờ rỗng

ZF = (ZR - ZeRo) kết phép toán = 0, ZF = (NZ-Non Zero) trường hợp ngược lại

 OF (Overflow Flag): Cờ tràn

OF = (OV-OVerflow) kết số bù vượt khn khổ biểu diễn (tràn số học, hay nói cách khác: cộng hai số dấu mà kết số trái dấu OF = 1), OF = (NV-Non oVerflow) trường hợp ngược lại (cờ làm việc với số có dấu)

 Cờ điều khiển

Cờ trạng thái phụ thuộc kết phép tốn, cịn với cờ điều khiển ta thiết lập nhờ lệnh

(14)

IF = (EI-Enable Interrup), CPU cho phép ngắt, IF = (DI-Disable Interrup) CPU không cho phép ngắt (cấm) loại ngắt che (Maskable)

 TF (Trap Flag): Cờ bẫy

TF = CPU làm việc chế độ chạy lệnh, thường dùng để gỡ rối chương trình (debug) Sau thực xong lệnh, vi xử lý phát lệnh ngắt (INT) để có kiểm tra chương trình

 DF (Direction Flag): Cờ hướng

Điều khiển hướng xử lý thao tác chuỗi DF = (DN-DowN) lệnh vận chuyển liệu hay xử lý chuỗi thao tác lùi từ phải đến trái (địa cao đến địa thấp) DF=0 (UP) trường hợp ngược lại (thao tác phần tử từ địa thấp đến địa cao) Cờ thường lập chương trình người sử dụng có lệnh thao tác chuỗi

tiến (thuận – theo chiều tăng địa chỉ) lùi (ngược – theo chiều giảm địa chỉ)

BIU

 Hàng đợi: Là tập ghi

Với 8086 hàng đợi lệnh byte, 8088 hàng đợi lệnh byte nên chứa tối đa lệnh CPU chứa tập ghi theo kiểu LIFO

Cơ chế:

 Đọc lệnh (lấy lệnh)

 Giải mã lệnh

 Thực

 Thanh ghi IP: Thanh ghi trỏ lệnh, trỏ vào lệnh chuẩn bị thực nằm đoạn CS (CS: IP) Sau đọc byte, IP tự động tăng thêm Như thực tế cặp CS:IP trỏ lệnh chứa địa đầy đủ lệnh nhớ

 Thanh ghi đoạn:

 CS (Code Segment): Thanh ghi đoạn mã, ghi địa đoạn mã lệnh, chứa địa sở (địa đoạn) chương trình thực

 DS (Data Segment): Thanh ghi đoạn liệu, ghi địa đoạn liệu, chứa địa đoạn vùng liệu mà chương trình thực sử dụng Vùng thường chứa biến chương trình

 SS (Stack Segment): Thanh ghi đoạn ngăn xếp, ghi địa đoạn nhớ ngăn xếp (stack) chương trình chạy

 ES (Extra Segment): Thanh ghi đoạn liệu phụ, ghi địa đoạn liệu bổ sung mà chương trình thực sử dụng Vùng thường chứa biến chương trình

8088 có 20 bit địa chỉ, ghi quản lý nhớ 16 bit Để xác định ngăn nhớ có địa 20 bit, dùng ghi 16 bit để xác định địa

(15)

Địa lệch (offset) ghi khác (Ax, Bx, Cx, ) Địa logic: DS:SI

DS:DI DS:XX

Địa vật lý (phải số 20 bit) xác định sau: Địa vật lý = địa đoạn*16 + địa lệch

Ví dụ: DS = 4000h, SI = 3F4Dh

Địa logic ngăn nhớ: 4000:3F4D

Địa vật lí ngăn nhớ: DS * 16 + SI = 40000 + 3F4D = 43F4Dh

Tại thời điểm CPU quản lý đoạn nhớ (DS, SS, CS, ES) , đồng thời truy nhập đoạn

Bộ nhớ chia thành nhiều đoạn Mỗi đoạn có kích thước tối đa 64 KB Vậy ta có 16 đoạn tách rời địa lệch thay đổi từ 0000 H đến FFFFh

Nếu địa đoạn thay đổi từ 0000h đến FFFFh có 64 Kđoạn Khi đoạn bao trùm lên đoạn kề 16 Byte (Paragraph)

Khi khởi động máy (hoặc Reset) CS nạp giá trị F000h, IP nạp giá trị FFF0h Địa thuộc đoạn cuối, nơi đặt ROM khởi động

Địa vật lý = F000h*16 + FFF0h = F0000h + FFF0h = FFFF0h

2.2 Chế độ địa 8088

2.2.1 Chế độ địa ghi

Dùng ghi toán hạng chứa liệu cần thao tác, tốc độ thực lệnh nhanh CPU khơng thời gian tìm kiếm liệu

Ví dụ:

MOV AL, BL ; AL:= BL MOV DS, BX ; DS:= BX ADD AL, DL ; AL:= AL + DL

2.2.2 Chế độ địa tức

Tốn hạng đích ghi, nhớ Tốn hạng nguồn giá trị cụ thể (hằng số)

Ví dụ:

MOV AL, 0Dh ; AL:=0Dh

Lệnh thường dùng để nạp liệu cần thao tác vào ghi

2.2.3 Chế độ địa tực tiếp

Một toán hạng địa offset ô nhớ chứa giá trị cần thao tác Tốn hạng ghi (khơng nhớ)

(16)

MOV AL, [04FCh] ; đưa vào ghi AL nội dung nhớ có địa logic ; DS:04FCh

2.2.4 Chế độ địa gián tiếp qua ghi

Một toán hạng ghi chứa địa offset ngăn nhớ chứa giá trị cần thao tác Toán hạng ghi (khơng ngăn nhớ)

Ví dụ:

MOV [BX], AL ; Đưa nội dung ghi AL vào ngăn nhớ có địa ; offset nằm ghi BX

2.2.5 Chế độ địa tƣơng đối sở

Thanh ghi BX, BP số giá trị dịch chuyển để xác định ngăn nhớ DS, SS chứa giá trị cần thao tác

Ví dụ:

MOV [BX + N], CL ; Đưa nội dung ghi CL vào ngăn nhớ có địa

; offset BX + N (DS:BX + N)

MOV AL, [BP + N] ; Đưa nội ngăn nhớ có địa offset BP + N vào ; ghi AL (SS:BP + N)

2.2.6 Chế độ địa tƣơng đối số

Thanh ghi DI, SI số giá trị dịch chuyển để xác định ngăn nhớ chứa giá trị DS cần thao tác

Ví dụ:

MOV [SI + N], AH ; Đưa nội dung ghi AH vào ngăn nhớ có địa ; offset SI + N (DS:SI + N)

MOV CL, [DI + N] ; Đưa nội dung ngăn nhớ có địa offset DI + N ; (DS:DI + N) vào ghi CL

2.2.7 Chế độ địa tƣơng đối số sở

Chế độ địa kết hợp chế độ địa Dùng ghi sở ghi số để tính địa tốn hạng

Ví dụ:

MOV [BX + SI + N], AX ; Đưa nội dung ghi AX vào ngăn nhớ có địa ; offset BX + SI + N (DS:BX + SI + N) MOV CL, [BP + DI + N] ; Đưa nội dung ngăn nhớ có địa offset

; BP + DI + N (DS:BP + DI + N) vào th.ghi CL

2.3 Mô tả tập lệnh 8088

Tập lệnh vi xử lý 8088 nói chung chia thành nhóm, với nhóm thao tác liệu nhóm

đặc biệt (gồm thị để điều khiển) Một lệnh thường có cấu trúc sau:

2.3.1 Nhóm lệnh chuyển liệu

Nhóm thực vận chuyển liệu (sao chép - copy) từ nơi đến nơi khác

M

(17)

MOV đích, nguồn (Move a Word or Byte)

Lệnh thực chuyển liệu từ nguồn tới đích (đích<=nguồn), liệu byte word (từ) Các tốn hạgn tìm thấy qua chế độ địa khác Lệnh khơng tác động đến cờ

LDS đích, nguồn (Load Register and DS with Word from Memory)

Lệnh thực nạp word từ nhớ vào ghi cho lệnh word vào ghi DS (đích <= nguồn, DS <= nguồn+2)

Ứng dụng: thường nạp địa đầu vùng nhớ chứa chuỗi nguồn vào SI DS trước dùng đến lệnh thao tác chuỗi Lệnh không tác động đến cờ

Ví dụ:

LDS SI, Str ; Lệnh nạp vào SI nội dung ô nhớ Str Str+1, ; nạp vào DS nội dung ô nhớ Str+2 Str+3, ; nằm DS

LEA đích, nguồn (Load Effective Address)

Lệnh thực nạp địa hiệu dụng vào ghi Tốn hạng 'đích' thường ghi: BX, CX, DX, BP, SI, DI Toán hạng 'nguồn' tên biến đoạn DS lệnh nhớ cụ thể

đích<=địa lệch nguồn (đích<=@nguồn), đích <= địa hiệu dụng nguồn Lệnh không tác động đến cờ

Ví dụ:

LEA DX, Str ; Lệnh nạp địa offset Str vào DX

LEA CX, [BX] ; Lệnh nạp địa hiệu dụng (EA-Effective Address) ; EA = BX

LEA CX, [BX][DI] ; Lệnh nạp địa hiệu dụng EA = BX + DI

LES đích, nguồn

Lệnh giống lệnh LDS byte nạp vào ghi ES

Ứng dụng: thường nạp vào DI ES địa đầu vùng nhớ chứa chuỗi trước thực lệnh thao tác chuỗi Lệnh khơng tác động đến cờ

Ví dụ:

LES DI, Str ; Lệnh nạp địa offset Str vào DX

IN Acc, Port (Input data from a port)

Đọc liệu từ cổng vào/ra vào ghi Acc (Acc <= {Port}) Với {Port} liệu cổng có địa Port (là địa bit = 00h FFh)

Acc AL => đọc bit từ cổng Port, AX => đọc 16 bit từ cổng Port Port+1 Thường dùng DX để chứa địa cổng nên có địa từ 0000h FFFFh

Viết lệnh: IN Acc, DX

(18)

Ví dụ:

MOV DX, 07F8h

IN AL, DX ; Đọc byte từ cổng có địa 07F8h

OUT Acc, Port (Output a byte or a word to a port)

Đưa liệu từ ghi Acc đến cổng vào/ra

Acc => Port

Lệnh thao tác ngược lại với lệnh IN, tính chất hồn tồn tương tự Lệnh khơng tác động đến cờ

STC (Set the Carry fag): Lập cờ nhớ: CF <=

Lệnh không tác động đến cờ khác

STD (Set the Direcion fag): Lập cờ hƣớng: DF <=

Lệnh định hướng thao tác cho lệnh làm việc với chuỗi theo chiều lùi (<=) Các ghi liên quan: SI, DI tự động giảm làm việc xong với phần tử chuỗi Lệnh không tác động đến cờ

STC (Set the Interrupt fag): Lập cờ cho phép ngắt: IF <=

Lệnh lập IF yêu cầu ngắt tác động vào chân INTR CPU nhận biết IF=1, INTR=1 => CPU bị ngắt, cất ghi cờ, địa trở vào Stack thực chương trình phục vụ ngắt Lệnh khơng tác động đến cờ khác

CLC (Clear the Carry flag): Xoá cờ nhớ: CF <=

Lệnh không tác động đến cờ khác

CLD (Clear the Direction flag): Xoá cờ hƣớng: DF <=

Lệnh định hướng thao tác cho lệnh làm việc với chuỗi theo chiều tiến (=>) Các ghi liên quan: SI, DI tự động tăng làm việc xong với phần tử liệu chuỗi Lệnh không tác động đến cờ khác

CLI (Clear the Interrupt flag): Xoá cờ cho phép ngắt: IF <=

Khi thực lệnh này, ngắt che bị che Lệnh không tác động đến cờ khác

CMC (Complement the Carry flag): Đảo cờ nhớ: CF <= CF

Lệnh cập nhật CF, không tác động đến cờ khác

PUSH nguồn

Push Word on the Stack: Cất từ vào ngăn xếp

 SP <= SP-2

 {SP} <= nguồn

Tốn hạng nguồn tìm theo chế độ địa khác Lệnh thường cặp với lệnh POP Lệnh không tác động đến cờ

POP đích

(19)

 đích <= {SP}

 SP <= SP+2

Toán hạng đích tìm theo chế độ địa (khơng ghi đoạn mã: CS) Dữ liệu để ngăn xếp không thay đổi SS không thay đổi Lệnh không tác động đến cờ

POPF

Pop Word from top of Stack to Flag register: Lấy word từ đỉnh ngăn xếp vào ghi cờ

 RF <= {SP}

 SP <= SP+2

Dữ liệu để ngăn xếp không thay đổi SS không thay đổi Lệnh không tác động đến cờ

2.3.2 Nhóm lệnh số học

ADC đích, nguồn (Add with carry: cộng tốn hạng có nhớ) đích <= đích+nguồn+CF

Các tốn hạng đích, nguồn tìm theo chế độ địa chỉ, phải chứa liệu độ dài (cùng kiểu) Không ô nhớ không ghi đoạn Điều áp dụng hầu hết cho tất lệnh số học có cú pháp tương tự

Lệnh cập nhật cờ: AF, CF, OF, PF, SF, ZF

+ ADD đích, nguồn (Add: cộng tốn hạng có nhớ) đích <= đích+nguồn

Các tốn hạng đích, nguồn tìm theo chế độ địa chỉ, phải chứa liệu độ dài (cùng kiểu) Không ô nhớ không ghi đoạn (Tính chất giống với lệnh ADC)

Lệnh cập nhật cờ: AF, CF, OF, PF, SF, ZF

SBB đích, nguồn (Substract with Borrow: Trừ có mƣợn) đích <= đích-nguồn-CF

Các tốn hạng đích, nguồn tìm theo chế độ địa chỉ, phải chứa liệu độ dài (cùng kiểu) Không ô nhớ khơng ghi đoạn (Tính chất giống với lệnh ADC)

Lệnh cập nhật cờ: AF, CF, OF, PF, SF, ZF

AF, PF liên quan đến bit thấp

SUB đích, nguồn (Substract: Trừ tốn hạng) đích <= đích-nguồn

Các tốn hạng đích, nguồn tìm theo chế độ địa chỉ, phải chứa liệu độ dài (cùng kiểu) Không ô nhớ khơng ghi đoạn (Tính chất giống với lệnh ADC)

(20)

AF, PF liên quan đến bit thấp

Chú ý: Các ví dụ cho lệnh ADC, ADD, SBB, SUB tham khảo tài liệu Kỹ thuật Vi xử lý - Văn Thế Minh phụ lục tài liệu

MUL nguồn (Multiply Unsigned Byte or Word)

Nhân số khơng dấu Tốn hạng 'nguồn' số nhân, tìm theo chế độ địa Tuỳ theo độ dài (kích thước) tốn hạng 'nguồn' mà ta có trường hợp sau:

 'nguồn' bit (1 byte): AX <= AL*nguồn, số bị nhân phải số bit để ghi AL

 'nguồn' 16 bit (2 byte): DXAX <= AX*nguồn, số bị nhân phải số 16 bit để ghi AX

Nếu byte cao (hoặc 16 bit cao) 16 (hoặc 32) bit kết chứa CF=OF=0 Vậy CF, OF cho ta biết bỏ bit kết lệnh nhân

Lệnh cập nhật: CF, OF

Không xác định: AF, PF, SF, ZF

DIV nguồn (Unsigned Divide)

Chia số không dấu Tốn hạng 'nguồn' số chia, tìm theo chế độ địa Tuỳ theo độ dài (kích thước) tốn hạng 'nguồn' mà ta có trường hợp sau:

 'nguồn' bit (1 byte): AL <= lấy nguyên(AX/nguồn), AH <= lấy dư(AX/nguồn) Số bị chia phải số 16 bit để ghi AX

 'nguồn' 16 bit (2 byte):AX <= lấy nguyên(DXAX/nguồn), DX <= lấy dư(DXAX/nguồn) Số bị chia phải số 32 bit để theo thứ tự cặp ghi DXAX

Phần nguyên lấy làm tròn xuống theo số nguyên sát

Nếu 'nguồn' = thương lớn FFh (hoặc FFFFh tuỳ theo độ dài tốn hạng 'nguồn') 8088/8086 thực ngắt INT

Không xác định cờ: AF, CF, OF, PF, SF, ZF

IMUL nguồn (Integer Multiplication (Multiply signed Number))

Nhân số có dấu Tốn hạng 'nguồn' số nhân, tìm theo chế độ địa Tuỳ theo độ dài (kích thước) tốn hạng 'nguồn' mà ta có trường hợp sau:

 'nguồn' bit (1 byte): AX <= AL*nguồn, số bị nhân phải số bit có dấu để ghi AL

 'nguồn' 16 bit (2 byte): DXAX <= AX*nguồn, số bị nhân phải số 16 bit có dấu để ghi AX

Nếu tích thu nhỏ, khơng lấp đầy hết chỗ dành cho bit không dùng đến thay bit dấu

Nếu byte cao (hoặc 16 bit cao) 16 bit (hoặc 32 bit) kết chứa giá trị dấu CF=OF=0

Nếu byte cao (hoặc 16 bit cao) 16 bit (hoặc 32 bit) kết chứa phần kết CF=OF=0

(21)

Lệnh cập nhật: CF, OF

Không xác định: AF, PF, SF, ZF

IDIV nguồn (Integer Division (Signed Divide))

Chia số có dấu Tốn hạng 'nguồn' số chia, tìm theo chế độ địa Lệnh dùng để chia số nguyên có dấu Chỗ để ngầm định số chia, số bị chia, thương phần dư giống lệnh DIV giới thiệu Chỉ khác là:

 AL chứa thương (số có dấu), AH chứa phần dư (số có dấu) Dấu số dư trùng với dấu số bị chia (AX DXAX)

 Nếu 'nguồn' = thương nằm -128 127 (hoặc ngồi -32768 32767 tuỳ độ dài (kích thước) tốn hạng 'nguồn') 8088/8086 thực lệnh INT

NEG đích (Negate a Operand (From its 2's Complement))

Đảo dấu toán hạng (lấy bù tốn hạng) Tốn hạng đích tìm theo chế độ địa

đích <= 0-đích = not(đích+1)

Lệnh cập nhật: AF, CF, OF, PF, SF, ZF

INC đích (Increment Destination register or Memory)

Tăng tốn hạng đích lên Tốn hạng đích tìm theo chế độ địa

đích <= đích+1

Nếu đích = FFh (hoặc FFFFh) đích-1 = 00h (hoặc 0000h) mà không ảnh hưởng cờ CF Lệnh tương đương ADD đích,1

Lệnh cập nhật: AF, OF, PF, SF, ZF Khơng xác định CF

DEC đích (Decrement Destination register or Memory)

Giảm toán hạng đích Tốn hạng đích tìm theo chế độ địa

đích <= đích-1

Nếu đích = 00h (hoặc 0000h) đích-1 = FFh (hoặc FFFFh) mà không ảnh hưởng cờ CF Lệnh tương đương ADD đích,1

Lệnh cập nhật: AF, OF, PF, SF, ZF Không xác định CF

XCHG đích, nguồn (Exchange Operands)

Hốn đổi nội dung tốn hạng

đích <=> nguồn

Các tốn hạng đích, nguồn tìm theo chế độ địa chỉ, phải chứa liệu có độ dài (kích thước-kiểu) Khơng đồng thời ô nhớ, không ghi đoạn Sau thực XCHG tốn hạng chứa nội dung cũ toán hạng ngược lại

(22)

Lệnh thuộc nhóm lệnh vận chuyển liệu

2.3.3 Nhóm lệnh logic, dịch quay Các lệnh logic

NOT đích (Invert Each bit of an Operand (From its 1's Complement))

Lệnh lấy bù toán hạng (đảo bit tốn hạng) Tốn hạng đích tìm theo chế độ địa

đích <= not(đích)

Lệnh không tác động đến cờ

AND đích, nguồn (And Corresponding bits of Two Operand) tốn hạng

đích <= đíchnguồn

Các tốn hạng đích, nguồn tìm theo chế độ địa chỉ, phải chứa liệu độ dài (kích thước), khơng nhớ, khơng ghi đoạn

Ứng dụng: Thường dùng lệnh AND để 'che' (giữ lại) số bit tốn hạng cách nhân logic (AND) tốn hạng với tốn hạng tức có bit 0, vị trí cần 'che' (giữ lại) Tốn hạng tức lúc gọi mặt nạ

Lệnh xoá cờ CF, OF Cập nhật: PF, SF, ZF (PF có nghĩa tốn hạng bit), khơng xác định cờ AF

OR đích, nguồn (Logically Or Corresponding bits of Two Operands) Hoặc tốn hạng

đích <= đíchnguồn

Các tốn hạng đích, nguồn tìm theo chế độ địa chỉ, phải chứa liệu độ dài (kích thước), không ô nhớ, không ghi đoạn

Ứng dụng: Thường dùng lệnh Or để lập số bit tốn hạng cách cộng logic (Or) tốn hạng với tốn hạng tức có bit 0, vị trí cần lập

Lệnh xố cờ CF, OF Cập nhật: PF, SF, ZF (PF có nghĩa tốn hạng bit), khơng xác định cờ AF

XOR đích, nguồn (Exclusive Or Corresponding bits of Two Operands) Hoặc loại trừ tốn hạng

đích <= đíchnguồn

Các tốn hạng đích, nguồn tìm theo chế độ địa chỉ, phải chứa liệu độ dài (kích thước), khơng nhớ, khơng ghi đoạn Theo tính chất phép loại trừ, tốn hạng đích trùng tốn hạng gốc kết khơng (kết = 0) cờ CF, OF bị xoá

Ứng dụng: Lệnh thường dùng xoá mơt ghi

(23)

Các lệnh dịch, quay

SAL đích, CL (Shift Arithmetically Left): Dịch trái số học SHL đích, CL (Shift (Logically) Left): Dịch trái logic

Tốn hạng đích tìm theo chế độ địa Hai lệnh có tác động dịch trái số học (còn gọi dịch trái logic) Mỗi lần dịch MSB đưa qua cờ CF giá trị đưa vào LSB, thao tác gọi dịch logic CL phải chứa sẵn số lần dịch mong muốn

Trong trường hợp muốn dịch lần, ta viết lệnh trực tiếp: SAL đích, 1

Ứng dụng: Mỗi lần dịch, tương đương việc nhân toán hạng với số không dấu Vậy muốn nhân số khơng dấu với 2i ta dịch trái số bị nhân i lần Nói chung lệnh chạy nhanh lệnh MUL

Cờ OF <= dịch lần mà MSB thay đổi Không xác định (không đúng) sau nhiều lần dịch

CF <= MSB sau lần dịch, lệnh cịn dùng để tạo cờ CF từ giá trị MSB làm điều kiện cho lệnh nhảy có điều kiện

Cập nhật: SF, PF, ZF (PF có nghĩa tốn hạng bit) Khơng xác định AF

SAR đích, CL (Shift Arithmetically Right): Dịch phải số học

Tốn hạng đích tìm theo chế độ địa Lệnh có tác dụng dịch phải số học toán hạng Sau lần dịch MSB giữ lại, LSB đưa vào cờ CF CL chứa sẵn số lần dịch

Trong trường hợp muốn dịch lần, ta viết lệnh trực tiếp: SAR đích, 1

Ứng dụng: Sau lần dịch, tương đương việc chia tốn hạng với số có dấu Vậy muốn chia số có dấu với 2i ta dịch phải số bị chia i lần (vì gọi dịch phải số học) Nói chung lệnh chạy nhanh lệnh IDIV

Cờ OF <= dịch lần mà LSB thay đổi Không xác định (không đúng) sau nhiều lần dịch

CF <= LSB sau lần dịch, lệnh dùng để tạo cờ CF từ giá trị LSB làm điều kiện cho lệnh nhảy có điều kiện

Cập nhật: SF, PF, ZF (PF có nghĩa tốn hạng bit) Khơng xác định AF

SHR đích, CL (Shift (Logically) Right): Dịch phải logic

Tốn hạng đích tìm theo chế độ địa Lệnh có tác động giống lệnh SAL, SHL theo chiều ngược lại

ROL đích, CL (Rotate All Bits to the Left): Quay vòng sang trái

MSB LBS

CF

0

MSB LBS CF

MSB LBS CF

(24)

Tốn hạng đích tìm theo chế độ địa Lệnh có tác dụng quay vịng toán hạng sang trái MSB đưa qua cờ CF LSB CL phải chứa

sẵn số lần quay

Trong trường hợp muốn quay lần, ta viết lệnh trực tiếp:

ROL đích, 1

Ta thấy, CL=8 tốn hạng đích bit kết khơng bị thay đổi tốn hạng quay trịn vịng, cịn CL=4 nibble toán hạng bị đổi chỗ cho

Cờ OF <= quay lần mà MSB thay đổi Không xác định (không đúng) sau nhiều lần quay

CF <= MSB sau lần quay, lệnh dùng để tạo cờ CF từ giá trị MSB làm điều kiện cho lệnh nhảy có điều kiện

Cập nhật: CF, OF (chỉ cờ bị ảnh hưởng) Không xác định AF

ROR đích, CL (Rotate All Bits to the Left): Quay vịng sang phải

Tốn hạng đích tìm theo chế độ địa Lệnh có tác dụng quay vịng tốn hạng sang phải LSB đưa qua cờ CF MSB CL phải chứa sẵn số lần quay (tác động lệnh giống lệnh ROL theo chiều ngược lại)

RCL đích, CL (Rotate though CF to the Left): Quay trái qua cờ CF.

Lệnh quay tốn hạng sang trái thông qua cờ CF, CL phải chứa sẵn số lần quay

Trong trường hợp muốn quay lần, ta viết lệnh trực tiếp:

RCL đích, 1

Ta thấy, CL=9 tốn hạng đích bit kết khơng bị thay đổi CF với toán hạng ghi (8 bit) quay vòng

Cờ OF <= quay lần mà LSB thay đổi Không xác định (không đúng) sau nhiều lần quay

CF <= MSB sau lần quay

Cập nhật: CF, OF (chỉ cờ bị ảnh hưởng)

RCR đích, CL (Rotate though CF to the Right): Quay phải qua cờ CF

Lệnh quay tốn hạng sang phải thông qua cờ CF, CL phải chứa sẵn số lần quay

Trong trường hợp muốn quay lần, ta viết lệnh trực tiếp:

RCR đích, 1

Ta thấy, CL=9 tốn hạng đích bit kết khơng bị thay đổi CF với toán hạng ghi (8 bit) quay vòng

Cờ OF <= quay lần mà MSB thay đổi Không xác định (không đúng) sau nhiều lần quay

MSB LBS

CF

MSB LBS CF

MSB LBS

CF

(25)

CF <= LSB sau lần quay

Cập nhật: CF, OF (chỉ cờ bị ảnh hưởng)

2.3.4 Nhóm lệnh so sánh

CMP đích, gốc (Compare Byte or Word): So sánh byte hay từ (word) đích-gốc;

Tốn hạng đích, gốc tìm theo chế độ địa chỉ, phải chứa liệu có độ dài (kích thước) Khơng đồng thời nhớ, không ghi đoạn

Lệnh tạo cờ, không lưu kết so sánh không làm thay đổi giá trị toán hạng Lệnh thường dùng kèm với lệnh nhảy có điều kiện (nhảy theo cờ)

Khi so sánh số không dấu, ta có quan hệ bảng bên Lệnh cập nhật: AF, CF, OF, PF, SF, ZF

TEST đích, gốc (And Operands to Update Flag): Và toán hạng để tạo cờ đíchgốc;

Tốn hạng đích, gốc tìm theo chế độ địa chỉ, phải chứa liệu có độ dài (kích thước) Khơng đồng thời ô nhớ, không ghi đoạn

Lệnh tạo cờ, không lưu kết Sau lệnh giá trị tốn hạng khơng bị thay đổi Các cờ tạo làm điều kiện cho lệnh nhảy có điều kiện

Lệnh xố cờ CF, OF Cập nhật: PF, SF, ZF (PF liên quan đến bit thấp), không xác định cờ AF

2.3.5 Nhóm lệnh rẽ nhánh (nhảy), lặp

Việc sử dụng nhóm lệnh nhảy làm thay đổi tính câu lệnh hợp ngữ

Lệnh nhảy không điều kiện

JMP Nhãn (Uncondition Jump to Specified Destination) Nhảy (vô điều kiện) đến đích Nhãn

Lệnh bắt đầu địa ứng với nhãn 'Nhãn' Lệnh Jmp nhảy lên (về phía địa thấp) nhảy xuống (về phía địa cao) nhảy xa tối đa 1/2 đoạn (64Kbyte)

Lệnh không tác động đến cờ

Lệnh nhảy có điều kiện (nhảy thoả mãn số điều kiện)

Toán hạng CF ZF

(26)

Nhắc lại số từ tiếng Anh

A: Above (trên) Z: Zero (không) S: Signed

B: Below (dưới) G: Greater (lớn hơn) PO: Parity Old N: Not (phủ định – không) L: Less (nhỏ hơn) PE: Parity Even

E: Equal (bằng) P: Parity C: Carry (nhớ)

O: Overflow

JA/JNBE (CF+ZF = 0, so sánh không dấu) JAE/JNB/JNC (CF = 0, so sánh không dấu) JB/JC/JNAE (CF = 1, so sánh không dấu) JCXZ (CX = 0, không so sánh) JE/JZ (ZF = 1, so sánh không dấu )

JG/JNLE ((SFOF)+ZF = 0, so sánh có dấu ) JGE/JNL ((SFOF) = 0, so sánh có dấu ) JL/JNGE ((SFOF) = 1, so sánh có dấu ) JLE/JNG ((SFOF)+ZF = 1, so sánh có dấu ) JNE/JNZ (ZF = 0, so sánh không dấu )

JNO (OF = 0)

JNP/JPO (PF = 0)

JNS (SF = 0)

JO (OF = 1)

JP/JPE (PE = 1)

JS (SF = 1)

(Chú ý: Các lệnh nhảy không tác động đến cờ) Các lệnh lặp

LOOP NHAN (Jump to Specified Label if CX<>0 after autodecrement)

Lặp lại đoạn chương trình NHAN CX=0 Lệnh dùng để thực lặp lại đoạn chương trình khoảng từ NHAN đến hết lệnh LOOP NHAN số lần lặp CX=0 Số lần lặp CX phải nạp sẵn từ trước Sau lần thực lệnh LOOP NHAN CX tự động giảm (CX <= CX-1)

Lệnh không tác động đến cờ

LOOPE/LOOPZ NHAN (Loop while CX<>0 and ZF=1)

Lệnh thực lặp đoạn chương trình NHAN CX=0 ZF=0 Số lần lặp CX phải nạp từ trước Sau lần lặp CX tự động giảm (CX <= CX-1)

Lệnh không tác động đến cờ

LOOPNE/LOOPNZ NHAN (Loop while CX<>0 and ZF=0)

Lệnh thực lặp đoạn chương trình NHAN CX=0 ZF=1 Số lần lặp CX phải nạp từ trước Sau lần lặp CX tự động giảm (CX <= CX-1)

Lệnh không tác động đến cờ

(27)

Thực lặp lại lệnh đứng sau CX=0 Đây „tiếp đầu ngữ‟ dùng để viết trước lệnh thao tác với chuỗi mà ta muốn lặp lại số lần Số lần lặp CX phải nạp từ trước Sau lần lặp CX tự động giảm (CX <= CX-1)

REPE/REPZ (Repeat string instruction until CX=0 or ZF=0)

Lặp lại lệnh viết sau CX=0 ZF=0

REPNE/REPNZ (Repeat string instruction until CX=0 or ZF=1)

Lặp lại lệnh viết sau CX=0 ZF=1

2.3.6 Nhóm lệnh đặc biệt CALL TEN_ctc

Lệnh gọi chương trình có tên TEN_ctc đoạn mã với chương trình Chương trình phải nằm giới hạn dịch chuyển –32Kbyte 32Kbyte-1 so với lệnh sau lệnh CALL Sau cất IP vào Stack, IP <= IP+Dịch chuyển Nếu chương trình nằm đoạn mã khác chương trình hợp ngữ TEN_ctc phải khai báo chương trình xa

TEN_ctc Proc Far

HTL (Hall Processing): Dừng

Khi gặp lệnh hoạt động 8088 bị tạm dừng (bước vào trạng thái dừng) có tác động vào chân INTR, NMI Reset

INT N (Interrupt Program Execution): Ngắt, gián đoạn chƣơng trình đƣợc thực

(N=00h FFh, gọi số hiệu ngắt)

Khi gặp lệnh này, 8088 thực thao tác sau:

 SP <= SP-2, {SP} <= FR

 IF <= (cấm ngắt), TF <= (chạy suốt)

 SP <= SP-2, {SP} <= CS

 SP <= SP-2, {SP} <= IP

 IP <= {N*4}, CS <= {N*4+2}

Ví dụ:

Với N=5 thì:

CS <= {0016h} IP <= {0014h}

INTO (Interrupt on Overflow): Ngắt có tràn

Nếu OF=1 lệnh ngắt cơng việc làm vi xử lý thực lệnh ngắt INT

IRET(Interrupt Return)

Trở chương trình (CTC) từ chương trình phục vụ ngắt (ISR – Interrup Service Routin)

(28)

RET(Return from Procedure to Calling Program): Trở CTC từ ctc Viết lệnh: RET RET n (n: nguyên, dương)

Lệnh RET đặt cuối chương trình để vi xử lý biết tự động lấy lại địa trở chương trình

Nếu dùng lệnh RET n sau lấy lại địa trở (chỉ có IP có IP CS) SP <= SP+n (dùng để nhảy qua, khơng muốn lấy lại thơng số khác chương trình cịn lại stack)

Lệnh khơng tác động đến cờ

WAIT (Wait for TEST or INTR signal): Chờ tín hiệu từ chân TEST chân INTR

Lệnh đưa vi xử lý vào trạng thái nghỉ có tín hiệu mức thấp tác động vào chân TEST tín hiệu mức cao tác động vào chân INTR Nếu có yêu cầu ngắt yêu cầu ngắt chấp nhận 8088 trạng thái nghỉ sau thực xong ISR tương ứng, 8088 lại trở lại trạng thái nghỉ

NOP (No Operation): CPU khơng làm

Lệnh khơng làm gì, tăng giá trị ghi IP tiêu tốn chu kỳ đồng hồ (xung clock)

Lệnh không tác động đến cờ

(29)

Chƣơng LẬP TRÌNH BẰNG HỢP NGỮ CHO 8088 TRÊN MÁY TÍNH IBM PC VÀ CÁC MÁY TƢƠNG THÍCH IBM PC 3.1 Giới thiệu chung

Sau giới thiệu số lệnh vi xử lý 8088 => ta dùng lệnh để lập trình dùng hợp ngữ máy tính IBM PC (hoặc máy tương thích máy IBM PC) Vì loại máy tính có cấu trúc tiêu biểu hệ vi xử lý, ta sử dụng nhiều chức sẵn có cho chương trình thơng qua dịch vụ (các chương trình phục vụ ngắt) ngắt DOS BIOS Có thể sử dụng chương trình dịch hợp ngữ MASM 5.10 (Macro Assembler phiên 5.10) Microsoft với định nghĩa đoạn đơn giản chế độ nhớ nhỏ Ngoài ta sử dụng chương trình dịch hợp ngữ TASM 2.0 (Turbo Assembler phiên 2.0) Borland International để thực dịch chương trình

Ngơn ngữ assembly (hợp ngữ)

Các chương trình thực chuyển đổi chương trình người sử dụng viết ngơn ngữ sang ngơn ngữ khác gọi chương trình dịch (translate) Ngơn ngữ sử dụng để viết chương trình nguồn gọi ngơn ngữ nguồn cịn ngơn ngữ chương trình mà chương trình nguồn chuyển sang gọi ngơn ngữ đích

Người ta phân chương trình dịch làm loại dựa mối quan hệ ngơn ngữ nguồn ngơn ngữ đích sau:

 Khi ngôn ngữ nguồn biểu diễn ký hiệu cho ngơn ngữ máy số chương trình dịch gọi assembler ngôn ngữ nguồn gọi ngôn ngữ assembly (hợp ngữ)

 Khi ngôn ngữ nguồn ngôn ngữ bậc cao Pascal, C, ngơn ngữ đích ngơn ngữ máy biểu diễn ký hiệu cho ngơn ngữ chương trình dịch gọi compiler

Ngôn ngữ assembly khiết ngơn ngữ mà lệnh (chỉ thị) dịch sinh thị máy, điều có nghĩa có tương ứng 1-1 lệnh máy lệnh ngơn ngữ assembly Nếu dịng chương trình assembly chứa thị assmebly word nhớ chứa lệnh máy chương trình dài n dịng sinh chương trình ngơn ngữ máy dài n word

Sử dụng ngôn ngữ assmebly để lập trình dễ sử dụng ngơn ngữ máy (dạng số, dãy bit) nhiều Việc sử dụng tên địa ký hiệu thay cho số nhị phân (hoặc hệ 8, 10, 16) tạo nên khác biệt lớn Mọi người dễ dàng nhớ ký hiệu (symbol) viết tắt cho lệnh cộng (add), trừ (substract), nhân (multiply) chia (divide) ADD, SUB, MUL, DIV nhớ lệnh máy cho phép tốn dạng số, ví dụ là: 24576, 57344, 28672 29184 (trừ làm việc nhiều với chúng mà tự nhiên nhớ được) Người lập trình ngơn ngữ assembly cần nhớ tên ký hiệu gợi nhớ ADD, SUB, MUL, DIV, chúng assembler dịch lệnh máy Tuy nhiên muốn lập trình ngơn ngữ máy họ cần phải nhớ mã lệnh dạng số (hoặc liên tục tra cứu)

(30)

cấp địa số, người lập trình ngôn ngữ máy luôn phải làm việc với giá trị số địa

Vì mà từ có ngơn ngữ assembly đời nay, khơng cịn viết chương trình ngơn ngữ máy

Ngồi tương ứng (ánh xạ) 1-1 lệnh assembly vào lệnh máy, ngơn ngữ assembly cịn có tính chất khác làm cho khác hẳn ngơn ngữ lập trình bậc cao, người lập trình ngơn ngữ assembly truy cập tới tất đặc điểm máy tính vật lý Ví dụ, có bit báo tràn số (Overflow bit) chương trình ngơn ngữ assembly truy cập kiểm tra trực tiếp bit này, chương trình ngôn ngữ bậc cao (Pascal, C …) làm việc

Một khác biệt lớn quan chương trình assembly chương trình ngơn ngữ bậc cao chương trình ngơn ngữ assembly chạy họ máy, chương trình viết ngơn ngữ bậc cao nói chung chạy nhiều họ máy, ưu điểm lớn ngôn ngữ bậc cao so với ngôn ngữ assembly

Nói chung, tất việc thực ngơn ngữ máy thực ngôn ngữ assembly, nhiên ngôn ngữ bậc cao không làm cách hiệu

Khi xây dựng ứng dụng lớn, thơng thường người ta chọn ngơn ngữ bậc cao hướng tới thuật tốn giải vấn đề (Ngơn ngữ hướng tốn - problem-oriented language) mà khơng chọn ngơn ngữ assembly người lập trình phải ý tới chi tiết nhỏ nhặt lập trình Ngược lại, xây dựng chương trình nhỏ thực thao tác can thiệp sâu vào phần cứng máy tính người ta thường chọn ngơn ngữ assembly tính tối ưu, hiệu khả mạnh mẽ

3.2 Giới thiệu khung chƣơng trình

Với ngơn ngữ nào, ta lập trình ngơn ngữ ta phải tuân thủ chương trình viết cú pháp, quy định khung chương trình Từ chương trình dịch mã máy, tạo chương trình chạy (phần mở rộng: *.EXE *.COM)

Một chương trình hợp ngữ bao gồm dịng lệnh, lệnh viết dòng

 Một dịng lệnh lệnh thật dạng gợi nhớ (nmenomic) hay dạng ký hiệu (symbolic) vi xử lý

 Hoặc hướng dẫn chương trình dịch (Essembler directive)

Lệnh thật dạng gợi nhớ dịch mã máy cịn hướng dẫn chương trình dịch khơng, có tác dụng dẫn cho chương trình dịch thực cơng việc q trình dịch

Lệnh viết dạng chữ hoa hay chữ thường được, chúng cho tương đương dịng lệnh, chương trình dịch khơng phân biệt kiểu chữ

3.2.1 Cấu trúc lệnh hợp ngữ

Một dịng lệnh chương trình hợp ngữ (assembly) có cấu trúc sau:

Tên(Nhãn) Mã lệnh Các toán hạng Giải thích

(31)

LAP: Mov CL, AH ;Số lần lặp đặt ghi CL o LAP nhãn

o Mov mã lệnh

o CL, AH toán hạng

o Và trường giải thích bắt đầu dấu chấm phẩy (;)

Main Proc

o Main tên

o Proc mã lệnh giả hay hướng dẫn chương trình dịch (dùng để bắt đầu chương trình bắt đầu chương trình con)

Một lệnh khơng thiết phải có đầy đủ trường Tuỳ cơng việc cụ thể mà lệnh khuyết trường

Trƣờng tên (Nhãn)

Trường chứa nhãn, tên biến, tên tên thủ tục chương trình Tên nhãn chương trình dịch gán địa cụ thể ô nhớ

Quy tắc đặt tên (cũng giống quy tắc đặt tên ngôn ngữ Pascal)

 Dùng ký tự thuộc chữ (không phân biệt chữ hoa, chữ thường)

 Không bắt đầu chữ số, không chứa dấu cách

 Độ dài: 21 ký tự

 Có thể sử dụng ký tự đặc biệt như: ?, , _, @, $, %

 Trong trường hợp dùng dấu chấm (.), phải đặt vị trí tên nhãn

 Nhãn thường kết thúc dấu hai chấm (;)

Trƣờng mã lệnh

Trường gồm mã lệnh thật giả (hướng dẫn chương trình dịch):

 Lệnh thật: lệnh dạng gợi nhớ (nmemonic) vi xử lý Lệnh chương trình dịch dịch mã máy

 Hướng dẫn chương trình dịch khơng dịch

Trƣờng tốn hạng

Trường liệu cho thao tác, tuỳ lệnh cụ thể mà có 2, khơng có tốn hạng

Ví dụ:

Mov al, al ; Lệnh có tốn hạng Rol bx, cl ; Lệnh có tốn hạng Not bl ; Lệnh có tốn hạng Ret n ; Lệnh có tốn hạng

Ret ; Lệnh khơng có tốn hạng Sti ; Lệnh khơng có tốn hạng Nop ; Lệnh khơng có tốn hạng

(32)

Trƣờng giải thích

Trường bắt đầu dấu chầm phẩy (;), sau dịng giải thich Chương trình dịch bỏ qua khơng dịch trường

Lệnh viết dạng gợi nhớ vi xử lí, nhiên ln nên có trường Lời giải thích cần sát nghĩa cơng việc thực (khơng nên giải thích ý nghĩa câu lệnh)

3.2.2 Dữ liệu cho chƣơng trình hợp ngữ

Dữ liệu cho (của) chương trình hợp ngữ dạng hệ 2, hệ 10, hệ 16 dạng ký tự Đối với chương trình Debug (dùng để tìm lỗi cho chương trình hợp ngữ) liệu số đưọc ngầm định dạng hệ 16 Còn assembly liệu số ngầm định hệ 10 Khi cung cấp liệu cho chương trình, số cho hệ phải kèm hậu tố hệ (trừ hệ 10 - ngầm định) Riêng hệ 16, số bắt đầu chữ (a f A F) phải thêm số trước để chương trình dịch khơng nhầm với tên nhãn (B-Binary: Hệ 2; D-Decimal: Hệ 10; H-Hexa: Hệ 16)

Ví dụ:

1001b ; Số hệ 100 ; Số hệ 10 0ah ; Số hệ 16

Nếu liệu cho dạng ký tự phải bao đóng (đặt) ký tự cặp dấu nháy đơn

Ví dụ:

'a' ; Ký tự a 'abcd' ; Chuỗi ký tự

Với kiểu ký tự, cách ta cịn dùng mã ASCII ksy tự

Ví dụ:

'0' ; Ký tự

30h ; Mã ASCII ký tự

Với cách viết ví dụ chương trình dịch assembler

3.2.3 Biến

Một biến sử dụng chương trình hợp ngữ phải định nghĩa, chương trình dịch gán cho biến địa xác định nhớ

Biến đơn

Một biến đơn chương trình hợp ngữ định nghĩa theo mẫu sau: Tên_biến Kiểu Giá trị khởi tạo

 Tên: người sử dụng tự đặt theo quy tắc đặt tên

 Kiểu: kích thước (phạm vi) biểu diễn biến Có kiểu sau:

o DB (Define Byte): Kiểu byte (1 byte)

o DW (Define Word): Kiểu word (2 byte)

(33)

o DF (Define Farword): Kiểu farword (6 byte), dùng với vi xử lý 80386 trở lên

o DQ (Define Quadword): Kiểu Quadword (8 byte)

o DT (Define Ten byte): Kiểu Ten byte (10 byte)

Trong biến có kích tước lớn byte byte cao địa cao, byte thấp địa thấp (theo quy ước Big-endian Intel)

Ví dụ:

Ab db ; Định nghĩa biến có tên Ab, kích thước byte ; khởi tạo giá trị

Ab1 db ? ; Định nghĩa biến có tên Ab1, kích thước byte ; chưa khởi tạo giá trị

Ab2 dw 100h ; Định nghĩa biến có tên Ab2, kích thước byte ; được khởi tạo giá trị 100h = 256

Ab3 dw ? ; Định nghĩa biến có tên Ab3, kích thước byte ; chưa khởi tạo giá trị

Biến mảng

Một biến mảng chương trình hợp ngữ định nghĩa theo mẫu sau: Tên_biến Kiểu Các giá trị khởi tạo

 Tên: người sử dụng tự đặt theo quy tắc đặt tên

 Kiểu: kích thước (phạm vi) biểu diễn biến biết

Biến mảng biến hình thành từ dãy liên tiếp phần tử kiêu Khi định nghĩa biến mảng ta gán tên cho dãy liên tiếp phần tử có độ dài (kích thước) nhớ với giá trị ban đầu tương ứng

Ví dụ:

Ar db 1, 3, 2,

Định nghĩa biến có tên Ar, gồm phần tử, phần tử có kích thước byte (gồm byte dành chỗ cho nhớ từ địa ứng với Ar để chứa giá trị khởi đầu là: 1, 2, 4) Phần tử mảng có địa trùng với địa Ar có giá trị 1, phần tử thứ có địa Ar+1 có giá trị 2, …

Ta dùng tốn tử DUP để khởi đầu giá trị phần tử mảng với giá trị

Ví dụ:

Ar1 dw 100DUP(5)

Định nghĩa biến có tên Ar1, gồm 100 phần tử, phần tử có kích thước byte (gồm 200 byte dành chỗ cho nhớ từ địa ứng với Ar1 để chứa với giá trị khởi đầu cho byte (word) 5) Phần tử mảng có địa trùng với địa Ar1, phần tử có địa Ar1+2, Ar1+4, Ar1+6, …

Ar2 dd 20DUP(?)

(34)

đầu giá trị) Phần tử mảng có địa trùng với địa Ar, phần tử có địa Ar2+4, Ar2+8, Ar2+12, …

Đặc biệt ta dùng toán tử DUP lồng để khởi đầu giá trị phần tử mảng

Ví dụ:

Ar3 db 2, 2, 2DUP(1, 3DUP(5), 4)

Định nghĩa biến có tên Ar3, gồm 12 phần tử, phần tử có kích thước byte (gồm 12 byte dành chỗ cho nhớ từ địa ứng với Ar3 để chứa giá trị khởi đầu cho byte) Phần tử mảng có địa trùng với địa Ar3, phần tử có địa Ar3+1, Ar3+2, …

Dãy thứ tự giá trị phần tử là: 2, 2, 1, 5, 5, 5, 4, 1, 5, 5, 5,

Biến xâu

Biến kiểu xâu ký tự trường hợp dặc biệt biến mảng mà phần tử mảng ký tự Một xâu ký tự định nghĩa ký tự, xâu ký tự mã ASCII ký tự

Chúng ta định nghĩa biến xâu ký tự theo dịng ví dụ sau, chúng tương đương nhau:

Ví dụ:

Str1 db 'Co non'

Str2 db 'C', 'o', ' ', 'n', 'o', 'n' Str3 db 'C', 'o', ' ', 'non'

Str4 db 43h, 6fh, 32h, 6eh, 6fh, 6eh Str5 db 43h, 'o', 32h, 'n', 6fh, 6eh

Hằng

Trong chương trình hợp ngữ, giá trị không đổi thường gán tên làm cho chương trình rõ ràng, dễ đọc - gọi Hằng chương trình kiểu số kiểu ký tự Việc gán tên cho thực nhờ lệnh giả EQU (Equate) theo mẫu sau:

Tên_hằng Equ Giá trị khởi tạo

Ví dụ:

Cr Equ 0dh ; Carriage return Lf Equ 0ah ; Line feed Pa Equ 3f8h

Clause Equ 'Co non xanh tan chan troi' Str db Clause,'$'

Str1 db Clause, Cr, Lf, '$'

3.2.4 Khung chƣơng trình hợp ngữ

(35)

 Vùng liệu: Dùng để chứa biến, kết trung gian hay kết chạy chương trình

 Vùng mã lệnh: Dùng để chứa mã lệnh chương trình

 Vùng ngăn xếp: Dùng để phục vụ cho hoạt động chương trình gọi chương trình con, trở chương trình từ chương trình

Một chương trình hợp ngữ có cấu trúc vậy, để dịch tạo mã tương ứng với chương trình mã máy nói (có cấu trúc giống vậy) Chúng ta khai báo quy mô sử dụng nhớ vùng nhớ để sử dụng cách phù hợp, tiết kiệm, hiệu với cấu trúc chương trình

Khai báo quy mô sử dụng nhớ

Khai báo xác định kích thước cho đoạn mã liệu chương trình

Sử dụng hướng dẫn chương trình dịch Model đặt trước hướng dẫn khác chương trình theo mẫu sau:

.Model Kích_thƣớc

Ví dụ:

.Model Small Model Tiny

Có kiểu Kích_thước nhớ cho chương trình hợp ngữ sau:

 Tiny (hẹp): Mã lệnh liệu nằm gọn đoạn

 Small (nhỏ): Mã lệnh đoạn, liệu đoạn

 Medium (Trung bình): Mã lệnh đoạn, liệu đoạn

 Compact (Gọn): Mã lệnh đoạn, liệu đoạn

 Large (Lớn), Huge (Rất lớn - khổng lồ): Mã lệnh liệu đoạn Các mảng lớn 64Kbyte

Khai báo đoạn ngăn xếp

Ngăn xếp vùng nhớ phục vụ cho hoạt động chương trình gọi cheơng trình trở chương trình từ chương trình Tuỳ theo cấu trúcvà quy mơ chương trình mà ta khai báo kích thước đoạn Việc khai báo thực nhờ hướng dẫn chương trình dịch Stack theo mẫu sau:

.Stack Kích_thƣớc

Ví dụ:

.Stack 100

.Stack 100h ; 256

Chú ý: Nếu ta khơng khai báo kích thước đoạn chương trình dịch tự động gán giá trị Kbyte cho vùng ngăn xếp Đây kích thước lớn ứng dụng thơng thường Nói chung ta nên chọn 100 100h đủ

Khai báo đoạn liệu

Phần để định nghĩa biến chương trình

(36)

tương ứng với địa nào) nên ta định nghĩa tự thoải mái chương trình

Việc khai báo đoạn liệu thực nhờ hướng dẫn chương trình dịch .Data Định nghĩa biến, mảng thực tiếp sau lệnh giả thích hợp, thể sau:

Ví dụ:

.Data

Chao db 'Xin chao ban!','$' Crlf db 0dh, 0ah, '$' Pa Equ 300h

Khai báo đoạn mã lệnh

Phần chứa tồn mã lệnh chương trình Việc khai báo đoạn mã thực nhờ hướng dẫn chương trình dịch Code sau:

.Code

Tên_CTC Proc

Các lệnh ; Các lệnh chương trình Call Tên_ctc ; Gọi chương trình

Tên_CTC Endp

Tổng quát: Một thủ tục định nghĩa nhờ cặp thủ tục 'Proc - Endp ', chương trình thủ tục định nghĩa Lệnh giả Proc dùng để báo bắt đầu thủ tục lệnh giả Endp dùng để báo kết thúc thủ tục Một chương trình định nghĩa dạng thủ tục nhờ lệnh giả 'Proc - Endp ' sau:

Tên_ctc Proc

Các lệnh chương trình Ret

Tên_ctc Endp

Chú ý: Trong chương trình con, cuối chương trình có lệnh Ret lệnh trở chương trình từ chương trình

Để kết thúc tồn chương trình, ta dùng hướng dẫn chương trình dịch End sau: End Tên_CTC

Khung chƣơng trình hợp ngữ để dịch chƣơng trình *.exe

.Model Small Stack 100 Data

;Định nghĩa biến, mảng, Code

Tên_CTC Proc

;Khởi tạo đoạn liệu Mov ax, @Data Mov ds, ax

(37)

; Trở DOS dùng hàm 4ch ngắt 21h Mov ah, 4ch

Int 21h Tên_CTC Endp

;Các chương trình có định nghĩa End Tên_CTC

Khi chương trình *.exe nạp vào nhớ, DOS lập một mảng gọi đoạn mào đầu chương trình (Program Segment Prefix - PSP) gồm 256 byte dùng để chứa thông tin liên quan đến chương trình DOS, gắn vào đầu chương trình DOS sử dụng thông tin để giúp chạy chương trình, PSP DOS khởi tạo cho chương trình dù chúng viết ngơn ngữ Do chương trình nạp vào nhớ, DOS đưa thơng số liên quan đến chương trình vào ghi DS ES (cụ thể DS ES trỏ vào đầu PSP) mà không chứa giá trị địa ghi đoạn liệu chương trình Để chương trình chạy đúng, ta phải khởi đầu cho ghi DS ES nhờ lệnh:

Với 8088/8086 số vi xử lý khác thuộc họ 80x86 Intel, lý kỹ thuật mà chúng khơng cho phép chuyển giá trị số (chế độ địa trực tiếp) vào ghi đoạn nên ta phải dùng ghi ax làm trung gian Thanh ghi ax thay ghi đa khác

@Data tên đoạn liệu, .Data dđịnh nghĩa hướng dẫn chương trình dịch => chương trình dịch dịch tên @Data thành giá trị địa đoạn liệu

Chương trình ví dụ1.asm để dịch *,exe, thực xuất dòng ký tự lên hình Dịng ký tự lời chào dòng trống:

.Model Small Stack 100 Data

Chao db 'Chuc ban da cong voi chuong trinh dau tay$' Crlf db 0dh, 0ah, '$'

.Code

Vidu1 Proc

Mov ax, @Data ; Lấy địa đoạn liệu Mov ds, ax ; Khởi tạo đoạn liệu

Mov es, ax

; Về đầu dòng dùng hàm ngắt 21h để "hiển thị" cặp ký tự ; xuống dòng (lf: line feed) đầu dòng (cr: carriage return) Mov ah,

Lea dx, crlf Int 21h

; Hiển thị lời chào dùng hàm ngắt 21h Mov ah,

Lea dx, Chao Int 21h

; Về đầu dòng dùng hàm ngắt 21h

(38)

Mov ah, Lea dx, crlf Int 21h

; Về DOS dùng hàm 4ch ngắt 21h Mov ah, 4ch

Int 21h Vidu1 Endp End Vidu1

Khung chƣơng trình hợp ngữ để dịch chƣơng trình *.com

Với khung chương trình hợp ngữ để dịch tệp chương trình chạy *.exe có mặt đầy đủ đoạn Ngồi tệp chương trình chạy có phần mở rộng *.exe ta cịn có khả dịch chương trình hợp ngữ có kết cấu (cấu trúc) thích hợp loại chương trình chạy kiểu khác với phần mở rộng *.com Đây chương trình ngắn gọn đơn giản

hơn nhiều so với tệp chương trình *.exe mà đoạn: đoạn mã, đoạn liệu đoạn ngăn xếp chương trình gói gọn đoạn (64Kbyte) đoạn mã Với ứng dụng mà liệu mã lệnh chương trình khơng u cầu nhiều khơng gian nhớ ta ghép chúng chung vào đoạn mã tạo tệp

*.com Việc tạo tệp không tiết kiệm thời gian nhớ cho chạy

chương trình mà cịn tiết kiệm không gian nhớ phải lưu trữ chúng nhớ ngồi (đĩa từ)

Để tạo chương trình với phần mở rộng *.com chương trình nguồn hợp ngữ phải có kết cấu thích hợp, ví dụ sau:

.Model Tiny Code

ORG 100h Start: Jmp Continue

; Định nghĩa biến, mảng, Continue:

Tên_CTC Proc

; Các lệnh chương trình ; Trở DOS dùng ngắt 20h Int 20h

Tên_CTC Endp

; Các chương trình có định nghĩa End Start

Nhìn vào khung chương trình hợp ngữ để dịch chương trình com ta thấy khơng có khai báo đoạn ngăn xếp đoạn liệu, khai báo quy mô sử dụng nhớ Tiny (tuy nhiên sử dụng quy mơ nhớ Small) đầu đoạn mã có lệnh giả Org (Origin: điểm xuất phát) lệnh Jmp (nhảy) Lệnh Org 100h dùng để gán điạ bắt đầu cho chương trình 100h đoạn mã, bỏ qua vùng nhớ kích thước 100h (256 byte) cho đoạn mào đầu (PSP) từ địa đến địa 255

(39)

Đặc điểm chương trình *.com

Vì dung lượng nhớ cực đại đoạn 64Kbyte, nên ta phải chắn chương trình ta có số lượng byte mã lệnh liệu không lớn (không vượt giới hạn cho phép đoạn, khơng làm cho nhóm nở phía địa cao đoạn)

Chương trình phải sử dụng ngăn xếp cách hạn chế, khơng làm cho đỉnh ngăn xếp dâng lên phía địa thấp đoạn hoạt động.Chúng ta phải đảm bảo xảy tượng chùm lên thông tin vùng ngăn xếp thông tin vùng mã lệnh liệu

Khi kết thúc chương trình kiểu *.com, để trở DOS ta dùng ngắt 20h DOS để làm

cho chương trình gọn Mặc dù ta dùng hàm 4ch ngắt 21h để trở DOS dùng chương trình để dịch *.exe

Khi kết thúc tồn chương trình ta dùng hướng dẫn chương trình dịch END kèm theo nhãn Start Nhãn Start tương ứng địa lệnh chương trình đoạn mã

Chúng ta viết lại chương trình ví dụ trước (để dịch *.exe) thực việc

xuất xâu ký tự lên hình theo khung chương trình để dịch *.com: Model Tiny

.Code

ORG 100h Start: Jmp Continue

Chao db 'Xin chào $' Crlf db 0dh, 0ah,'$' Continue:

Main Proc

Mov ah, ; Về đầu dòng dùng hàm ngắt 21h Lea dx, Crlf

Int 21h ; Hiển thị lời chào Mov ah,

Lea dx, Chao Int 21h

Mov ah, ; Về đầu dòng dùng hàm ngắt 21h Lea dx, Crlf

Int 21h

Int 20h ; Trở DOS dùng ngắt 20h

Main Endp

; Các chương trình có định nghĩa End Start

3.3 Cách tạo cho chạy chƣơng trình hợp ngữ

Các bước thực việc tạo cho chạy chương trình hợp ngữ sau:

(40)

Tạo tệp văn chương trình nguồn *.asm Dùng masm (tasm) dịch

mã máy *.obj Dùng link để nối (các) têp

*.obj thành *.exe

Dùng exe2bin dịch *.exe thành *.com

Cho chạy Chương trình Dịch

*.com

S

Đ

(2)Dùng chương trình dịch MASM (hoặc TASM) để dịch tệp *.asm mã máy dạng *.obj Nếu bước chương trình nguồn có lỗi cú pháp ta quay

lại bước (1) để sửa lại chương trình nguồn

(3)Dùng chương trình LINK để nối hay nhiều tệp

*.obj lại với thành chương trình chạy

*.exe

(4)Nếu chương trình viết để dịch kiểu chương trình *.com ta phải dùng chương trình EXE2BIN DOS để dịch tiếp tệp *.exe tệp chương trình

*.com

(5)Cho chạy chương trình vừa dịch

3.4 Các cấu trúc lập trình assembly

Thơng thường thực tế, người ta thường phân tích tốn thiết kế chương trình (hệ thống nói chung) phương pháp thiết kế từ xuống (top-down) tương ứng với kỹ thuật lập trình có cấu trúc

Nội dung phương pháp chia toán tổng thể (hay chương trình thiết kế) thành tốn nhỏ (có thể khối chức năng) Các toán nhỏ lại chia thành toán nhỏ toán nhỏ trở thành toán đơn giản, dễ thực

Việc lập trình giải tốn nhỏ để tạo thành khối chức thành phần người ta thường sử dụng cấu trúc lập trình để thực nhiệm vụ khối Với cách tiến hành làm cho chương trình viết trở thành “có cấu trúc”, mang theo ưu điểm rõ ràng, dễ phát triển, dễ hiệu chỉnh cải tiến nâng cấp

Khi phân tích viết chương trình để giải cơng việc khác ta có cấu trúc lập trình sau:

 Cấu trúc

 Cấu trúc lựa chọn:

o if dk then s1 [else s2]

o case V of [else]

 Cấu trúc lặp:

o while dk s

o repeat s1, s2, , sn until dk

o for index=v1 to v2 s

Các cấu trúc lập trình có đặc điểm “tính cấu trúc” Chỉ có lối vào cấu trúc lối cấu trúc

(41)

3.4.1 Cấu trúc

Đây cấu trúc lập trình thông dụng đơn giản Trong cấu trúc công việc (các lệnh) tiến hành (thực hiện) tuần tự, lệnh lệnh Lệnh cuối thực hồn tất cơng việc khối chức khỏi cấu trúc

Mô tả:

i1 ; lệnh i2 ; lệnh

in ; lệnh n

Mở rộng: Các lệnh i1, i2, …, in cấu trúc

Ví dụ:

Tính biểu thức b2

- 4ac, với: al chứa a, bl chứa b cl chứa c: Mul cl ; tính ax <= al*cl

Mov cl, ; số lần dịch toán hạng ax Shl ax, cl ; ax*4

Mov ax, cx ; lưu kết sang cx Mov al, bl ; nạp biến b vào al Mul bl ; ax <= al*bl

Sub ax, cx ; ax <= ax-cx, ax chứa kết biểu thức b2 – 4ac

3.4.2 Cấu trúc lựa chọn if dk then cv

Nếu điều kiện (dk) cho giá trị thực cv (cơng việc) Ngược lại cơng việc bị bỏ qua Để thực điều này, ta sử dụng cặp lệnh so sánh (cmp) lệnh nhẩy có điều kiện để nhẩy qua số lệnh (cơng việc đó) chương trình hợp ngữ

Ví dụ: Nhập ký tự từ bàn phím, kiểm tra xem ký tự khơng ký tự điều khiển hiển thị lên hình đầu dịng tiếp theo, ngược lại (là ký tự điều khiển) khơng làm khỏi cấu trúc

Mov ah, ; Nhập ký tự

Int 21h ; hàm ngắt 21h

Mov bl, al ; Cất mã ASCII ký tự nhận

Lea dx, crlf ; Xuống dòng cách hiển thi xâu Mov ah, ; có ký tự CR LF

Int 21h ; hàm ngắt 21h Cmp bl, 20h ; Kiểm tra ký tự nhận

Jb Ra ; Là ký tự điều khiển => khơng làm gì, Mov dl, bl ; khơng ký tự điều khiển

Mov ah, ; hiển thị ký tự

Int 21h ; hàm ngắt 21h

Ra: ; Ra khỏi cấu trúc

if dk then cv1 else cv2

i1 i2

in vào

cv vào dk

(42)

Nếu điều kiện (dk) cho giá trị thực cv1 (công việc 1) Ngược lại, thực cv2 (công việc 2) qua Để thực điều này, ta sử dụng cặp lệnh so sánh (cmp) lệnh nhẩy có điều kiện để nhẩy qua số lệnh (công việc đó) chương trình hợp ngữ

Ví dụ: Nhập ký tự từ bàn phím, kiểm tra xem ký tự khơng ký tự điều khiển hiển thị lên hình đầu dịng tiếp theo, ngược lại (là ký tự điều khiển) hiển thị thông báo

Mov ah, ; Nhập ký tự

Int 21h ; hàm ngắt 21h

Mov bl, al ; Cất mã ASCII ký tự nhận

Lea dx, crlf ; Xuống dòng cách hiển thi xâu Mov ah, ; có ký tự CR LF

Int 21h ; hàm ngắt 21h Cmp bl, 20h ; Kiểm tra ký tự nhận

Jb Dkhien ; Là ký tự điều khiển => hiên thị thông báo (Dkhien), Mov dl, bl ; không ký tự điều khiển

Mov ah, ; hiển thị ký tự

Int 21h ; hàm ngắt 21h

Jmp Ra ; Xong công việc khỏi cấu trúc Dkhien:

Lea dx, mesg ; mesg biến xâu chứa dịng thơng báo Mov ah, ; Dùng hàm

Int 21h ; ngắt 21h

Ra: ; Ra khỏi cấu trúc

Cấu trúc Case

Ví dụ: Nhập ký tự từ bàn phím, kiểm tra xem:

nếu ký tự ký tự „1‟, hiển thị thơng báo ký tự ký tự „2‟, hiển thị thơng báo ký tự ký tự „3‟, hiển thị thơng báo không ký tự trên: hiển thị thông báo Mov ah, ; Nhập ký tự

Int 21h ; hàm ngắt 21h

Mov bl, al ; Cất mã ASCII ký tự nhận

Lea dx, crlf ; Xuống dòng cách hiển thi xâu Mov ah, ; có ký tự CR LF

Int 21h ; hàm ngắt 21h

Cmp bl, '1' ; Kiểm tra ký tự nhận xem có ký tự '1' Je Tb1 ; bằng, hiển thị thông báo Không, kiểm tra tiếp Cmp bl, '2' ; Kiểm tra ký tự nhận xem có ký tự '2' Je Tb2 ; bằng, hiển thị thông báo Không, kiểm tra tiếp Cmp bl, '3' ; Kiểm tra ký tự nhận xem có ký tự '3' Je Tb3 ; bằng, hiển thị thông báo Không, kiểm tra tiếp Jmp Tb4 ; Nếu khơng ký tự hiển thị thông báo

ra vào

n1

E

cv1 cv2 cvn

n2 nn

cv1

ra vào dk

đ s

(43)

Tb1:

; Hiển thị thông báo

jmp Ra ; hiển thị xong khỏi cấu trúc Tb2:

; Hiển thị thông báo

Jmp Ra ; hiển thị xong khỏi cấu trúc Tb3:

; Hiển thị thông báo

Jmp Ra ; hiển thị xong khỏi cấu trúc Tb4:

; Hiển thị thông báo

Ra: ; Ra khỏi cấu trúc

3.4.3 Cấu trúc lặp Cấu trúc For

Đây vòng lặp với số lần lặp n biết trước Ban đầu biến số lần lặp k gán khơng, chừng cịn nhỏ n thực lặp lại cơng việc (cv), k tăng sau lần thực cv

Trong sơ đồ bên, ta đặt biến số k=n kiểm tra xem sau lần lặp (thực cv) k>0? Sẽ cịn lặp biểu thức so sánh đúng, tất nhiên k giảm sau lần lặp Điều hoàn toàn phù hợp với làm việc lệnh LOOP mà biết

Ví dụ: Hiển thị lên hình 80 dấu * dịng Mov ah, ; Dùng hàm ngắt 21h Mov dl, '*' ; để hiển thị ký tự

Mov cl, 80 for:

Int 21h Loop for

Cấu trúc While

Đây vòng lặp với số lần lặp trước Chừng biểu thức điều kiện cịn thực lặp lại cơng việc (cv), để đảm bảo cho tính dừng giải thuật cơng việc (cv) phải có tác động đến dk hình thức

Nhìn vào sơ đồ khối vòng lặp ta thấy giống với cấu trúc vòng lặp for - to nhiên ta dùng lệnh LOOP để điều khiển cho vịng lặp lệnh LOOP lặp lại đoạn chương trình

NHAN với số nguyên lần xác định trước ghi CX Ta sử dụng lệnh nhảy có điều kiện để điều cho vịng lặp

Ví dụ: Tính tổng ax = 1+4+7+… Cộng ax>100 Xor ax, ax ; Ban đầu tổng tích luỹ

Mov bx, ; Đặt phần tử vào ghi bx while:

ra vào

đ

s

cv dk

ra vào

đ

s

cv k<n

(44)

Cmp ax, 100 ; Kiểm tra điều kiện (yêu cầu) toán

Ja End_while ; ax>100 (đúng), khỏi cấu trúc (có thể dùng jnbe) Add ax, bx ; ngược lại, cộng tiếp

Add bx, ; chuyển lên phần tử dãy

Jmp while ; Sau cập nhật ax, kiểm tra lại điều kiện toán End_while: ; Ra khỏi cấu trúc

Cấu trúc Repeat … until

Đây vịng lặp với số lần lặp khơng biết trước Thực lặp lại ccông việc (cv) biểu thức điều kiện (dk) Để đảm bảo cho tính dừng giải thuật cơng việc (cv) phải có tác động đến dk hình thức

Thực tế, nhiều trường hợp cấu trúc while - cấu trúc repeat - until thay cho Sự khác chỗ: với cấu trúc repeat - until cơng việc thực lần cịn cấu trúc while - cơng việc khơng thực lần Ta sử dụng lệnh nhảy có điều kiện để điều cho vịng lặp

Ví dụ: Tính tổng ax = 1+4+7+ + (3*(n-1)+1), cộng số hạng dãy >100, số hạng không cộng vào ax

Xor ax, ax ; Ban đầu tổng tích luỹ

Mov bx, ; Đặt phần tử vào ghi bx repeat:

Add ax, bx ; Cộng vào tổng tích luỹ

Add bx, ; Chuyển lên phần tử dãy Cmp bx, 100 ; Kiểm tra điều kiện (yêu cầu) toán

Jbe repeat ; chưa thoả mãn cộng tiếp số hạng ; Ra khỏi cấu trúc

3.5 Truyền tham số

Khi xây dựng ứng dụng cụ thể, ta cần quan tâm tới việc truyền tham số chương trình cho chương trình modul chương trình với Với assembly, người ta thường dùng cách truyền sau:

 Truyền tham số qua ghi (truyền tham trị)

 Truyền tham số qua ô nhớ (biến)

 Truyền tham số qua nhớ có địa ghi (tham biến)

 Truyền tham số qua ngăn xếp (stack)

3.6 Một số ngắt DOS BIOS

Khi xây dựng ứng dụng hợp ngữ (assemby), thường công việc cho phép can thiệp xâu vào phần cứng máy tính, thao tác cấp thấp thành phần máy tính Để thao tác đạt hiệu cao, ta nên sử dụng dịch cụ BIOS DOS Đây ngắt làm việc với độ tin cậy cao có sẵn (mặc dù ta tạo ngắt riêng để thực công việc tương tự ngắn gọn, tính tối ưu độ tin cậy khó sánh với ngắt BIOS DOS)

Các ngắt BIOS

vào

đ s

cv dk

(45)

Số hiệu

ngắt Hàm Công dụng Tham số vào Tham số

10h Chọn chế độ hiển thị cho hình

ah=0; al=chế độ

(VGA, 16 mau>: al=3) Không

1

Thay đổi kích thước trỏ, phải chọn dịng qt bắt đầu kết thúc trỏ

ah=1; bit thấp ch=dòng quét đầu; bit thấp cl=dòng quét cuối

Không

2 Dịch chuyển trỏ

(vị trí) ah=2; bh=số trang; dh=hàng; dl=cột Khơng

Xác định vị trí kích thước thời trỏ

ah=3; bh=số trang; ch=dòng quét đầu; cl=dòng quét cuối; dh=dòng; dl=cột Chọn trang hiển thị ah=5; al=số trang;

dh=dịng; dl=cột Khơng

6

Cuốn hình hay cửa sổ lên số dịng xác định

ah=6; al=số dịng (al=0 hình hay cửa sổ); bh=thuộc tính

dịng trống;

(ch,cl)=(dịng,cột) góc trái cửa sổ; (dh,dl)=(dịng,cột) góc phải cửa sổ

Khơng

7

Cuốn hình hay cửa sổ xuống số dòng xác định

ah=6; al=số dòng (al=0 hình hay cửa sổ); bh=thuộc tính

dịng trống;

(ch,cl)=(dịng,cột) góc trái cửa sổ; (dh,dl)=(dịng,cột) góc phải cửa sổ

(46)

Các ngắt DOS Số hiệu

ngắt Hàm Công dụng Tham số vào Tham số

21h

Kết thúc việc thi hành chương trình

ah=0; CS=địa đoạn đoạn mào đầu (PSP)

Không

1

Vào ký tự từ bàn phím (đợi đọc ký tự từ thiết bị vào chuẩn (nếu chưa có), sau đưa ký tự tới thiết bị chuẩn đưa mã ASCII ký tự vào al

ah=1 al=mã ASCII ký

tự

2

Hiển thị lên hình (đưa ký tự có mã ASCII dl tới thiết bị chuẩn)

ah=2; dl=mã ASCII ký tự cần (đưa ra) hiển thị

Không

9

Hiển thị chuỗi (đưa chuỗi ký tự tới thiết bị chuẩn)

ah=9; ds:dx=trỏ tới chuỗi ký tự kết thúc „$‟

(47)

Chƣơng GHÉP 8088 VỚI BỘ NHỚ VÀ TỔ CHỨC VÀO RA DỮ LIỆU 4.1 Giới thiệu tín hiệu chân 8088 mạch phụ trợ

4.1.1 Bảy nhóm tín hiệu

Hình vẽ: Các tín hiệu 8088 chế độ Min (và Max)

S4 S3 Truy nhập đến đoạn

0 Đoạn liệu phụ (ES:) Đoạn ngăn xếp (SS:)

1 Đoạn mã không đoạn 1 Đoạn liệu

Bảng Các bit trạng thái việc truy nhập đến ghi đoạn

(Hình vẽ: Đóng vỏ DIP 40 chân 8088/86)

 AD7 - AD0 [I/O]: Các chân dồn kênh cho tín hiệu phần thấp bus địa liệu Khi xung ALE=0 => báo cho mạch biết đường (các chân) có tín hiệu liệu (ALE: Address Latch Enable) Khi xung ALE=1 => báo cho mạch ngồi biết đường (các chân) có tín hiệu địa Các chân trạng thái trở kháng cao 8088 chấp nhận treo (Hold)

 A15-A8 [O]: Là bit phần cao bus địa Các chân trạng thái trở kháng cao 8088 chấp nhạn treo

 A16/S3, S17/S4, A18/S5, A19/S6 [O]: Là chân dồn kênh địa phần cao tín hiệu trạng thái (A: Address, S: Status) Khi ALE=0: Tại chân tín hiệu trạng thái: S6-S3 Khi ALE=1: Tại chân tín hiệu địa Các chân trạng thái trở kháng cao 8088 chấp nhận treo

IO/M (S1) AD0 DT/R (S2) AD1 RD AD2 WR (LOCK) AD3 DEN (S0) AD4 SS0 AD5 READY AD6 HOLD (RQ, GT0) AD7 HLDA (RQ, GT1) A8 INTA (QS1) A9 ALE (QS0) A10 NMI A11 INTR A12 RESET A13 MN/MX A14 TEST A15 CLK A16/S3 Vcc A17/S4 GND A18/S5 GND A19/S6

8 đường dồn kênh bus A/D phần thấp

8 đường dồn kênh bus A phần cao

4 đường dồn kênh bus A/C phần cao tín hiệu điều

khiển hệ thống

tín hiệu điều khiển bus

tín hiệu điều khiển CPU tín hiệu đồng hồ (clock)

nguồn

S6=0 liên tục, S5 phản ánh cờ IF

(48)

 RD [O]: Tín hiệu điều khiển đọc ("Xung cho phép đọc") Khi RD=0 bus liệu sẵn sàng nhận liệu từ nhớ thiết bị ngoại vi Chân RD trạng thái trở kháng cao 8088 chấp nhận treo

 READY [I]: Tín hiệu báo cho CPU biết tính trạng (trạng thái) sẵn sàng thiết bị ngoại vi nhớ Khi READY=1 => CPU thực ghi/đọc mà không cần xen thêm chu kỳ đợi Ngược lại TBNV hay nhớ có tốc độ chậm => chúng đưa tín hiệu READY=0 để báo cho CPU chờ Khi CPU tự kéo dài thời gian thực ghi/đọc cách xen thêm chu kỳ đợi

 INTR [I]: Đây chân tiếp nhận tín hiệu yêu cầu ngắt che Khi có yêu cầu ngắt tác động đến chân mà cờ cho phép ngắt IF=1 CPU kết thúc lệnh thi hành dở (kết thúc chu kỳ lệnh), sau vào chu kỳ chấp nhận ngắt đưa tí hiệu INTA=0 chân INTA (24)

 TEST [I]: Tín hiệu chân kiểm tra lệnh WAIT Khi CPU thực lệnh WAIT mà TEST=1 CPU chờ TEST=0 thực lệnh

 NMI [I]: Tín hiệu yêu cầu ngắt khơng che Tín hiệu khơng bị khống chế cờ IF CPU nhận biết dườn dương xung yêu cầu ngắt Nhận yêu cầu CPU kết thúc lệnh làm dở, sau chuyển sang thực chương trình phục vụ ngắt INT2 (ISR: Interrupt Service Routine)

 RESET [I]: Tín hiệu Reset lại 8088 (Trong chừng mực coi tín hiệu tín hiệu u cầu ngắt khơng che được) Khi tín hiệu RESET=1 kéo dài chu kỳ đồng hồ (4 xung clock) 8088 bị buộc phải khởi động lại, xố ghi: DS, ES, SS, IP FR bắt đầu thực hiệu chương trình địa CS:IP =FFFF:0000 (như khởi động, IF<=0 để cấm ngắt, TF<=0 để 8088 không bị đặt chế độ chạy lệnh => chạy suốt)

 CLK [I]: Tín hiệu xung đồng hồ (xung nhịp) Xung nhịp có độ rỗng 77% cung cấp nhịp làm việc cho CPU (và mạch khác hệ thống)

 Vcc [I]: Chân nguồn Nguồn cung cấp cho CPU +5V10%, 340mA

 GND [O]: chân nguồn nối với 0V nguồn nuôi

 MN/MX [I]: Chân điều khiển hoạt động CPU theo chế độ Min/Max (8088 làm việc chế độ khác nên có số chân tín hiệu phụ thuộc vào chế độ làm việc đó)

Chế độ MIN (chân MN/MX cần đƣợc nối thẳng vào +5V mà không qua điện trở)

Khi 8088 chế độ Min, tất tín hiệu điều khiển liên quan đến thiết bị ngoại vi truyền thống nhớ giống hệ 8085, có sẵn bên 8088 việc phối ghép với thiết bị ngoại vi nhớ dễ dàng Vì tận dụng phối ghép ngoại vi có sẵn => giảm giá thành hệ thống

 IO/M [O]: Tín hiệu phân biệt thời điểm cụ thể phần tử thiết bị vào/ra (I/O) nhớ (M: Memory) chọn để trao đổi liệu với CPU Trên Address bus lúc có địa tương ứng thiết bị Chân trạng thái trở kháng cao CPU chấp nhận treo

(49)

 INTA [O]: Tín hiệu điều khiển báo cho mạch bên ngồi biết CPU chấp nhận yêu cầu ngắt (INTR) Lúc CPU đưa tín hiệu INTA=0 để báo cho TBNV biết chờ mạch ngồi đưa lên Data bus số hiệu ngắt (kiểu ngắt)

 ALE [O]: Xung cho phép chốt địa (Address Latch Enable) Khi ALE=1 cso nghĩa bus dồn kênh A/D địa thiết bị ngoại vi hay nhớ ALE không bị thả (trạng thái trở kháng cao), CPU chấp nhận treo ALE=0

 DT/R [O]: Tín hiệu điều khiển đệm bus chiều Data bus để chọn chiều vận chuyển liệu bus D Chân trạng thái trở kháng cao 8088 chấp nhạn treo

 DEN [O]: Tín hiệu báo cho bên ngồi biết bus dồn kênh A/D có liệu ổn định Chân trạng thái trở kháng cao kho 8088 chấp nhận treo

 HOLD [I]: Tín hiệu yêu cầu treo CPU để mạch thực trao đổi liệu với nhớ cách truy nhập trực tiếp nhớ (DMA – Direct Memory Access) Khi HOLD=1, 8088 tự tách khỏi hệ thống cách treo bus A, D, C (các bus trạng thái trở kháng cao) để điều khiển DMA DMAC (DMA Controler) lấy quyền điều khiển hệ thống để thực công việc trao đổi liệu

 HLDA [O]: Tín hiệu báo cho bên biết yêu cầu treo CPU CPU chấp nhận CPU treo bus A, D số tín hiệu điều khiển bus C

 SS0 [O]: Đây tín hiệu trạng thái Tín hiệu giống S0 chế độ Max dùng kết hợp với IO/M, DT/R để giải mã chu kỳ hoạt động bus

IO/M DT/R SS0 Chu kỳ điều khiển bus

0 0 Đọc mã lệnh

0 Đọc nhớ

0 Ghi nhớ

0 1 Bus rỗi (nghỉ)

1 0 Chấp nhận yêu cầu ngắt 1 Đọc thiết bị ngoại vi 1 Ghi thiết bị ngoại vi

1 1 Dừng (Halt)

Bảng quan hệ số tín hiệu điều khiển Chế độ MAX (chân MN/MX cần đƣợc nối thẳng vào 0V)

Khi 8088 làm việc chế độ Max, số tín hiệu điều khiển cần tạo sở tín hiệu trạng thái nhờ dùng thêm bên mạch điều khiển bus 8288 Chế độ Max sử dụng hệ thống có mặt đồng xử lý tốn học 8087

(50)

S2 S1 S0 Chu kỳ điều khiển bus

Tín hiệu

0 0 Chấp nhận yêu cầu ngắt INTA 0 Đọc thiết bị ngoại vi IORC

0 Ghi thiết bị ngoại vi IOWC,AIOWC

0 1 Dừng (Halt) Không

1 0 Đọc mã lệnh MRDC

1 Đọc nhớ MRDC

1 Ghi nhớ MWTC, AMWC

1 1 Bus rỗi (nghỉ) Khơng

 RQ/GT0 RQ/GT1 [O]: Là tín hiệu yêu cầu dùng bus vi xử lý khác hệ thống thông báo chấp nhận treo CPU phép vi xử lý khác hệ thống dùng bus RQ/GT0 có mức ưu tiên cao RQ/GT1

 LOCK [O]: Tín hiệu CPU đưa để cấm vi xử lý khác hệ thống dùng bus thi hành lệnh đặt sau tiếp đầu LOCK

 QS0 QS1 [O]: Tín hiệu thông báo trạng thái khác đệm lệnh (hàng đợi lệnh) Trong hệ vi xử lý có mặt đồng xử lý tốn học 8087 tín hiệu dùng để đồng q trình hoạt động với 8088

QS1 QS0 Trạng thái đệm lệnh

0 Không hoạt động

0 Đọc byte mã lệnh từ đệm lệnh Đệm lệnh rỗng

1 Đọc byte từ đệm lệnh

4.1.2 Phân kênh để tách thông tin đệm bus

Để giảm bớt số chân cho tín hiệu (khó khăn cơng nghệ sử dụng) CPU, người ta thường thực cách dồn kệnh nhiều tín hiệu chân CPU (ví dụ đường dồn kênh bus A, D phần thấp 8088) Khi nhận tín hiệu bên ngồi, ta phải tiến hành tách thơng tin (dữ liệu địa chỉ) Việc thực vi mạch chun dung có chức thích hợp (thường mạch chốt – latch) Để hỗ trợ cho việc tách thông tin, CPU đưa tín hiệu ALE cho ALE=1 (mức cao) => báo cho bên biết chân dồn kênh thông tin địa ALE=0 => chân tín hiệu liệu Xung ALE dùng để mở mạch chốt tách thông tin địa bị dồn kênh Để nâng cao khả tải bus (chống suy giảm tín hiệu đảm nhận nhiều việc ni mạch bên ngồi) tín hiệu vào/ra CPU phải khuếch đại thông qua mạch đệm chiều chiều với đầu ra: thường trạng thái

Các mạch: 74LS373 chốt, 74LS244 khuếch đại đệm chiều, 74LS245 khuếch đại đệm chiều

4.1.3 Mạch tạo xung nhịp 8284

Dù cho 8088 làm việc chế độ Max hay chế độ Min ln cần xung nhịp (xung clock) từ mạch tạo xung nhịp 8284 Mạch tạo xung clock việc cung

1 18

2 17

3 16

4 15

5 14

6 13

Vcc X1 X2 ASYN C EFI CSYN

PCLK AEN1 RDY1 READ

(51)

cấp xung clock cho 8088, cịn cung cấp xung nhịp có tần số thích hợp cho tồn hệ cịn đồng tín hiệu RESET tín hiệu READY CPU

Các tín hiệu

 AEN1, AEN2 (Address ENable) [I]: Tín hiệu cho phép chọn đầu vào tương ứng RDY1, RDY2 làm tín hiệu báo trạng thái sẵn sàng nhớ thiết bị ngoại vi

 RDY1, RDy2 (Bus Ready): Các tín hiệu với AEN1, AEN2 dùng để tạo chu kỳ đợi (Tw) CPU

Hình vẽ: Lược đồ máy IBM PC/XT IO/M

RD WR A19/S6 A18/S5 A17/S4 A16/S3

A15 A14 A13 A12 A11 A10 A9 A8

CPU 8088

ALE

A/D7 A/D6 A/D5 A/D4 A/D3 A/D2 A/D1 A/D0

DT/R DEN

„LS244

G OC

oc1 oc2

„LS373

„LS373

G OC G 74LS373 OC

7

4

L

S

2

4

4

Control Bus

Address Bus

(52)

 ASYNC (Ready Synchronisation Setect) [I]: Chọn đồng hai tầng đồng tầng cho tín hiệu RDY1, RDY2 Trong chế độ đồng tầng (ASYNC=1) tín hiệu RDY có ảnh hưởng tới tín hiệu READY tới tận sườn âm xung đồng hồ Còn chế độ đồng hai tầng (ASYNC = 0), tín hiệu RDY có ảnh hưởng đến tín hiệu READY có sườn xuống (sườn âm) xung đồng hồ

 READY [O]: Nối đến đầu vào READY 8088 Tín hiệu đồng với tín hiệu RDY1, RDY2

 X1, X2 (Crystal) [I]: Nối với chân thạch anh với tần số fx Thạch anh phận mạch dao động bên 8284 có nhiệm vụ tạo xung chuẩn làm tín hiệu đồng cho toàn hệ thống

 F/C (Frequency/Crystal) [I]: Dùng để chọn nguồn tín hiệu chuẩn cho 8284 Khi chân mức cao xung đồng hồ bên dùng làm xung nhịp cho 8284, ngược lai xung đồng hồ mạch dao động bên chọn làm xung nhịp

 EFI (External Frequency Input) [I]: Lối vào cho xung từ dao động

 CLK [O]: Xung nhịp, fclk = fx/3, với độ rỗng 77% nối đến chân CLK 8088

 PCLK (Peripheral Clock) [O]: Xung nhip fpclk = fx/6, với độ rỗng 50% dành cho thiét bị ngoại vi

 OSC (OSC Input) [O]: Xung nhịp có tần số fx khuếch đại

 RES (Reset Input) [I]: Chân khởi động, nối với mạch RC để 8284 tự khởi động bật nguồn

 RESET (Reset Output) [O]: Nối vào Reset 8088, tín hiệu khởi động lại (Reset) cho toàn hệ thống

 CSYNC (Clock Synchronisation) [O]: Lối vào cho xung đồng chung hệ thống có 8284 dùng dao động ngồi tai chân EFI Khi dùng mạch dao động phải nối đất chân

4.1.4 M

ạch điều khiển bus 8288

Vi mạch 8288 mạch điều khiển bus, nhận số tín hiệu điều khiển từ CPU (8088) cung

X1 CLK

X2 8284

RES RESET

F/C CSYNC +5v

K 10K

10ỡ

CLK

8088

RESET

F/C CSYNC

Reset hệ thống

Hình vẽ: 8284 nối với 8088

Vcc S0 S2

MCE/PDEN DEN CEN INTA IORC 20

2 19 18 17 16 15 14 13 IOB

(53)

cấp tất tín hiệu điều khiển cần thiết cho hệ vi xử lý CPU 8088 làm việc chế độ MAX

Trong có số tín hiệu mang tên:

AEN: Address ENable

CEN: Command ENable

IOB: Input/Output Bus mode

MRDC: Memory ReaD Command

MWTC: Memory WriTe Command

AMWC: Advanced MWTC

IORC: Input/Output Read Command AIOWC: Advanced IOWC

DT/R: Data transmit/Receive

DEN: Data Enable

MCE/PDEN: Master Cascade Enable/Peripheral Data Enable

Các tín hiệu 8288 gồm:

 S2, S1, S0 [I] (Status): Là tín hiệu trạng thái lấy trực tiếp từ CPU Tuỳ theo tín hiệu mà 8288 tạo tín hiệu điều khiển khác chân để điều khiển hoạt động thiết bị nối với CPU (Bảng tín hiệu trạng thái Si 8088 chế độ MAX, bao gồm vào tín hiệu)

 CLK [I] (Clock): Nối với xung đồng hồ hệ thống (từ 8284) dùng để đồng xung điều khiển từ mạch 8284

 ANE [I] (Address Enable): Đây tín hiệu vào, sau khoảng thời gian trễ cỡ 150 ms kích hoạt tín hiệu điều khiển đầu 8288

 CEN [I] (Command Enable): Tín hiệu vào phép đea tín hiệu DEN tín hiệu điều khiển khác 8288

 IOB [I] (Input/Output bus mode): Tín hiệu để điều khiển mạch 8284 làm việc chế độ bus khác

o Khi IOB = 8288 làm việc chế độ bus vào/ra

o Khi IOB = 8288 làm việc chế độ bus hệ thống

(Như máy IBM PC)

 MRDC [O] (Memory Read Command): Là tín hiệu điều khiển đoc nhớ, kích hoạt nhớ đưa liệu bus

 MWTC, AMWC [O] (Memory Write Command – Advanced MWTC): Là tín hiệu ghi nhớ ghi nhớ kéo dài Chúng giống MEMW, AMWC hoạt động sớm lên chút để tạo khả cho nhớ chậm có thêm thời gian

 IORC [O] (I/O Read Command): Là tín hiệu điều khiển đọc thiết bị ngoại vi Nó kích hoạt thiết bị ngoại vi chọn để thiết bị đưa liệu bus

(54)

 INTA [O] (Interrupt Acknowledge): Là đầu để thông báo cho thiết bị ngoại vi biết CPU chấp nhận yêu cầu ngắt (yêu cầu thiết bị ngoại vi) Và thiết bị ngoại vi phải đưa số hiệu ngắt bus liệu để CPU đọc lấy

 DT/R [O] (Data Transmit/Receive): Là tín hiệu để điều khiển chiều liệu hệ thống vào hay so với CPU

o DT/R = 1: CPU đọc liệu

o DT/R = 0: CPU ghi liệu

Trong máy IBM PC tín hiệu nối đến chân DIR mạch đệm chiều 74LS245 để điều khiển hướng liệu

 DEN [O] (Data Enable): Là tín hiệu để điều khiển liệu trở thành bus cục hay bus hệ thống Trong máy IBM PC tín hiệu sử dụng với tín hiệu mạch điều khiển ngắt PIC 8259 để tạo tín hiệu điều khiển cực G mạch đệm chiều 74LS245

 MCE/PDEN [O] (Master Cascade Enable/Peripheral Data ENable): Đây tín hiệu dùng để đặt chế độ làm việc cho mạch điều khiển ngắt PIC 8259 để làm việc chế độ chủ (Master)

 ALE [O] (Address Latch Enable): Là tín hiệu báo cho phép chốt địa có chân dồn kênh A/D (A/D0 – A/D7), tín hiệu thường nối với chân G mạch chốt 74LS373 để điều khiển mạch mày chốt lấy địa

4.1.5 Biều đồ thời gian lệnh đọc/ghi

Chu kỳ bus chu kỳ vận chuyển liệu hoàn thành, điều phụ thuộc vào số lượng tín hiệu điều khiển (của CPU điều khiển hay DMAC, ) Một chu kỳ bus thường tốn khoảng chu kỳ xung clock Cụ thể tượng xảy chu kỳ bus (đã đơn giản hoá) sau:

 T1: Trong chu kỳ tín hiệu địa nhớ hay thiết bị ngoại vi đưa chân địa chỉ, chân dồn kênh A/D, A/S Các tín hiệu điều khiển ALE, DT/R, IO/M đưa để giúp cho việc chốt địa (20 bit địa chỉ)

 T2: Trong chu kỳ này, CPU 8088 đưa tín hiệu điều khiển RD, WR, DEN (Data Enable) tín hiệu liệu: D7 – D0 (nếu lệnh ghi) Tín hiệu DEN thường dùng để mở đệm bus liệu (nếu mạch đệm có mặt hệ thống) Tại cuối chu kỳ T2 (và chu kỳ Ti Tw có), CPU lây mẫu tín hiệu READY để xử lý chu kỳ phải làm việc với nhớ thiết bị ngoại vi hoạt động chậm

 T3: Trong chu kỳ T3, CPU dành thời gian cho nhớ hay thiết bị ngoại vi truy nhập liệu Nếu chu kỳ đọc liệu cuối T3, CPU lấy mẫu tín hiệu bus liệu Nếu cuối chu kỳ T2 (hoặc chu kỳ Ti Tw) mà Cpu phát tín hiệu READY = (do nhớ thiết bị ngoại vi đưa đên) thf CPU tự xen vào sau T3 vai chu kỳ T để tạo chu kỳ đợik Tw (Tw (wait) = n*T) nhằm kéo dài thời gian thực lệnh, tạo điều kiện cho nhớ thiết bị ngoại vi chậm có đủ thời gian hồn thành việc ghi/đọc liệu

(55)

Hình vẽ: Các tín hiệu 8088 chu kỳ ghi (đã đơn giản hoá) Chu kỳ bus

T3 T2

T1 T4

Twr Address Status Signal

Address ổn định

Data ghi Address

Tw (Chu kỳ đợi – Wait)

T w

Low active

Low active CLK

ALE

A/S

A/D A

WR

DEN

(56)

Hình vẽ: Các tín hiệu 8088 chu kỳ đọc (đã đơn giản hố) Ví dụ:

Xét với CPU 8088 làm việc tần số = 5MHz, Ti kéo dài 200 ns (nano giây)

Theo hình vẽ chu kỳ đọc nhớ: việc truy nhập nhớ kéo dài khoảng từ T1 đến T3 khoảng 600 ns

Ttrễ địa = 110 ns, Tgiữ R = 30 ns (thời gian giữ liệu đọc) Ttrễ đệm = 40 ns (trễ truyền liệu qua mạch đệm)

==> thời gian thâm nhập = 3*T - Ttrễ địa - Tgiữ R - Ttrễ đệm = 420 ns

==> Bộ nhớ nối với 8088/5MHz cần có thời gian thâm nhập ≤ 420 ns hiệu (8088 xen thêm chu kỳ đợi)

Hơn nữa, với CPU 8088 TRD (độ rộng xung đọc) = 325 ns, khoảng thời gian đủ dài nhớ với thời gian thâm nhập 420 ns

Trong hình vẽ chu kỳ ghi liệu: Cần có thời gian giữ liệu tối thiểu Tgiữ W = 88 ns sau WR chuyển từ > Thực tế thời gian xấp xỉ nhớ thông dụng Độ dài xung ghi 8088/5 MHz TWR = 340 ns phù hợp với nhớ có thời gian thâm nhập cỡ 420 ns

T1 T2 T3 T4

Chu kỳ bus

Trd

Address Status Signal

Address ổn định Tw

Low active

Low active CLK

ALE

A/S

A/D A

RD

DEN

Hight active

(57)

Hình vẽ: Mạch tạo trạng thái đợi biểu đồ thời gian 4.2 Phối ghép 8088 với nhớ

4.2.1 Bộ nhớ bán dẫn

Các vi mạch nhớ thường dùng với hệ vi xử lý gồm:

 ROM (Read Only Memory – Bộ nhớ cố định): Bộ nhớ loại thường có nội dung ghi săn từ sản xuất đọc nên chúng gọi nhớ cố định Loại gọi ROM mặt nạ thơng tin ROM ghi thơng qua mặt nạ Khi nguồn nuôi cung cấp cho vi mạch thơng tin cịn (nội dung RM không bị đi)

o PROM (Programmable ROM): Loại ROM trắng (chưa ghi thôngo tin) sau sản xuất Người sử dụng ghi thơng tin vào ROM theo ý lần máy nạp ROM (máy ghi ROM chuyên dụng)

o EPROM (Erasable ROM): Loại ROM ghi (“lập trình”) xung điện xố tia cực tím (UV – Untra Violete), từ máy nạp ROM

RDY1 AEN1 RDY2

CLK READY

QA QB QC QD DE QF QG GH CLK

CLR SI

1T 3T 4T 5T 6T 7T 8T

READY CLK

8088

RD WR INTA READY

CS mạch nhớ

T1 T2 T3 TW T5

CLK

QA

QB

QC

(58)

o EEPROM (Electric EPROM): Giống EPROM, việc ghi/xố ROM thực mạch làm việc mà khơng địi hỏi phải thơng qua máy nạp ROM

 RAM (Random Access Memory – Bộ nhớ ghi/đọc): Đặc trưng loại nhớ thông tin bị mất nguồn nuôi cấp cho vi mạch

o SRAM (Static RAM – RAM tĩnh): Mỗi phần tử nhớ loại cấu tạo từ mạch lật (flip – flop) nên có đặc điểm tác động nhanh, thông tin ổn định Kèm theo tốn nhiều transistor cho đơn vị nhớ nên đắt tiền Chúng thường dùng vào thành phần nhớ quan trọng ghi, cache,

o DRAM (Dynamic RAM): Mỗi phần tử nhớ loại cấu tạo từ tụ điện nhỏ, chế tạo cơng nghệ PMOS Loại có đặc điểm tác động chậm, thông tin không ổn định có dị điện tích tụ (1: tụ tích điện, 0: tụ khơng tích điện) nên cần mạch phụ trợ để bù lại lượng điện tích bị dị – gọi mạch làm tươi Loại rẻ SRAM sản xuất vi mạch nhớ với dụng lượng lớn

Một nhớ (hay modul nhớ nói chung) cấu tạo (tạo nên) từ nhiều vi mạch nhớ ghép lại Mỗi vi mạch nhớ thường

có cấu tạo sau:

Am-1 – A0: m bit địa

Dn-1 – D0: n bit liệu

Dung lượng tính theo bit: 2m

*n (bits)

Nếu n = dung lượng là: 2m

(bytes)

WR [I] (WRite): Tín hiệu điều khiển ghi, với ROM thường WE: Write Enale

RD [I] (ReaD): Tín hiệu điều

khiển đọc, với ROM thường OE: Output Enale

CS [I] (Chip Select): Tín hiệu chọn chip, với ROM thường CE: Chip Enale

 Nhóm tín hiệu địa (Am-1 – A0): Dùng để chọn ô nhớ cụ thể ghi/đọc

Các nhớ có độ dài khác tuỳ loại vi mạch nhớ, nhà sản xuất: 1, 4, 8, bit Số lượng đường dây địa xác định dung lượng vi mạch nhớ Dung lượng = 2m

(ô nhớ)

Nếu m = 10 dung lượng là: 210 = Kilo ô nhớ (kilo = 1024)

Nếu m = 20 dung lượng là: 220

= Mega ô nhớ (kilo = 1024*1024 = 1048576)

 Nhóm tín hiệu liệu (Dn-1 – D0): Các đường tín hiệu đầu vi

mạch ROM vào/ra vi mạch RAM, đặt riêng nhóm đường vào tín hiệu này, nối vào bus liệu: nối chung mạch nhớ thường có đầu đữ liệu trạng thái Số đường liệu (n) xác định độ dài ô nhớ (ngăn nhớ – từ nhớ) Thường ghi rõ 1Kx8 16Kx4 1Kx1

A0 D0

A1 D1

Am-1 Dn-1 WE

OE CS WR

RD RD

RD

CS

(59)

 Tín hiệu chọn vi mạch: Người ta thường dùng ký hiệu CS (Chip Select) cho vi mạch RAM CE (Chip Enable) cho vi mạch ROM Tín hiệu dùng để chọn (cho phép) vi mạch nhớ nhớ làm việc tiến hành ghi/đọc nhớ vi mạch Tín hiệu thường nối với đầu mạch giải mã địa Khi số vi mạch nhớ có tín hiệu trạng thái khơng tích cực bus liệu (Am-1 – A0) bị treo (trạng thái trở kháng cao)

 Nhóm tín hiệu điều khiển: Các tín hiệu điều khiển đọc RD WR (OE WE ROM) ngược pha phép liệu từ bus liệu vào bi mạch ngược lại từ vi mạch nhớ bus liệu Cũng có RAM có đường tín hiệu điều khiển cho ghi đọc: R/W Khi này: R/W=1: đọc, R/W=1: ghi

Một đặc trưng quan trọng vi mạch nhớ thời gian thâm nhập tac (taccess) Có thể định nghĩa thời gian thâm nhập vi mạch nhớ khoảng thời gian kể từ có (xung) địa bus địa liệu ổn định bus liệu Thông số phụ thuộc vào công nghệ chế tạo vi mạch nhớ

Với cơng nghệ lưỡng cực, sản xuất vi mạch nhớ có tac = 10 – 30 ns

Với cơng nghệ MOS, sản xuất vi mạch nhớ có tac lớn hơn, cỡ 150 ns

Bộ nhớ EPROM

Các vi mạch EPROM thông dụng tồn nhiều kiểu khác Hệ 27xxx có số loại sau:

2708 (1Kx8); 27256 (32Kx8); 2732 (2Kx8); 27512 (64Kx8); 2764 (8Kx8); 27128 (16Kx8);

Với tac = 250 – 450 ns tùy loại cụ thể

Ví dụ: Xét vi mạch nhớ EPROM 2716 có tac = 450 ns Vậy để ghép với vi xử lý 8088 – MHz cần có thêm chu kỳ đợi (Tw) Ngược lại mạch 2716-1 lại có tac = 250 ns nên khơng cần có thêm chu kỳ đợi

Chú ý: Trong chế độ trì cơng suất tiêu thụ mạch giảm tới 75% so với công suất tiêu thụ chế độ tích cực

Bộ nhớ EPROM 2716 (2Kx8)

x: Don‟t care

Chân (pins) Chế độ (Mode)

CE/PGM OE Vpp [V]

Vcc

[V] D7–D0

Đọc 0 +5 +5 Dout

Duy trì x +5 +5 HZ

Ghi

Xung ghi kéo dài

50 ns

1 +25 +5 Din Kiểm

tra ghi 0 +25 +5 Dout

Cấm

ghi +25 +5 HZ

WR RD RD

RD CS

A11-A0 D7-D0

OE CE

(60)

HZ: Trạng thái trở kháng cao A10-A0: 11 bit địa

D7-D0: bit liệu

OE (Output Enable): Cho phép đưa liệu CE/PGM: Chọn chip/điều khiển ghi

Vpp: Điện áp ghi

Bộ nhớ SRAM (RAM tĩnh)

Bộ nhớ cấu tạo từ phần tử nhớ mạch lật (flip – flop) nên lưu giữ thơng tin cách ổn định chừng cịn cấp điện (nguồn nuôi) Các nhớ SRAM nhớ EPROM có dung lượng thường có cách tổ chức (bố trí) chân giống để dễ dàng thay cho trình phát triển hệ thống

Trong thực tế tồn mạch nhớ SRAM với dung lượng: 32Kx8 (62256 LP – 10), tac = 100ns, công nghệ CMOS

SRAM chế tạo theo công nghệ lưỡng cực (8KB – 128 KB) có thời gian trao đổi liệu (thâm nhập): tac = 15 ns

Ví dụ: Xét vi mạch nhớ SRAM TMS 4014 (2Kx8), tac = 250 ns

A10-A0 : 11 bit địa D7-D0 : bit liệu

OE/WE : Cho phép đọc/cho phép ghi CS : Chọn chip

Bộ nhớ DRAM (RAM động)

Bộ nhớ DRAM cấu tạo từ phần tử nhớ tụ điện Nó lưu trữ thông tin cách nạp tụ (1) hay không nạp (0) điên tích tụ Vì có dị điện tích cực tụ điện mà thơng tin lưu trữ nhớ loại không ổn định Vì DRAM cần làm tươi (refresh) cách ghi hay đọc lại DRAM theo chu kỳ sau quãng thời gian khoảng 15,6 s Các mạch nhớ SRAM cần có thêm mạch logic phụ để đảm bảo điều khiển việc làm tươi nên việc phối ghép với vi xử lý phức tạp Nhưng DRAM có ưu điểm chế tạo số lượng lớn phần tử nhớ đơn vị diện tích (vì phần tử nhớ cần transistor – 1) Và vi mạch nhớ cần nhiều chân địa Để giảm bớt số chân địa vi mạch nhớ (để dễ chế tạo mạch in lắp ráp) người ta thường chia địa thành nhóm địa hàng địa cột dồn kênh chúng chân địa Vì phần tử nhớ nhớ tổ chức theo ma trận mà ô nhớ phần tử ma trận nhớ Việc dồn kênh địa chân địa cần thêm tín hiệu báo thời điểm địa hàng thời điểm địa cột chân địa chỉ, tín hiệu là:

RAS (Row Access) : Cho phép chốt địa hàng CAS (Column Access): Cho phép chốt địa cột

WR RD RD

RD CS

A10-A0 D7-D0

TSM 4014 OE CE

(61)

Các mạch nhớ DRAM thường chế tạo với

độ dài bit ngăn nhớ Thực tế có mạch nhớ 1Mx1, 4Mx1, 16Mx1 chúng xây dựng thành modul nhớ kiểu SIMM (Single Inline Memory Modul) hay SIP (Single Inline Package) dùng máy 80268, 80386,

4.2.2 Giải mã địa cho nhớ

Mỗi vi mạch nhớ hay modul nhớ ghép với vi xử lý cần phải vi xử lý tham chiếu tới cách xác thực thao tác ghi/đọc Có nghĩa “modul” nhớ cần gán cho vùng không gian riêng biệt cụ thể (trong không gian quản lý chung bọ vi xử lý), có địa xác định Việc gán địa cụ thể cho modul nhớ thực nhờ xung chọn chip từ mạch giải mã địa Việc phân chia không gian tổng thể vi xử lý thành vùng khác dành cho mục đích khác gọi phân vùng nhớ

Ví dụ:

Với 8088 có 20 bit địa (A19 – A0) nên không gian tổng thể dành cho nhớ 20

= 210*210 = MB (1 byte/ngăn nhớ) Trong khơng gian tổng thể đó:

1) Vùng không gian KB đầu, kể từ địa thấp nhất: 00000h – phải dành cho RAM phải có chỗ dành cho bảng vector ngắt gồm 256 (ngắt)*4 (byte)= 1KB)

2) Vùng nhớ có địa FFFF0h thiết phải dành cho ROM EPROM – chứa chương trình khởi động hệ thống Vì sau bật nguồn, CS mạng giá trị FFFF0h (là địa

khởi động CPU)

Bộ giải mã địa để tạo xung chọn chip thường có cấu tạo hình vẽ bên:

Đầu vào (mạch) giải mã tín hiệu địa tín hiệu điều khiển khác (nếu cần thiết) Các tín hiệu địa gồm bit địa có quan hệ định với tín hiệu chọn chip đầu Tín hiệu điều khiển thường tín hiệu IO/M dùng để phân biệt đối tượng mà vi xử

lý chọn làm việc nhớ hay thiết bị vào/ra (I/O device) Mạch giải mã khâu gây việc trễ thời gian từ vi xử lý đên thiết bvị ngoại vi mà chọn mạch nhớ/thiết bị ngoại vi ta cần tính đến Tuỳ theo quy mô (yêu cầu) mạch giải mã mà đầu ta có nhiều tín hiệu chọn chip (CS)

Giải mã đầy đủ cho modul nhớ yêu cầu ta phải đưa đến đầu vào mạch giải mã tín hiệu địa cho tín hiệu đầu chọn riêng mạch nhớ định trước

RAS

CAS

A7-A0

Hình vẽ: DRAM TMS 4464 (64Kx8)

WR RD RD RD

A7-A0 D7-D0

TSM 4464 OE CE

CAS RAS

Address Decode Address

Control

CS0

CS1

CSn-1

(62)

Trong trường hợp ta phải dùng tổ hợp đầy đủ đầu địa tương ứng để chọn mạch nhớ Nếu ta bỏ bớt tín bit địa việc giải mã thiếu cho modul nhớ, xung chọn chip đầu mạch giải mã việc chọn mạch nhớ vùng định chọn mạch nhớ vùng khác Vậy, việc giải mã thiếu tiết kiệm linh kiện xây dựng mạch giải mã lại không đảm bảo tính đơn trị theo ý nghĩa việc giải mã

Trong thực tế, thông thường thiết kế mạch giải mã địa cho modul nhớ người ta thường tính dơi chút để dự phịng phát triển tăng thêm dung lượng nhớ mà tận dụng (sử dụng) mạch giải mã sẵn có

Xây dựng mạch giải mã mạch NAND (các mạch logic đơn giản)

Bằng gates logic kiểu NAND, ta xây dựng mạch giải mã địa đơn giản với số lượng tín hiệu chọn chip đầu hạn chế Ta phải đưa đến đầu vào mạch cửa NAND nhiều lối vào tổ hợp thích hợp bit địa để nhận đầu tín hiệu chọn chip cho modul nhớ

Ví dụ: Cho modul nhớ SRAM có dung lượng 32 KB (32Kx8) Xây dựng mạch giải mã để ghép modul với 8088 địa 08000h

Chú ý: Một địa bắt đầu cho modul nhớ cần đảm bảo cho có giá trị bit địa đưa vào modul nhớ để chọn ô nhớ cần tham chiếu phải 0, chúng “chạy”

lần lượt tới để chọn hết đủ tất ô nhớ Giải:

Modul nhớ 32 KB cần có 15 bit địa để chọn ô nhớ

Không gian địa 8088 gồm 20 bit địa chỉ: A19 – A0

Nên phải sử dụng bit địa thấp: A14 – A0 để đưa vào modul nhớ, lại bit địa phần cao tín hiệu điều khiển IO/M vào mạch giải mã Vậy ta có sơ đồ sau:

Triển khai địa modul nhớ ta có:

0000 1000 0000 0000 0000=08000h 0000 1000 0000 0000 0001=08001h

0000 1111 1111 1111 1111=0FFFFh Phần cố định Phần thay đổi

Các tín hiệu điều khiển vào mạch NAND nhiều đầu vào phải đồng thời đầu CS =

Vậy ta có sơ đồ bên:

SRAM 32KB

NAND A14 – A0

D7 – D0 WR

RD

A19 – A15

IO/M

CS

NAND A15

CS A16

(63)

Hoặc ta sử dụng mạch logic đơn giản khác để xây dựng mạch giải mã sau cho có nhiều đầu CS = sau:

Kết luận: Để thực mạch giải mã kiểu này, có nhiều cách xếp phần tử logic (gates) để đưa tín hiệu CS = đầu Tuy nhiên người thiết kế cần phân tích hàm đầu vào tín hiệu đầu tối giản phần tử để cho số lượng gates logic sử dụng mạch giải mã (tối ưu mạch giải mã) Ví dụ, mạch giải mã thay mạch giải mã bên:

Mạch thực yêu cầu mạch giải mã trên, nhiên tốn nhiều phần tử gates logic nên chưa tốt

Giải thích: Trong mạch giải mã cho modul nhớ này, xung chọn chip (CS) có tác động (CS = – tích cực thấp) ta truy xuất nhớ (ghi/đọc) địa nằm phạm vi 08000h – 0FFFFh, bit địa phần cao (A19 – A15) phối hợp tín hiệu điều khiển IO/M (= để sẵn sàng truy xuất nhớ) để tạo xung chọn chip cho modul nhớ Mỗi ô nhớ cụ thể 32 KB modul nhớ bit thấp lại (A14 – A0) bus địa chọn Để kiểm chứng nhanh điều ta thấy bit địa A15 để chọn vùng nhớ 32 KB, bit A16 để chọn vùng nhớ 64 KB, vùng nhớ nằm rải rác không gian nhớ MB

Xây dựng mạch giải mã mạch giải mã chuyên dụng 74LS138

Khi ta muốn có nhiều đầu ta chọn chip (CS) đầu mạch giải mã mà dùng mạch logic đơn giản thiết kế trở nên cồng kềnh số lượng gates tăng lên Trong trường hợp người ta thường sử dụng mạch giải mã chuyên dụng có sẵn Một mạch giải mã kiểu hay sử dụng 74LS138 Đây mạch giải mã – (vào 3, 8)

Sơ đồ khối 74LS138 bảng trạng thái

A y0 B y1 C y2 y3 y4 G2A y5 G2B y6 G1 y7

A15

CS A16

A17 A18

A19 IO/M

NOT

OR

NOR

NAND

A15

CS A16

A17 A18

A19 IO/M

NOT

(64)

Các đầu vào

Các đầu

chọn Cho phép

C B A G2B G2A G1 y0 y1 y2 y3 y4 y5 y6 y7

x x x x x 1 1 1 1

x x x x x 1 1 1 1

x x x x x 1 1 1 1

0 0 0 1 1 1 1

0 0 1 1 1 1

0 0 1 1 1 1

0 1 0 1 1 1 1

1 0 0 1 1 1 1

1 0 1 1 1 1

1 0 1 1 1 1

1 1 0 1 1 1 1

Ví dụ: Xây dựng mạch giải mã cho vùng nhớ 64 KB địa B0000h đến BFFFFh (vùng có chứa vùng RAM hình) cho vi mạch nhớ SRAM 8Kx8 Vậy cần vi mạch cho ghép lại

Giải: Modul nhớ 64 KB (gồm vi mạch SRAM 8Kx8 ghép lại) cần 16 đường địa để chọn ô nhớ

riêng đó, cịn đường địa tổ hợp tín hiệu điều khiển IO/M để chọn cho vi mạch 74LS138 Sơ đồ

Trong ví dụ ta thấy bit địa A13 chọn vùng nhớ 8K (bằng dung lượng vi mạch) nằm rải rác không gian nhớ 8088 Vì ta dùng đầu vào chọn A 74LS138, với bit địa A14, A15 chân B C ta chọn ta vùng nhớ liền (64 KB = 8x8KB) Vấn đề lại định vị vùng 64 KB vào địa B0000h không gian nhớ MB Điều thực cách dễ dàng cách dùng tổ hợp bit địa phần cao lại: A19 A16 = 1011 Thấy A18 = 0, đưa vào đầu vào cho phép G2A, tín hiệu IO/M mức thấp ==> đưa vào G2B, lại A16, A17, A19 = ==> đưa qua mạch AND đầu vào để có đầu = gửi đến G1 74LS138

Xây dựng mạch giải mã PROM

A y0 B y1 C y2

y3 y4 G2A y5 G2B y6 G1 y7

SRAM 8Kx8 A13 A14 A15 A16 IO/M A17 A19 B000-B1FFF RD WR CS0 D7-D0

Các chân chọn chip cho vi mạch nhớ SRAM 8Kx8 lại

BE000-BFFFF A18

A12-A0

(65)

Trong ví dụ trước ta thấy mạch giải mã chuyên dụng sẵn có 74LS138 có số lượng đầu vào địa đầu vào cho phép hạn chế Nếu ta có số lượng đầu vào cho địa lớn mà lại phải giải mã đầy đủ để xây dựng giải mã hồn chỉnh ta phải dùng thêm gates logic phụ Đó lý để người ta thay giải mã kiểu giải mã PROM PLA (Programmable Logic Array – mảng logic lập trình được), với ưu điểm chúng có nhiều bit đầu vào cho địa thích hợp hệ vi xử lý có vi xử lý tiên tiến – có khơng gian địa lớn

Ta lấy lại ví dụ phần trước, có nghĩa xây dựng mạch giải mã dùng PROM cho vùng nhớ 64 KB (8KBx8) Ta sử dụng loại PROM TPB28L42 với dung lượng 512 byte để làm giải mã Ta có bảng mẫu bit để ghi vào PROM TPB28L42 cho ví dụ cụ thể sau:

Các đầu vào Các đầu

G A8 A7 A6 A5 A4 A3 A2 A1 A0 O0 O1 O2 O3 O4 O5 O6 O7

0 0 1 0 0 1 1 1

0 0 1 0 1 1 1 1

0 0 1 1 1 1 1

0 0 1 1 1 1 1 1

0 0 1 1 0 1 1 1

0 0 1 1 1 1 1 1

0 0 1 1 1 1 1 1

0 0 1 1 1 1 1 1

0 Các địa khác 1 1 1 1

Bảng mẫu bit ghi PROM theo yêu cầu ví dụ

Theo bảng mẫu bit ta thấy để thực giải mã cho nhớ theo yêu cầu ví dụ trước, ta dùng hết byte tổng số 512 byte

PROM TPB28L42

(tương ứng để chọn vùng nhớ 8KB) Các nhớ cịn lại PROM mà chứa giá trị FFh (không nên 00h để khỏi xảy chọn nhầm vùng nhớ (1 địa chỉ) đó)

So với cách thực

hiện dùng 74LS138, ta thấy dùng đến gates logic phụ, điều làm giảm đáng kể kích thước giải mã

A1 O0 A2 O1 A3 O2 A4 O3 A5 O4 A6 O5 A7 O6 A8 O7

SRAM 8Kx8

A13 A14 A15 A16 A17

A19

B000-B1FFF RD

WR

CS0

D7-D0

Các chân chọn chip cho vi mạch nhớ SRAM 8Kx8

lại

BE000-BFFFF A12-A0

Hình vẽ: Mạch giải mã cho modul nhớ 64 KB dùng PROM

(66)

Trong máy vi tính cá nhân thương phẩm ngày nay, việc phân vùng giải mã điạ cho nhớ thực hoàn chỉnh Việc nâng cấp, bổ xung modul (DRAM) vào hệ thống nhà sản xuất tính tốn từ trước để tạo thuận lợi tối đa cho người sử dụng Ngày mở vỏ hộp máy tính (case), mainboard ta thường thấy 2-3 khe cắm DRAM có sẵn, cho phép ta bổ xung sử dụng khe cắm số mainboard có sẵn mạch giải mã cho modul RAM cắm vào

4.2.3 Phối ghép 8088 với nhớ

Sau biết số phương pháp giải mã cho nhớ, ta thực phối ghép 8088 – MHz với nhớ Có thể nói khơng có chênh lệch tốc độ thâm nhập nhớ tốc độ CPU việc phối ghép CPU với nhớ đơn giản giải mã cho mạch nhớ Phần lớn trường hợp, điều với mạch nhớ RAM mạch nhớ EPROPM có thời gian thâm nhập  250 ns, cách phối ghép CPU với mạch giống Đối với mạch nhớ ROM EPROM có thời gian thâm nhập lớn (ví dụ như: 2716, 2732, với tac = 450 ns) phối ghép với CPU 8088 – 5MHz ta cần tính tốn thận trọng

Trong phần đầu chương, ví dụ xét CPU 8088 – 5MHz Ti kéo dài 200 ns Theo biểu đồ thời gian đọc nhớ (đã đơn giản hố) việc đọc nhớ kéo dài từ T1 đến T3 600 ns

Ttrễ địa = 110 ns, Tgiữ R = 30 ns (thời gian giữ liệu đọc) Ttrễ đệm = 40 ns (trễ truyền liệu qua mạch đệm)

==> thời gian thâm nhập = 3*T - Ttrễ địa - Tgiữ R - Ttrễ đệm = 420 ns

Và kết luận: Bộ nhớ ghép với 8088 – 5MHz cần có thời gian thâm nhậơ nhớ (tac) 420 ns hiệu quả, ngược lại tac 420 ns 8088 phải xen thêm chu kỳ đợi (Tw)

(67)

Việc đặt modul nhớ vào địa không 8088 việc thực mạch giải mã địa để tạo tín hiệu CS Nó định bit từ A19 – A15 tín hiệu điều khiển IO/M

Việc phối ghép SRAM với 8088 thường đơn giản so với ROM (nói chung) có tốc độ thâm nhập thấp (tac lớn) SRAM có tac nhỏ nên khơng cần có mạch xen thêm chu kỳ đợi Tw

Kiểm tra Parity để phát lỗi nhớ RAM

Bộ nhớ bán dẫn DRAM dùng cho máy tính cá nhân ngày có giá ngày giảm nên người ta đưa vào sử dụng nhớ DRAM với dung lượng ngày lớn việc kiểm tra parity để phát lỗi thiết bị nhớ cần thiết Cụ thể, người ta dùng thêm bit (bit thứ 9) để làm bit kiểm tra parity cho bit liệu – người ta so sánh bit parity ghi đọc để phát lỗi Thực tế dùng hai kiểu parity parity chẵn (even parity) parity lẻ (odd parity)

Parity chẵn: Khi tổng số bit bit liệu chẵn ghi vào bit thứ số 0, ngược lại ghi (bit parity = xor (8 bit liệu))

Parity lẻ: Khi tổng số bit bit liệu lẻ thfi ghi vào bit thứ số 0, ngược lại ghi (bit parity = xor (8 bit liệu) xor1)

Mặc dù công việc thực chương trình nhiên thực phần cứng cho kết nhanh nhiều Trong thực tế, người ta chế tạo vi mạch chuyên dụng thực công việc kiểm tra parity nhằm xác định lỗi nhớ hoạt động (ghi/đọc) Một vi mạch loại mạch tạo parity phát lỗi 74AS280

Số bit đầu vào: A-I

Đầu

even old

0, 2, 4, 6,

1, 3, 5, 7,

Hình vẽ: Sơ đồ ghép nối EPOM 2732 với 8088

A y0 B y1 C y2

y3 y4 G2A y5 G2B y6 G1 y7

A12 A13 A15

IO/M

B000-B1FFF RD

CS0

D7-D0

Các chân chọn chip cho vi mạch nhớ SRAM 8Kx8

lại

BE000-BFFFF A19-A15

A11-A0

Bộ Tạo Tw Tới RDY1

của 8284

+5V

EPROM 2732 OE

CE

even A

B 74A280 I

old

(68)

even = xor(A-I); old = (xor(A-I))xor1

Hình vẽ: Sơ đồ khối bảng trạng thái 74AS280

Dưới sơ đồ tổng thể nhớ SRAM thực tế có sử dụng vi mạch 74AS280 để tạo kiểm tra parity Nếu có sai parity có lỗi nhớ ghi/đọc lỗi dùng để tạo yêu cầu ngắt không che NMI gửi đến CPU Trong sơ đồ có sử dụng thêm mạch nhớ 4044 (là loại có dung lượng 4Kx1) để ghi bit parity Các vi mạch nhớ giải mã (chọn) thông qua ẵ mạch giải mã 74LS139 (mạch giải mã gần giống 74LS138, tách làm nửa làm việc độc lập nhau) Trong sơ đồ này, ta sử dụng parity chẵn, tức số bit đầu vào từ A đến H 74LS280A chẵn (I nối đất = 0) ta ghi vào nhớ parity, ngược lại ta ghi Khi đọc liệu, bit parity đưa đến đầu vào I 74LS280B, bit đầu đọc chân từ A đến H (dữ liệu) khơng đổi đầu Σ even 74LS280B = nên không xuất yêu cầu ngắt NMI

Với sơ đồ ta phát sai bit (là đặc điểm parity) byte nhớ (Nếu sai bit parity khơng phát được)

Trong thực tế tồn mạch phức tạp cho phép phát sửa sai ghi thêm vào byte liệu nên có khả phát sai bit tự động sửa sai bit lỗi (nếu lỗi bit)

Việc ghép vi xử lý 8088 – 5MHz (vi xử lý nói chung) với DRAN phức tạp cần có thêm mạch dồn kênh địa mạch làm tươi (refresh) Thông thường, thông tin lưu DRAM xác (được bảo tồn) ta phải làm tươi DRAM định kỳ sau 15,6 s/lần

Các mạch DRAM thường có chế độ làm tươi:

Làm tươi mảng: mảng phần tử nhớ gồm 128 đến 256 (thậm chí 512) hàng chọn để làm tươi – ms (hoặc ms) lần

Làm tươi hàng: với tốc độ cho đảm bảo phần tử nhớ làm tươi giới hạn 15,6 s/lần

(69)

Đối với DRAM, nói chung nhà chế tạo cấu trúc mạch cho thời gian làm tươi phần tử nhớ 15,6 s/lần

Khi phối ghép DRAM với nhớ ta cần thực hiện:

 Dồn kênh loại địa cho mạch nhớ cung cấp xung cho phép chốt loại địa RAS CAS

 Cung cấp tín hiệu điều khiển ghi/đọc nhớ

 Làm tươi hàng thời gian đảm bảo yêu cầu không mát thơng tin

 Đảm bảo khơng có tranh chấp hoạt động bình thường vi xử lý với công việc làm tươi

Để đơn giản công việc phối ghép DRAM với vi xử lý, nhà sản xuất vi mạch nhớ DRAM cung cấp “bộ điều khiển DRAM” thực chức mạch dồn kênh cho địa hàng, cột mạch làm tươi mà không ảnh hưởng nhiều đến hoạt động bình thường hệ vi xử lý

Các chân tín hiệu điều khiển DRAM TMS 4500A:

 RA7 – RA0 (Row Address) [I]: Địa hàng, thường nối với Address bus chân địa phần thấp: A7 – A0

Tạo nhịp Và điều khiển

MUX

Counter Row Addr latch

Col Addr latch

CS Latch

Trọng tài Tạo xung Làm tươi

RAS0

RAS1

CAS

RDY RA7-RA0

CA7-CA0 ALE

ALE

REN1 CS

TWST FS0 FS1

CLK

MA7-MA0

ACW ARC

REFREQ

Hình vẽ: Bộ điều khiển DRAM TMS 4500A

RAS

CAS

A7-A0 Row Addr Row Addr Row Addr

Don‟t carer

(70)

 CA7 – CA0 (Column Address) [I]: Địa cột, thường nối với Address bus chân địa phần cao: A15 – A8

 MA7 – MA0 (Memory Address) [O]: Địa cho vi mạch nhớ, nối trực tiếp với DRAM chân địa chỉ: A7 – A0

 ALE (Address Latch Enable) [I]: Tín hiệu cho phép chốt địa hàng, địa cột, REN CS

 CS (Chip Select) [I]: Xung chọn vi mạch để bắt đầu việc ghi/đọc DRAM, nối qua điều khiển thời điểm sườn xuống (âm) xung ALE

 REN1 [I]: Chọn khối nhớ DRAM nối với điều khiển:

o REN1 = chọn RAS0

o REN1 = chọn RAS1

 ACR [I]: Sườn lên xung kết thúc việc đọc Thường nối với RD chế độ MIN 8088

 ACW [I]: Sườn lên xung kết thúc việc ghi Thường nối với WR chế độ MIN 8088

 CLK [I]: Đầu vào xung đồng hồ (nối với CLK 8088)

 REFREQ [I/O]: Khi tín hiệu vào: để điều khiển việc bắt đầu chu kỳ làm tươi Còn ra: để báo cho bên biết nhớ làm tươi

 RAS1, RAS0 [O]: Các chân cho phép chốt địa hàng cho khối nhớ DRAM

 CAS [O]: Chân cho phép chốt địa cột DRAM

 RDY [O]: RDY = DRAM làm tươi, nên chưa sẵn sàng (chân nối với RDY 8088)

 TWST (Timming/Wait Strap) [I]: Chọn trạng thái chờ thơng số thời gian khác Khi TWST = vi xử lý phải xen thêm số trạng thái chờ (1 Tw) ghi/đọc nhớ DRAM

 FS1, FS0 [I]: Cùng với TWST để chọn chế độ làm việc theo bảng sau:

Bảng:

TWST FS1 FS0 Số trạng

thái chờ Chu kỳ làm tƣơi

Tần số xung làm tƣơi

(KHz)

Số nhịp cho lần làm tƣơi

0 0 Ngoài REFREQ

0 Tclkx31 64-95

0 0 Tclkx46 64-85

0 1 Tclkx61 64-82

1 0 Tclkx46 64-85

1 1 Tclkx61 64-80

1 1 Tclkx76 64-77

1 1 Tclkx91 64-88

(71)

Ví dụ: Ví dụ ứng dụng điều khiển DRAM TMS 4500A (để điều khiển) mạch nhớ gồm 4x4464 để tạo nên nhớ 128 KB bắt đầu địa 00000h

Trong sơ đồ, việc ghép nối chân REN1 với đường địa A16 để chọn vùng nhớ 64 KB CS nối với mạch NAND để đặt mảng nhớ vào địa định Các chân TWST, FST1, FST0 đặt tương ứng 0, để khơng có trạng thái chờ việc làm tươi tiến hành sau 61 chu kỳ đồng hồ kéo dài nhịp xung làm tươi Với tần số fclk = MHz nhịp làm tươi cho hàng 12,2 μs (≈giá trị yêu cầu 15,6 s Trong điều khiển làm tươi làm tươi nhớ RDY = CPU bị đưa vào trạng thái chờ

4.3 Phối ghép 8088 với thiết bị ngoại vi 4.3.1 Các kiểu phối ghép vào

Đối với vi xử lý 8088 Intel (hay Intel 80x86 Family) có cách phối ghép CPU với thiết bị ngoại vi (các cổng vào/ra – I/O ports), là:

CLK

1 W W W

Row Col addr Refresh Row Col addr Row Col addr ALE

ACR, ACW

MAi

RAS

CAS

REFREQ

RDY

Hình vẽ: Biểu đồ thời gian điều khiển DRAM TMS 4500A

RA7-RA0

CA7-CA0

ALE REN1 ACR ACW

CS

RDY

CLK

TWST

1K +5V

A7-A0

4464

CAS RAS A7-A0

4464

RAS CAS A7-A0

A15-A8

ALE A16

RD WR

RDY (8284)

(72)

 Thiết bị ngoại vi có khơng gian địa chung với nhớ

 Thiết bi ngoại vi có khơng địa tách biệt với nhớ

 Kiểm tra Parity để phát lỗi nhớ RAM

Thiết bị ngoại vi (I/O) có khơng gian địa tách biệt

Trong (với) cách phối ghép này, nhớ dùng hồn tồn khơng gian !MB địa mà CPU dành cho Các thiết bị ngoại vi (ports) dành riêng không gian 64 K cổng cho loại cổng vào Tất nhiên ta phải dùng tín hiệu IO/M lệnh vận chuyển liệu cách thích hợp cho khơng gian nói

Không gian nhớ Thiết bị vào Không gian cổng vào/ra Thiết bị

Kiểu lệnh Mov In Out

Tín hiệu

điều khiển IO/M = IO/M = IO/M =

Không gian địa cho nhớ thiết bị ngoại vi Thiết bị ngoại vi (I/O) có khơng địa chung với nhớ

Kiểu lệnh vận chuyển liệu: Mov Tín hiệu điều khiển: IO/M =

Trong cách phối ghép này, nhớ thiết bị ngoại vi chia sẻ khơng gian địa MB mà CPU 8088 có khả địa hoá (quản lý) Các thiết bị ngoại vi chiếm vùng địa khơng gian MB, phần cịn lại nhớ Tất nhiên trường hợp ta dùng tín hiệu điều khiển IO/M = lệnh vận chuyển liệu MOV cho nhớ thiết bị ngoại vi – CPU hiểu địa địa nhớ mà địa có thiết bị ngoại vi

4.3.2 Giải mã địa cho thiết vị vào/ra

Việc giải mã địa cho thiết bị vào/ra (I/O) gần giống giải mã địa cho nhớ đây, nhấn mạnh việc giải mã địa cho cổng Thông thường cổng có địa bits (A7 – A0), số hệ vi xử lý khác (như máy IBM PC máy tính tương thích IBM PC) cổng có địa 16 bits (A15 – A0, với 16 bits => có 64K cổng mà thực tế có máy sử dụng hết khơng gian => thường dùng 12 bits) Tuỳ theo độ dài toán hạng lệnh hay 16 bits mà ta có cổng bits hay cổng bits có địa liền (tại địa cổng ghi đệm/chốt bit Điều khơng cịn hệ vi xử lý có vi xử lý 32 bits cao hơn, cổng có số bits cực đại số bits bus liệu) để tạo nên word có độ dài tương ứng Trong thực tế có hệ vi xử lý sử dụng hết 256 địa cổng I/O khác nên để đơn giản ta

1MB 00000h

FFFFFh

64K 0000h

FFFFh

64K 0000h

FFFFh

I/O Addr Memory

00000h

(73)

chỉ xét giải mã địa bits (A7 – A0) mạch giải mã thơng dụng sẵn có (như 74LS138 chẳng hạn) để tạo xung chọn cho thiết bị ngoại vi

Các mạch giải mã đơn giản tạo từ mạch NAND số gates logic phụ hình vẽ

Trong trường hợp cần nhiều xung chọn thiết bị đầu mạch giải mã cho cổng có địa liên tiếp, ta sử dụng mạch giải mã có sẵn 74LS138 nhs sau:

Mạch giải mã giải mã cho cổng vào (ISP) cổng (OSP) tương ứng việc sử dụng tín hiệu điều khiển RD WR Trên sở mạch giải mã ta phối ghép tín hiệu đọc (RD) ghi (WR) để tạo tín hiệu chọn cho việc

đọc/ghi cổng vào/ra cụ thể Ta sử dụng 74LS138 để giải mã cho cổng vào cổng sau:

Do tín hiệu điều khiển RD WR ngược pha nên đọc cổng (RD = 0) => C = => A1, A0 chọn cổng thấp (y0 – y3) Ngược lại ghi cổng (WR = 0) => RD = => C = => A1, A0 chọn cổng cao (y4 – y7)

4.3.3 Các mạch cổng đơn giản

Trong thực tế có nhiều vi mạch tổ hợp cỡ vừa dùng làm mạch cổng phối ghép với thiết vi xử lý để vào/ra liệu Các mạch thường cấu tạo từ mạch:

 Chốt bit có đầu trạng thái:

o 74LS373: kích theo mức

o 74LS374: kích theo sườn

 Các mạch khuếch đại đệm bit chiều có đầu trạng thái (đầu đảo khơng đảo):

o 74LS240: kích theo mức

o 74LS244: kích theo mức

OSP: Xung chọn cổng ISP: Xung chọn cổng vào

I/O Port Address

ISP/OSP IO/M

RD/WR

NAND

Hình vẽ: Mạch giải mã địa cho I/O dùng NAND

Hình vẽ: Mạch giải mã địa cho I/O dùng 74LS138

A y0 B y1 C y2

y3 y4 G2A y5 G2B y6 G1 y7

A0 A1 A2

IO/M

Các tín hiệu chọn cổng

RD/WR A7-A3

ISP0/OSP0

ISP7/OSP7

Hình vẽ: Mạch giải mã địa cho Input port output port

A y0 B y1 C y2

y3 y4 G2A y5 G2B y6 G1 y7

(74)

 Các mạch khuếch đại đệm bit chiều có đầu trạng thái: 74LS245

Tất thảy, chúng dùng phối ghép đơn giản để làm cho CPU thiết bị ngoại vi hoạt động tương thích nhau, ví dụ để đệm bus mạch cổng để tạo tín hiệu móc nối (handshaking signal)

(a): Sơ đồ ví dụ mạch phối ghép đơn giản dùng mạch 74LS373 để đưa tín hiệu điều khiển đèn LED lệnh:

OUT 7ch, al

(b): Sơ đồ ví dụ mạch phối ghép đơn giản dùng mạch 74LS 244 để đọc tín hiệu từ thiết bị ngoại vi CPU lệnh:

IN al, 7ch. Hình vẽ: Sơ đồ số mạch đệm chốt: 244, 245, 373, 374

4.3.4 Mạch phối ghép vào/ra song song lập trình đƣợc PPI 8255

Mạch PPI 8255 gọi vi mạch phối ghép vào/ra song song lập trình (Programmable

Peripheral Interface – PPI) Do khả mềm dẻo ứng dụng nên mạch phối ghép

dùng phổ biến cho hệ vi xử lý: 8, 16, cao Các chân tín hiệu PPI 8255:

D Q

G Q0 Q7 D0 OSP7ch D7 G

Điều khiển LED D Bus 74LS373 Q0 Q7 D0 OSP7ch D7

Bus hệ thống TB vào

74LS244 OC1 OC7

Nhóm A Port A Nhóm A Port C Nhóm B Port C Nhóm B Port B Điều khiển Nhóm A Điều khiển Nhóm A Logic điều khiển ghi/đọc Đệm Bus D7-D0 PA7-PA0 PC7-PC4 PC3-PC0 PB7-PB0 Internal Bus RD WR A0 A1 Reset CS

(75)

Reset [I]: Phải nối với tín hiệu Reset chung tồn hệ thống (khi reset tất cổng vi mạch định nghĩa cổng vào để không gây cố cho mạch điều khiển cấu chấp hành)

CS [I]: Được nối với mạch giải mã, nhận tín hiệu xung chọn thiết bị để đặt 8255 vào địa sở

A1, A0 [I]: Là bits địa chỉ, thường nối với bits địa thấp Address bus để chọn ghi bên 8255 (3 ghi bits cho cổng ghi bits để ghi từ điều khiển cho hoạt động 8255, Control Word – CW)

Theo bảng bên ta thấy: PA có địa trùng với địa sở vi mạch 8255

Có loại từ điều khiển cho 8255 là:

 Từ điều khiển định nghĩa cấu hình cho cổng: PA, PB, PC

 Từ điều khiển lập/xoá bits ghi (cổng) PC (PCi)

Từ điều khiển định nghĩa cấu hình

Từ điều khiển định nghĩa cấu hình (CWR) có dạng thức sau:

Từ điều khiển lập xoá bits đầu ta PC (PCi):

Nhận xét: Ta thấy chế độ (modes) làm việc vi mạch PPI 8255 định nghĩa từ điều khiển CWR Cụ thể 8255 có chế độ làm việc sau:

CS A1 A0 Chọn

1 x x Không chọn

0 0 PA

0 PB

0 PC

0 1 CWR

Bảng: Các ghi chọn theo CS A1, A0

MA1 MA0 A CA MB B CB

Chọn chế độ Nhóm A 00: Mode 01: Mode 1x: Mode

PA 0: Out

1: In PCH

0: Out 1: In

PB 0: Out

1: In PCL

0: Out 1: In Chọn chế độ Nhóm B 0: Mode 1: Mode

C B A S/R

(76)

 Chế độ (mode 0): Chế độ vào/ra sở: Còn gọi chế độ vào/ra đơn giản Trong chế độ cổng PA, PB, PCH, PCL định nghĩa cổng vào cổng nên có 16 tổ hợp khác chế độ

 Chế độ (mode 1): Vào/ra có xung cho phép: Trong chế độ này, cổng PA, PB định nghĩa cổng vào (4 tổ hợp) với tín hiệu móc nối (bắt tay – handshaking) bit tương ứng cổng PC đảm nhiệm

 Chế độ (mode 2): Vào/ra chiều: Trong chế độ riêng cổng PA định nghĩa cổng vào/ra chiều với tín hiệu móc nối bit cổng PC đảm nhiệm Cịn cổng PB làm việc chế độ

 Lập/xoá bits PCi: Chế độ hoạt động theo thiết lập từ điều khiển lập/xoá bit PC Một vài ứng dụng chế độ này:

o Tạo dãy xung PC

o Điều khiển cho việc đóng cắt cấu

o Điều khiểm motor bước (điều chỉnh tốc độ chẳng hạn)

Cụ thể 8255 có chế độ làm việc sau: Cụ thể chế độ làm việc 0,1 8255 sau:

Chế độ (Mode 0): Vào/ra sở (vào/ra đơn giản)

Như biết chế độ này, bốn cổng PA, PB, PCH, PCL định nghĩa cổng vào cổng Như vậy, với tổ hợp tất khả vào/ra cho bốn cổng ta có 16 cấu hình tổ hợp khác

Khi cổng ra: số liệu viết cổng

chốt Byte số liệu tồn đầu cổng byte viết tới

Khi cổng vào: Đọc byte giá trị byte đầu nối cổng Các số liệu không chốt (luôn thay đổi theo giá trị đầu vào)

Chế độ (Mode 1): Vào/ra có xung cho phép

Như biết, chế độ cổng PA, PB định nghĩa cổng vào cổng với tín hiệu móc nối (handshaking) bit tương ứng cổng PC nhóm đảm nhiệm Để đơn giản, ta coi PA PB định nghĩa cổng vào cổng (cùng vào ra)

Vào liệu chế độ

Trong đó:

STB: Strobe

IBF: Input Buffer Full INTR: Interrupt

INTE: Interrup Enable

Cấu hình

PA PB PCH PCL

1 Vào Vào Vào Vào

2 Vào Vào Vào Ra

16 Ra Ra Ra Ra

PC4

PC5

PC3

PC2

PC1

PC0

PA7-PC0

PB7-PB0 IBFA

INTRA STBA

IBFB

INTRB STBB

PC6,7 INTEB

INTEA

(77)

Ở cổng PA PB định nghĩa cổng vào có tín hiệu móc nối tương đương cho việc trao đổi liệu Để đơn giản ta cần nói tín hiệu điều khiển cho PA, cịn tín hiệu cho PB hồn tồn tương tự

/STB (Strobe – Cho phép chốt liệu): Khi liệu săn sàng để đọc vào cổng PA, thiết bị ngoại vi phải dùng tín hiệu /STB để báo cho PPI 8255 biết mà chốt liệu

IBFA (Input Buffer Full A port): Sau PPI 8255 chốt liệu thiết bị ngoại vi đưa đến, đưa tín hiệu IBFA để báo cho thiết bị ngoại vi biết chốt xong

INTRA (Interrupt A Port – Yêu cầu ngắt từ cổng PA): Tín hiệu (của 8255) để báo cho CPU biết có liệu sẵn sàng để đọc từ PA Đây kết thu từ quan hệ tín hiệu khác 8255 trình hội thoại với thiết bị ngoại vi (cần ý xem kỹ biểu đồ thời gian quan hệ tín hiệu)

INTEA (Interrupt Enable A Port): Là tín hiệu mạch lật bên 8255 phép cấm yêu cầu ngắt INTRA PA Tín hiệu INTEAđược lập xố (cùng pha) với tín hiệu (thơng qua) bit PC4 cổng PC Điều có nghĩa /STB tích cực khơng có tín hiệu INTRA Tại mức thấp tín hiệu /STB (tích cực) xuất tín hiệu IBF báo cho thiết bị ngoại

vi 8255 chốt xong Khi STB = xuất tín hiệu INTRA yêu cầu ngắt CPU để phục vụ cho việc đọc liệu từ cổng PA (INTE  STB)

Một số tín hiệu đối thoại – trạng thái nói (đều) lấy

được trực tiếp từ chân tương ứng vi mạch đọc vào thơng qua việc đọc PC (Theo hình vẽ: Các bit PC – Vào liệu chế độ 1)

Các tín hiệu đối thoại – trạng thái sử dụng làm tín hiệu móc nối cho kiểm tra vào/ra liệu cách ngắt vi xử lý hay cách thăm dò trạng thái sẵn sàng thiết bị ngoại vi (mà nghiên cứu phần sau)

Ra liệu chế độ

Trong đó:

ACK: Strobe

OBF: Input Buffer Full INTR: Interrupt

STB

IBF Data

INTR

RD

Hình vẽ: Biểu đồ thời gian tín hiệu 8255 chế độ - vào

D7 D6 D5 D4 D3 D2 D1 D0 I/O I/O IBFA /STBA INTRA /STBB IBFB INTRB

Hình vẽ: Các bits (control signals) PC (vào liệu chế độ 1)

Hình vẽ: Vào liệu chế độ

(78)

INTE: Interrup Enable

Ở cổng PA, PB định nghĩa cổng có tín hiệu móc nối tương đương cho việc trao đổi liệu Để đơn giản ta xét tới tín hiệu (cho) liên quan cổng PA, cịn tín hiệu cho PB hồn tồn tương tự

/OBFA (Output Buffer Full A port - Đệm PA đầy): Tín hiệu báo cho thiết bị ngoại vi biết CPU ghi liệu vào cổng (PA) để chuẩn bị đưa Tín hiệu thường nối với /STB thiết bị ngoại vi (thiết bị nhận)

ACKA (Acknowlegde A port – Trả lời (xác nhận) nhận liệu): Đây tín hiệu thiết bị ngoại vi trả lời cho biết nhận liệu từ PA 8255

INTRA (Interrupt A Port – Yêu cầu ngắt từ cổng PA): Đây kết thu từ quan hệ tín hiệu 8255 q trình đối thoại với thiết bị ngoại vi, dùng để phản ánh yêu cầu ngắt PA tới CPU (cần ý xem kỹ biểu đồ thời gian quan hệ tín hiệu – liệu chế độ 1)

INTEA (Interrupt Enable A Port): Là tín hiệu mạch lật bên 8255 phép cấm yêu cầu ngắt INTRA PA Tín hiệu INTEA lập xố (cùng pha) với tín hiệu (thơng qua) bit PC6 cổng PC

Các tín hiệu đối thoại – trạng thái nói lấy trực tiếp từ chân tương ứng vi mạch đọc vào CPU thơng qua việc đọc cổng PC (Theo hình vẽ: Các bits PC – chế độ 1)

Chế độ (Mode 2): Vào/ra chiều cho PA

Trong chế độ này, riêng cổng PA định nghĩa để làm việc cổng chiều có tín hiệu móc nối số bits cổng PC đảm nhiệm, cổng PB làm việc chế độ tuỳ theo giá trị bit điều khiển CWR (do người sử dụng lựa chọn đặt) Các chân tín hiệu cịn lại PC định nghĩa để làm việc tín chân vào ra, phục vụ cho cổng PC

Hình vẽ: Biểu đồ thời gian tín hiệu 8255 chế độ - vào

OBF

Data INTR

WR

ACK

Hình vẽ: Các bits (control signals) PC (RA liệu chế độ 1)

(79)

Một số tín hiệu móc nối đặc biệt PA gồm:

INTRA (Interrupt A Port – Yêu cầu ngắt từ cổng PA): Tín hiệu yêu cầu ngắt cho việc vào liệu PA (dữ liệu vào/ra theo chiều)

INTEA1, INTEA2: Là tín hiệu mạch lật 8255 để: cho phép cấm ngắt cổng PA (thiết bị nối vào cổng PA) Các tín hiệu lập/xố pha bits tương ứng PC6 PC4 cổng PC

Hình vẽ: PA: Mode 2; PB Mode 0/vào PC2-PC0: I/O tuỳ theo CWR

PC3 PC7 PC6 PC5 PC4 PA7-PC0 PB7-PB0 INTRA INTE2 INTE1 WR OBFA ACKA STBA

PC2-PC0 IBFA RD

Hình vẽ: Các bits (control signals) PC (RA liệu chế độ 1)

D7 D6 D5 D4 D3 D2 D1 D0 /OBFA /ACKA IBFA /STBA INTRA I/O I/O I/O

Hình vẽ: Các bits (control signals) PC (RA liệu chế độ 1)

D7 D6 D5 D4 D3 D2 D1 D0 /OBFA /ACKA IBFA /STBA INTRA /ACKB /OBFB INTRB

Hình vẽ: PA: Mode PB: Mode 1/ra

PC3 PC7 PC6 PC5 PC4 PC1 PA7-PC0 PB7-PB0 INTRA INTR2 INTE1 WR OBFA ACKA STBA PC2 PC0 OBFB ACKB INTRB IBFA RD PC1 PC4 PC5 PC6 PC7 PC3 INTE2 INTE1

Hình vẽ: Biểu đồ thời gian tín hiệu 8255 chế độ

OBFA

Data (D Bus I/O device)

INTRA

RD

D: I/O8255 D: 8255I/O ACKA

STBA

(80)

Một số tín hiệu đối thoại – trạng thái kể lấy trực tiếp từ chân tương ứng vi mạch đọc vào CPU từ cổng PC cho phép điều khiển việc trao đổi liệu cách thăm dị tín hiệu

Khi dùng PPI 8255 mode (vào/ra chiều) để trao đổi liệu theo cách thăm dò ta phải kiểm tra xem bit OBFA có (đệm rỗng) hay không trước dùng lệnh OUT để đưa liệu cổng PA, kiểm tra bit IBFA có (đẹm vào rỗng) hay không trước dùng lệnh IN để đọc liệu vào từ cổng PA

Một số ví dụ cách lập trình cho PPI 8255

Ví dụ 1: Xây dựng mạch giải mã cho PPI 8255 địa 314h

o Đọc PA, tăng giá trị đọc lên đưa PB

o Đọc PCH, giảm giá trị đọc đi1 đưa PCL Công việc cần thực 100 lần

Giải:

Theo yêu cầu đề ta có:

PA: vào; PB: ra; PCH: vào; PCL: ra; 8255 làm việc mode

Giá trị cần khởi tạo CWR là: 98h

Có thể dùng phần tử gates logic để thực (xây dựng) mạch giải mã cho 8255 địa 314h = 0011 0001 0100 hình vẽ:

Hình vẽ: Sơ đồ Đoạn chương trình thực hiện:

; Định nghĩa địa cho cổng để đơn giản việc viết lệnh PA Equ 314h

CONFIG MA0 MA1 A CA MB B CB 0 1 0

PA

PB

PPI 8255

PCH

PCL D Bus

A0 A1 RD

Reset A2

A4

WR

(81)

PB Equ 315h PC Equ 316h CWR Equ 317h …

Mov al, 98h ; Giá trị cần khởi tạo cho 8255 Out CWR, al ; theo yêu cầu đề

Mov cx, 100 ; Thực 100 lần đọc xử lý số liệu Lặp:

In al, PA ; Đọc cổng PA

Inc al ; Tăng giá trị đọc lên đơn vị Out PB, al ; đưa cổng PB

In al, PC ; Đọc cổng PCH

Push cx ; Cất tạm biến đếm vòng lặp Mov cl, ; Quay al lần để

Rol al, cl ; để chuyển bit cao thành bit thấp Dec al ; giảm đơn vị

Out PC, al ; đưa cổng PCL

Pop cx ; Lấy lại biến đếm vòng lặp Loop Lặp

Ra: …

Ví dụ 2: (Chỉnh lại ví dụ sách KT vi xử lý – Văn Thế Minh)

Có mạch 8255 với địa sở 300h nối với phần tử ngoại vi đơn giản (hình vẽ) Lập trình để có U2>U1 đọc trạng thái cơng tắc K, K đóng cho LED tắt, ngược lại cho LED sáng

Giải:

Theo yêu cầu đề bài, để giải ta (cần) định nghĩa cho cổng từ điều khiển để định nghĩa cấu hình cho 8255 cho:

PA, PB cổng vào, PCH cổng ra, 8255 làm việc mode

Trong chương trình: đọc PB, kiểm tra bit PB7 = 1?, khơng đọc lại, có đọc PA, kiểm tra bit PA0, = 0?, có (K đóng) ghi vào PC với

PC4=0 (tắt đèn), ngược lại ghi vào PC với PC4=1 (sáng đèn)

PA, PB: vào; PCL không dùng (vào ra); PCH: ra; 8255 làm việc mode

Giá trị cần khởi tạo CWR là: 93h

Đoạn chương trình thực hiện:

PA0

PPI 8255

PB7

PC4

RD WR A0 A0 Reset

CS

K 5V

U2

U1

+

-

5V D Bus

(82)

; Định nghĩa địa cho cổng để đơn giản việc viết lệnh PA Equ 300h

PB Equ 301h PC Equ 302h CWR Equ 303h …

Mov al, 98h ; Giá trị cần khởi tạo cho 8255 Out CWR, al ; theo yêu cầu đề DocPB:

In al, PB ; Đọc cổng PB

And al, 80h ; PB7 = 1?

Jz DocPB ; Không, đọc lại PB để kiểm tra PB7 In al, PA ; Phải, đọc PA

And al, ; PA0 = 0?

Jz Off ; Phải, đến tắt đèn

Mov al, 10h ; Không, cho đèn sáng (lal = 0001 0000) Ou PC, al ; Ghi PC4 cổng PCH

Jmp Ra Off:

Out PC, al ; Ghi PC4 cổng PCL Ra: …

Chú ý: Chương trình điều khiển việc vào/ra liệu theo phương pháp thăm dò (polling) mà ta xét phần sau 8255 sử dụng mode (vào/ra đơn giản) Ta sử dụng 8255 mode để giải vấn đề tốn

Ví dụ 3: (Theo tài liệu KT vi xử lý – Văn Thế Minh)

Lập trình để bit PC4 8255 tạo 256 xung với chu kỳ T = 50 ms, độ rỗng 50 Giả thiết có sẵn chương trình làm nhiệm vụ trễ 25 ms có tên Delay25ms, địa 8255 là: 304h

Giải:

Với yêu cầu toán vậy, ta nghĩ đến việc cho 8255 làm việc chế độ lập/xoá bit PC (PC4)

Vì địa 8255 304h nên địa CWR 307h Giá trị cần đưa CWR có xung là: 0000 1001 = 09h Giá trị cần đưa CWR khơng có xung là: 0000 1000 = 08h

Đoạn chương trình thực hiện:

; Định nghĩa địa cho cổng để đơn giản việc viết lệnh CWR Equ 307h

Mov cx, 100h ; Cần tạo 256 xung

Cli ; Cấm ngắt che

Mov al, 09 ; Chuẩn bị để tạo xung Lặp:

(83)

Dec al ; al = 08, xoá bit Out CWR, al ; Xoá xung (xoá PC4)

Call Delay25ms ; Kéo dài 25 ms (độ rỗng 25)

Inc al ; Chuẩn bị để lập PC4

Loop Lặp

Sti ;Cho phép ngắt trở lại

Chú ý: Thực dãy xung chưa hoàn tồn xác chương trình con Delay25ms khó xây dựng cách xác tuyệt đối Hơn nứa, cịn (số) lệnh xen thêm vào việc lập/xoá PC4 Inc Dec, lệnh tiêu tốn số chu kỳ đồng hồ Ngay thân lệnh Out, Call tốn thêm số chu kỳ đồng hồ nữa Tuy nhiên, số ứng dụng cụ thể mà khơng u cầu cao độ xác thì ta áp dụng cách (phục vụ điều khiển chẳng hạn)

Ví dụ 4: (Sử dụng 8255 làm việc mode – PA: vào.)

Xây dựng mạch mở rộng để vào liệu qua cổng PA 8255 – mode 1, địa sở 8255 300h

Giải:

Giá trị cần đưa CWR là: 1011 1111 = 0BFh

(Các bit: CA, MA, B, CB không quan tâm nên đặt 1)

Đoạn chương trình thực hiện:

;Định nghĩa địa cho cổng để đơn giản việc viết lệnh

PA Equ 300h PC Equ 302h CWR Equ 303h …

Mov al, 0BFhh ; Giá trị cần đưa CWR để

Out CWR, al ; khởi tạo cho 8255 làm việc theo yêu cầu đề Lặp:

In al, PC

Test al, 08h ; PC3 = 0? (And al, 08h)

PA

PPI 8255

PC4

RD WR A0 A1

Reset

CS

Analog 5V

From Address decoder at 300h

74LS245

E

ADC bit

D Bus

STB

Not

(84)

Jz Lặp ; phải, kiểm tra lại

In al, PA ; Không (PC3 = 1), đọc PA

Call hien_thi ; Hiển thị kết đọc ghi al Jmp Lặp ; Thể cơng việc vịng lặp vơ hạn …

(85)

Chƣơng 5: VÀO RA DỮ LIỆU BẰNG CÁCH THĂM DÒ 5.1 Giới thiệu chung phƣơng pháp điều khiển vào/ra liệu

Qua chương 4, tìm hiểu số mạch thường dùng cho việc phối ghép CPU với thiết bị ngoại vi Ta tiến hành phương pháp (phương thức) điều khiển việc trao đổi liệu Các mạch phối ghép vào/ra trình bày trước ứng dụng để phục vụ cho mục đích

Máy tính trao đổi thơng tin (vào/ra liệu) với thieets bị ngoại vi theo chế độ sau:

Với cách vào/ra liệu theo chương

trình phân thành phương pháp cụ thể là:

Đồng (Không điều kiện - không hội thoại)

Sau khởi động (khởi tạo) thiết bị ngoại vi, CPU (và thiết bị ngoại vi) không “quan tâm” tới việc thiết bị ngoại vi có sẵn sàng cho việc trao đổi liệu hay khơng Nó ln thực lệnh trao đổi liệu (IN, OUT) cách trực tiếp Phương pháp yêu cầu:

 Thiết bị ngoại vi sẵn sàng trao đổi liệu

 Tốc độ trao đổi liệu CPU thiết bị ngoại vi phù hợp (TBNV có tốc độ làm việc nhanh)

Ví dụ, hệ đo nhiệt độ ghép nối với máy tính, điện áp cặp nhiệt điện khuếch đại lên, biến đổi thành tín hiệu số đọc vào máy tính Ta thấy tín hiệu lúc sẵn sàng cho CPU đọc nhiệt độ đại lượng biến đổi chậm so với tốc độ máy tính với nó, CPU lúc đưa số liệu hiển thị số đo Đây gọi trình vào/ra đồng

bộ hay khơng có móc nối (khơng có hội thoại)

Khơng đồng (Có điều kiện - có hội thoại)

Polling: CPU thiết bị ngoại vi trao đổi liệu có tín hiệu móc nối báo sẵn sàng (Ready/Akc) phía Sau máy tính khởi động thiết bị ngoại vi (khối ghép nối), máy tính ln chờ kiểm tra trạng thái sẵn sàng thiết bị ngoại vi gồm bước:

(1)Đọc thông tin trạng thái sẵn sàng thiết bi ngoại vi (2)Kiểm tra: Nếu thiết bị ngoại vi sẵn sàng trao đổi

liệu, ngược lại bước (1) để kiểm tra lại

Vào/ra liệu Vào/ra theo chương trình:

Khơng hội thoại (trực tiếp)

Có hội thoại

Thăm dò (polling)

Ngắt (Interrupt) Truy nhập trực tiếp nhớ (DMA – Direct Memorry Access

TNNV sẵn sàng? Đọc thông tin

Vào/ra liệu F

(86)

Phương pháp dùng tốc độ trao đổi liệu bên (CPU thiết bị ngoại vi) không có số đặc điểm sau:

Việc trao đổi thơng tin tin cậy trao đổi thiết bị ngoại vi sẵn sàng

Tốn thời gian CPU phải kiểm tra trạng thái sẵn sàng thiết bị ngoại vi (việc kiểm tra co CPU đảm nhiệm) nên giảm hiệu suất hệ thống

Phù hợp với hệ thống không đòi hỏi cao tốc độ trao đổi liệu, hệ thống có thiết bị ngoại vi

Chúng ta xem xét cụ thể phương pháp vào/ra phần sau

Vào/ra liệu điều khiển ngắt chƣơng trình (ngắt vi xử lý - Interrupt):

Bình thường máy tính thực chương trình (cơng việc) Khi thiết bị ngoại vi có yêu cầu trao đổi liệu, gửi tín hiệu u cầu ngắt CPU dừng cơng việc tại, phục vụ cho trao đổi liệu thông qua tín hiệu yêu cầu ngắt IRQ (Interrupt Request) tác động vào chân INTR (chân tiếp nhận yêu cầu ngắt) CPU CPU nhận yêu cầu ngắt, chấp nhận đưa xung INTA xác nhận tới thiết bị ngoại vi, sau CPU tìm chương trình phục vụ ngắt tương ứng số hiệu ngắt thực Đó

chương trình thực trao đổi (vào/ra) liệu thiết bị ngoại vi yêu cầu Khi trao đổi xong (ISR – Interrupt Service Routine) kết thúc CPU tiếp tục cơng việc (chương trình) bị gián đoạn

Vào/ra liệu điều khiển phần cứng phụ để thâm nhập trực tiếp nhớ (DMA - Direct Memorry Access):

Trong phương pháp vào/ra liệu chương trình kể trên, liệu phải chuyển qua lại từ nhớ đến CPU đến thiết bị ngoại vi ngược lại việc thực lệnh (MOV, IN OUT) CPU với tham gia ghi Dữ liệu lần vận chuyển byte word (2 byte), tốc độ trao đổi liệu phụ thuộc nhiều vào tốc độ thực lệnh trao đổi liệu kể Nói chung, tốc độ trao đổi liệu khơng thể nhanh Với thiết bị làm việc với nhớ khối hình, ổ đĩa, yêu cầu trao đổi mảng liệu phương pháp vào/ra liệu chương trình khơng phù hợp Khi người ta nghĩ đến việc điều khiển liệu vào/ra trực tiếp từ nhớ đến thiết bị ngoại vi ngược lại mà không thông qua CPU lệnh trao đổi liệu MOV, IN OUT Đó phương pháp vào/ra liệu cách truy nhập trực tiếp nhớ (DMA – Direcr Memory Access) Trong trường hợp CPU trao quyền điều khiển cho mạch phần cứng phụ điều khiển việc vào/ra liệu, DMAC – DMA Controller Chi tiết phương pháp trình bày kỹ phần sau

Qua việc trình bày sơ lược phương pháp điều khiển việc vào/ra liệu ta thấy phương pháp có đặc điểm khác (ưu nhược điểm), chúng ứng dụng phù hợp hoàn cảch cụ thể khác Một phương pháp điều khiển đơn giản mà xem xét chương phương pháp trao đổi khơng đồng (có hội thoại) hay gọi phương pháp thăm dò trạng thái sẵn sàng thiết bị ngoại vi (polling) trước thực vào/ra liệu

Yêu cầu ngắt Chương trình

phục vụ ngắt (trao đổi liệu) Chương trình

(87)

5.2 Vào/ra liệu cách thăm dò trạng thái sẵn sàng thiết bị

Phương pháp vào/ra liệu cách thăm dò trạng thái sẵn sàng thiết bị ngoại vi phương pháp điều khiển vào/ra liệu chương trình – có hội thoại Tín hiệu hội thoại (handshaking signal) tín hiệu báo trạng thái sẵn sàng thiết bị ngoại vi

Việc điều khiển vào/ra liệu trở nên đơn giản thiết bị ngoại vi lúc sẵn sàng chờ làm việc (trao đổi liệu) với CPU – Như đề cập đến phần giới thiệu – phương pháp vào/ra liệu đồng (trực tiếp – không hội thoại) Tuy nhiên thực tế lúc CPU làm việc với thiết bị ngoại vi “liên tục sẵn sàng” trên, tốc độ làm việc thiết bị ngoại vi CPU chênh lệch Thông thường CPU muốn trao đổi liệu với thiết bị ngoại vi đó, thơng qua chương trình liên tục kiểm tra trạng thái sẵn sàng thiết bị ngoại để xem có yêu cầu trao đổi liệu (yêu cầu phục vụ) hay khơng? Đến có thiết bị ngoại vi có yêu cầu trao đổi liệu (tức có tín hiệu báo trạng thái sẵn sàng – readly) chương trình chuyển sang thực việc trao đổi liệu (công việc trao đổi lệnh chương trình chương trình phục vụ – ISR) lại tiếp tục kiểm tra thiết bị ngoại vi Quá trình thực tiếp tục đến thiết bị ngoại vi cuối lại lặp lại từ đầu Vậy, làm việc theo phương pháp thăm dị thơng thường CPU phải dành riêng cho cơng việc trao đổi liệu phải liên tục kiểm tra trạng thái sẵn sàng thiết bị ngoại vi thơng qua tín hiệu móc nối Các tín hiệu lấy từ mạch phối ghép, người thiết kế mạch tạo chương trình kiểm tra Việc tính tốn đồng xây dựng mạch chương trình điều khiển

Nói chung, phương pháp đơn giản tổ chức phần cứng phần mềm gặp phải nhược điểm số lượng thiết bị ngoại vi tăng lên làm lãng phí thời gian CPU cho việc kiểm tra trạng thái sẵn sàng khả đáp ứng tức thời với phục vụ CPU thấp

Hình vẽ cho thấy lưu đồ chương trình điều khiển theo phương pháp thăm dò số lượng số thiết bị ngoại vi >

TNNV1 sẵn sàng?

Vào/ra liệu với TBNV1

Chương trình điều khiển

T

TNNV1 sẵn sàng?

Vào/ra liệu với TBNV1

F

TNNV1 sẵn sàng?

Vào/ra liệu với TBNV1

T

F

T

F

(88)

Nếu thông tin phát nhận từ thiết bị ngoại vi thiết lập cờ trạng thái thích hợp (thơng thường mạch lật trạng thái xung STB thiết bị ngoại vi) Bộ vi xử lý kiểm tra cờ trạng thái thực modul chương trình trao đổi liệu cờ trạng thái báo thiết bị ngoại vi sẵn sàng cho việc trao đổi liệu Nó tín hiệu yêu cầu phục vụ (thụ động) cho việc vào/ra liệu

Sau ví dụ cách tạo tín hiệu móc nối tổ chức phần cứng lưu đồ thuật tốn (chương trình điều khiển) dùng cho việc trao đổi liệu CPU thiết bị ngoại vi

Để đơn giản, ví dụ ta giả thiết CPU làm việc với thiết bị ngoại vi và thiết bị ngoại vi Việc tổ chức phối ghép phần cứng thực vi mạch (IC) cỡ vừa để dễ theo dõi tín hiệu

Một cổng vào có địa 00 dùng để đọc trạng thái sẵn sàng thiết bị ngoại vi số số (TB1: vào; TB2: ra) Tín hiệu báo sẵn sàng thiết bị ngoại vi số (có địa 01) đặt vào bit D0 tín hiệu báo sẵn sàng thiết bị ngoại vi số (có địa 02) đặt vào bit D1 bus liệu Các bit tín hiệu có giá trị thiết bị ngoại vi tương ứng trạng thái sẵn sàng trao đổi liệu với CPU chúng đưa vào bus liệu CPU đọc lệnh đọc cổng có địa 00 Chương trình điều khiển trao đổi liệu kiểm tra bit báo sẵn sàng có đáp ứng thích hợp

Cụ thể hoạt động phần mạch vào liệu sau: Khi thiết

bị vào (TB1) có (1 byte) liệu cần (trao đổi) đưa vào hệ thống, đưa xung STB phép mạch chốt bit chốt lấy liệu đồng thời kích cho mạch lật D (mạch tạo tín hiệu sẵn sàng) làm việc => đầu Q = Bộ vi xử lý (CPU) thông qua lệnh đọc cổng 00 để thăm dò trạng thái sẵn sàng thiết bị ngoại vi số thông qua bit D0 Khi thấy D0 = 1, đọc byte liệu vào đồng thời xố ln Q (Q = 0, thiết bị ngoại vi không sẵn sàng) để chuẩn bị lần đọc byte liệu khác

Tương tự ta thấy hoạt động phần mạch liệu – thiết bị ngoại vi số

ACK Mạch trạng thái /OC Mạch chốt bit /G Input Device (1) pr Q D

lck clr +5V Mạch Chốt bit /G Mạch trạng thái /OC Output Device (2) pr Q D

lck clr +5V Bus liệu D0 D1 D7 ISP01 ISP00 ISP01 STB OSP02 OSP00 OSP02

(89)

Yêu cầu: Lập trình theo lưu đồ (a) – đường nét liền để thực việc đọc vào byte liệu cổng 01 báo sẵn sàng hiển thị byte liệu Giả thiết có 100 byte liệu phải đọc có sẵn thủ tục thực hiển thị giá trị ghi al lên hình có tên hien_thi

Mov cx, 100 ; Số byte liệu cân đọc cx Lặp:

In al, ; Đọc cổng 00

Test al, ; D0 = 1?

Jz Lặp ; không, đọc lại cổng 00 In al, ; phải, đọc cổng 01 Call Hien_thi ; hiển thị kết

Loop Lặp ; chưa hết liệu, quay lại Ra:

Trong trường hợp thiết bị ngoại vi vào/ra hoạt động theo cách khác: cờ báo trạng thái sẵn sàng, cho phép CPU đọc/ghi nhiều byte liệu lúc ta có nhánh theo đường nét đứt lưu đồ Khi ta cần thiết sửa đổi tổ chức phần cứng chương trình để hệ thống hoạt động xác

Hình vé: Lưu đồ điều khiển vào/ra liệu

D0=1? Đọc cổng

00

Begin

Hết liệu?

End

Đọc cổng 01

T

F

T

F

(a) Lưu đồ đọc liệu từ cổng 01

D1=1? Đọc cổng

00

Begin

Hết liệu?

End

Ghi cổng 01

T

F

T

F

(90)

Trở ví dụ chương trước ta thấy: tổ chức phần cứng chương trình điều khiển vào/ra theo phương pháp (polling – thăm dò trạng thái sẵn sàng thiết bị ngoại vi) ta sử dụng vi mạch cổng chuyên dụng PPI 8255 làm việc chế độ (mode 1) thân vi mạch có khả tạo tín hiệu móc nối với CPU thiết bị ngoại vi Việc đọc (thăm dò) đơn giản đọc bit PC3 cổng PC (theo ví dụ đó) Tín hiệu bit tín hiệu INTR Nếu ta không kiểm tra bit cách đọc cổng PC mà nối thẳng tới chân tiếp nhận yêu cầu ngắt CPU chân INTR ta có phương pháp phối ghép khác để vào/ra liệu – điều khiển vào/ra liệu cách ngắt CPU Phương pháp trình bày chi tiết chương sau

Nếu kiểm tra PC3, PC0 (là tín hiệu báo sẵn sàng tương ứng cho cổng PA PB), lệnh đọc cổng PC chương trình ta có phương pháp vào/ra liệu thăm dò trạng thái sẵn sàng thiết bị ngoại vi

Sơ đồ ghép nối dùng PPI 8255 - Mode

PA

PC4

PC5 PPI 8255

PC1

PC2 PC3, PC0

PB

RD WR A0 A1

Reset

CS

Input device D7-D0

CPU 8088

INTR A19-A2

Decoder IRQi

STB

ACK

D7-D0 D7-D0

STB

ACK

(91)

Chƣơng NGẮT VÀ XỬ LÝ NGẮT TRONG VXL 8088 6.1 Sự cần thiết phải ngắt CPU

Như biết, với cách tổ chức trao đổi liệu với thiết bị ngoại vi cách thăm dò trạng thái sẵn sàng thiết bị ngoại vi, trước thực lệnh (hay nhóm lệnh) trao đổi liệu CPU phải dành tồn thời gian vào việc kiểm tra (thăm dò) để xác định trạng thái sẵn sàng làm việc thiết bị ngoại vi Trong hệ vi xử lý với cách làm việc vậy, thông thương vi xử lý (CPU) chủ yếu dành cho việc vào/ra liệu thực vài xử lý liên quan

Nhưng thực tế sức mạnh CPU hệ vi xử lý lớn, làm việc với tốc độ cao tập lệnh phong phú (khả xử lý liệu lớn) mà công việc vào/ra liệu khơng tốn nhiều thời gian (thời gian thực lệnh vận chuyển liệu) Để tận dụng khả làm việc CPU để làm thêm nhiều công việc khác nữa, người ta mong muốn: CPU không tốn nhiều thời gian vào việc thăm dò trạng thái sẵn sàng thiết bị ngoại vi, thiết bị ngoại vi sẵn sàng cần trao đổi liệu với hệ thống (CPU) thiết bị ngoại vi chủ động u cầu (thơng báo) CPU tạm dừng công việc để phục vụ cho việc trao đổi liệu Sau hoàn cơng việc trao đổi liệu CPU quay thực tiếp công việc thực (công việc bị gián đoạn) Cách làm việc theo kiểu gọi ngắt CPU (gián đoạn hoạt động CPU) để thực trao đổi liệu Treen sở vậy, “ngắt” mở rộng cho hầu hết ứng dụng khác nhằm độc lập hố với cơng việc CPU tăng thêm hiệu suất hệ thống (như phục vụ DOS BIOS)

Để thực phương pháp ngắt CPU cho vào/ra liệu ta phải có cách tổ chức hệ thống phần cứng phần mềm cho tận dụng khả thực chương trình phục vụ ngắt (ISR – Interrupt Service Routine) địa xác định CPU Khi nghiên cứu chân tín hiệu 8088, ta thấy vi mạch có chân tiếp nhận yêu cầu ngắt che INTR không che NMI, chân sử dụng vào việc đưa yêu cầu ngắt từ bên tới CPU 8088

6.2 Ngắt vi xử lý 8088

6.2.1 Các loại ngắt hệ 8088

Trong hệ vi xử lý có vi xử lý 8088 (và 80x86 family) phân loại ngắt theo nguyên nhân gây ngắt CPU thành nhóm:

 Ngắt cứng: Đây yêu cầu ngắt CPU mạch (thiết bị ngoại vi vi mạch điều khiển khác) tác động đến chân INTR NMI 8088

Ngắt cứng NMI (Non Maskable Interrupt) yêu cầu ngắt không che tương ứng với ngắt mềm INT Trong hệ thống, nguyên nhân gây lỗi lỗi nhớ, chẵn lẻ, cố hệ thống sụt điện áp, cháy máy, … chuyển thành tín hiệu báo chân NMI vi xử lý Các lệnh CLI (xố cờ IF) STI (lập cờ IF) khơng ảnh hưởng tới nhận biết tín hiệu yêu cầu ngắt NMI

(92)

chân INTR có kiểu ngắt N nằm khoảng 00h – FFh, kiểu ngắt phải đưa vào bus liệu hệ thống để CPU đọc có xung INTA (Interrupt Acknowledge) chu kỳ trả lời chấp nhận ngắt

 Ngắt mềm: Khi CPU thực lệnh ngắt dạng INT N (lệnh gọi ngắt assembly) – N số hiệu (kiểu) ngắt nằm khoảng 00h –

FFh Dựa vào số hiệu ngắt, theo cách thiết kế mà CPU tìm chương trình (phục vụ) ngắt để thực thơng qua bảng vector ngắt (sẽ nói phần sau)

 Ngắt ngoại lệ: Đây ngắt xuất lỗi sinh trình hoạt động CPU Ví dụ chia cho 0, tràn tính tốn, … số lỗi tính toán với số thực dấu chấm động (trong vi xử lý tiên tiến)

Các yêu cầu ngắt, cuối dẫn đến: CPU thực đoạn chương trình (chương trình con) – coi “điều kiện cho rẽ nhánh” hoạt động CPU Các yêu cầu CPU kiểm tra thường xuyên chu kỳ đồng hồ cuối lệnh

Để đưa số hiệu ngắt vào bus liệu có tín hiệu u cầu ngắt tác động vào CPU (INTR NMI) thiết bị ngoại vi (đay ngắt cứng), giả thiết thời điểm định có yêu cầu ngắt IRQi (Interrupt ReQuest i) tác động CPU tiếp nhận yêu cầu ngắt đọc số hiệu ngắt N Ta sử dụng sơ đồ đơn giản sau:

AD7 IRQ6 IRQ5 IRQ4 IRQ3 IRQ2 IRQ1 IRQ0 N Hình vẽ: Chu kỳ trả lời ngắt 8088

AL E

N: Kiểu ngắt LOCK

INT A

AD0-AD7

T1 T2 T3 T4 T1 T1 T1 T2 T3 T4

Bus bị thả CLK

8088

74LS245

+5V D Bus

IRQ0 IRQ6 OC1

OC2 INTA

INTR A/D0

A/D7 A/D1

NAND

(93)

1 1 1 1 FEh (245)

1 1 1 1 FDh (253)

1 1 1 1 FBh (251)

1 1 1 1 F7h (247)

1 1 1 1 EFh (239)

1 1 1 1 DFh (223)

1 1 1 1 BFh (191)

Bảng quan hệ IRQi số hiệu ngắt N

Tại thời điểm có tín hiệu yêu cầu ngắt IRQi tác động (mức thấp – low) đầu mạch NAND có xung u cầu ngắt đến CPU Tín hiệu IRQi đồng thời đưa qua mạch khuếch đại đệm để tạo số hiệu ngắt tương ứng, số hiệu ngắt CPU đọc vào đưa tín hiệu trả lời /INTA (xung thứ hai) Trong trường hợp có hay nhiều yêu cầu ngắt tác động với mạch ví dụ khơng thể đáp ứng vỡi xung yêu cầu ngắt nhận từ chân INTR số hiệu ngắt khơng thuộc (khơng tương ứng) u cầu ngắt cả! Vì cần có xử lý trước tình Sẽ nói rõ phần sau

6.2.2 Đáp ứng CPU có yêu cầu ngắt

Khi có yêu cầu ngắt với số hiệu ngắt N tác động đến chân tiếp nhận yêu cầu ngắt CPU yêu cầu ngắt chấp nhận (với yêu cầu ngắt che được) CPU thực dãy công việc sau:

 SP <= SP-2; {SP} <= FR (*chỉ đỉnh Stack, cất ghi cờ vào stack, {SP} ô nhớ SP lưu giữ địa (trỏ tới)*)

 IF <= 0; TF <= 0; (*cấm ngắt che được, chạy suốt*)

 SP <= SP-2; {SP} <= CS; (*chỉ đỉnh Stack, cất địa segment địa trở vào stack*)

 SP <= SP-2; {SP} <= IP; (*chỉ đỉnh Stack, cất địa offset địa trở vào stack*)

 IP <= {N*4}; CS <= {N*4+2}; (*lấy lệnh địa chương trình phục vụ ngắt kiểu N (số hiệu ngắt N) tương ứng bảng vector ngắt*)

 Tại cuối chương trình phục vụ ngắt, gặp lệnh IRET, CPU thực dãy công việc theo thứ tự ngược lại, cụ thể:

o {SP} => IP; SP <= SP+2

o {SP} => CS; SP <= SP+2

o {SP} => FR; SP <= SP+2

(* Bộ vi xử lý quay lại thực chương trình địa với giá trị cũ thanh ghi cờ lấy từ stakc *)

(94)

 INT 0: Ngắt mềm phép chia cho gây

 INT 1: Ngắt mềm để chạy lệnh với trường hợp cờ TF=1

 INT 2: Ngắt cứng tín hiệu tích cực chân NMI gây

 INT 3: Ngắt mềm để đặt điểm dừng chương trình địa

 INT 4: (Hoặc lệnh INTO) ngắt mềm ứng với trường hợp tràn (OF=1) Các kiểu ngắt khác lại dành cho Intel người sử dụng (IBM khơng hồn tồn tn thủ quy định chế tạo máy tính PC/XT, PC/AT):

 INT – INT 1Fh: Dành riêng cho Intel vi xử lý cao cấp

 INT 20h – INT FFh: Dành cho người sử dụng (trong hệ điều hành BIOS sử dụng phần)

Các kiểu ngắt N (trong INT N) tương ứng với địa xác định ISR mà ta tra (lấy – đọc trực tiếp) bảng vector ngắt Intel quy định bảng nằm RAM địa 00000h kéo dài KB (kích thước vì: 8088 80x86 có 256 kiểu ngắt, kiểu ngắt ứng với vector ngắt, vector ngắt cần byte để chứa địa đầy đủ cho CS IP chương trình phục vụ ngắt, byte để lưu CS, byte khác để lưu IP nên: 256 (byte) x = 1024 (byte) = KB)

6.2.3 Xử lý ƣu tiên ngắt

Như đề cập đến, vấn đề trở nên phức tạp thời điểm mà có nhiều tín hiệu yêu cầu ngắt tác động đến CPU (thuộc kiểu ngắt khác nhau) Khi CPU xử lý nào? Thực (phục vụ) chương trình phục vụ ngắt nào? Thực CPU xử lý yêu cầu ngắt theo mức ưu tiên (theo thiết kế) với nguyên tắc ngắt có mức ưu tiên cao CPU nhận biết phục vụ trước

Ngay từ thiết kế chế tạo (thường gọi ngầm định) CPU 8088 có khả phân biệt mức ưu tiên khác cho loại ngắt theo thứ tự từ cao xuống thấp sau:

Yêu cầu ngắt

Chương trình CPU

CPU tự: Cất FR Xoá IF, TF Cất CS, IP Lấy địa IR

CPU tự: Cất FR Xoá IF, TF Cất CS, IP Lấy địa IR

ISR

Lệnh cất ghi

Thân ISR

Lệnh lấy ghi IRET

(95)

Các ngắt Mức ƣu tiên

Ngắt nội bộ: INT (phép chia 0), INT N, INTO 0: Cao

Ngắt NMI

Ngắt INTR

Ngắt để chạy lệnh (INT 1) 3: Thấp

Để thấy rõ hoạt động CPU chế ngắt ưu tiên này, ta lấy mơtj ví dụ cụ thể sau: Giả sử thời điểm đó, CPU (ở trạng thái cho phép ngắt với cờ IF=1) thực phép chia có lỗi xảy số chia 0, tai thời điểm CPU nhận yêu cầu ngắt từ đầu bào INTR Theo thứ tự ưu tiên ngầm định việc xử lý ngắt 8088 INT o có mức ưu tiên cao ngắt che INTR nên CPU thực ISR tương ứng INT để đáp ứng với lỗi đặc biệt phép chia gây cờ IF xoá => yêu cầu ngắt INTR (tự động) bị cấm ISR tương ứng INT kết thúc trở nhờ lệnh IRET, cờ IF khôi phục trở lại (tồn ghi cờ) Tiếp CPU đáp ứng yêu cầu ngắt INTR cách thực ISR tương ứng INTR

6.2.4 Mạch điều khiển ngắt ƣu tiên PPI 8259A

Khi vào/ra liệu với thiết bị ngoại vi theo nguyên tắc ngắt (ngắt cứng), tín hiệu yêu cầu ngắt (yêu cầu phục vụ ngắt) hay tín hiệu sẵn sàng (ready) từ phía thiết bị ngoại vi nối với lối vào tiếp nhận yêu cầu ngắt INTR CPU Theo (mà) máy tính thực cơng việc khác bị ngắt tín hiệu từ thiết bị ngoại vi Chương trình phục vụ ngắt tương ứng nhập xuất liệu vòng vài micro giây kết thúc để CPU quay trở chương trình (cơng việc) bị gián đoạn Như vậy, thao tác nhập/xuất liệu chiếm phần nhỏ thời gian vi xử lý Có nhiều ứng dụng sử dụng ngắt cứng việc đọc vào mã ASCII ký tự phím bàn phím

 Đếm số ngắt từ định thời để tạo thành đồng hồ thời gian thực theo giờ, phút, giây

 Phát tình khẩn cấp hay kiểm tra cơng việc dựa chế ngắt, …

Về nguyên tắc, ứng dụng yêu cầu lối vào ngắt riêng biệt (cụ thể) để CPU nhận biết ứng dụng đó, với vi xử lý 8088 80x86 nói chung có chân (lối vào) tiếp nhận yêu cầu ngắt INTR NMI Nếu (hầu hết) dành lối vào NMI cho ngắt nguồn nuôi (sụt áp) cịn lại lối vào INTR cho tất ứng dụng lại (Các ngắt INTR mức ưu tiên mức ưu tiên ngầm định mà 8088 xử lý được) Do đó, có nhiều yêu cầu ngắt che thiết bị ngoại vi khác gửi đến CPU yêu cầu phục vụ (trao đổi liệu) CPU khơng thể nhận biết u cầu thiết bị Trong trường hợp đó, phải sử dụng mạch bổ trợ để “dồn” tín hiệu ngắt cứng từ thiết bị ngoại vi khác vào lối vào INTR vi xử lý, đồng thời xử lý ưu tiên cho tín hiệu u cầu ngắt gọi điều khiển ngắt ưu tiên: PIC – Priority Interrupt Controller

(96)

Khi hệ thống có số lượng thiết bị ngoại vi lơn 8, cần mở rộng khả tiếp nhận xử lý ngắt 8259 cho phép nối tầng Nếu nối tầng mạch 8259 chủ mạch 8259 thợ xử lý 64 ngắt đồng thời gửi đến với 64 mức ưu tiên khác (Với máy PC XT/AT: thường nối tầng 8259 chủ 8259 thợ)

Một số ký hiệu sơ đồ:

 IRQ0 – IRQ7 (IRQi) – Interrupt ReQuest: yêu cầu ngắt

 IRR – Interrupt Request Register: ghi yêu cầu ngắt

 PR – Priority Resolver: xử lý ưu tiên

 SP/EN – Slave Program/ENable buffer: lập trình thành mạch thợ/mở đệm bus liệu

 ISR – In Service Register: ghi yêu cầu ngắt phục vụ

 Cas0 – Cas2: tín hiệu nối tầng PIC với

Các khối chức 8259A bao gồm

(Các) yêu cầu ngắt từ thiết bị ngoại vi gửi tới IRQi xử lý ghi bit, bit tương ứng với yêu cầu ngắt IRQi (i=0-7)

(1) IMR (Interrupt Mask Register – Thanh ghi che ngắt): Thanh ghi dùng để cấm (che) cho phép (không che) lối vào yêu cầu ngắt riêng biệt Mỗi bit tương ứng với lối vào có số i Để cho phép lối vào ngắt, phải gửi (ghi) từ lệnh có bit tương ứng lối vào

(2) IRR (Interrupt Request Register – Thanh ghi yêu cầu ngắt): Thanh ghi có nhiệm vụ ghi nhớ để theo dõi yêu cầu ngắt yêu cầu phục vụ (có IRQi) Tín hiệu u cầu ngắt có lối vào bit tương ứng với lối vào IRR lập Tín hiệu u cầu ngắt phải tồn lối vào IRRQ xuất sườn xuống xung INTA thứ

Logic điều khiển

ISR PR IRR

IMR (Interrupt Mask Register) Đệm bus

Logic Ghi/đọc

Đệm nối tầng so sánh

IRQ0 IRQ1

IRQ7 INT INTA

D7-D0

A0 RD WR

CS

SP/EN Cas0 Cas1 Cas2

Internal bus

(97)

(3) ISR (In Service Register – Thanh ghi ngắt phục vụ): Thanh ghi ghi nhớ yêu cầu ngắt phục vụ số yêu cầu ngắt IRQi Với IRQi phục vụ bit thứ i tương ứng với ISR lập (=1)

(4) PR (Priority Resolver – Bộ xử lý ưu tiên): Đây mạch xử lý ưu tiên ngắt dựa nội dung ghi: IRR, ISR IMR để định yêu cầu ngắt IRQi có gửi tới CPU 8088 thông qua chân INT khối logic điều khiển (một) thời điểm hay bắt phải chờ

(5) Control Logic – Logic điều khiển: Khối có nhiệm vụ gửi yêu cầu ngắt IRQi tới chân INTR CPU 8088 có tín hiệu lối vào IRQi nhận trả lời chấp nhận yêu cầu ngắt INTA từ CPU để điều khiển việc đưa số hiệu ngắt N bus liệu (tại xung INTA thứ hai)

(6) Đệm bus liệu: Dùng để phối ghép 8259A với bus liệu CPU

(7) Logic điều khiển ghi/đọc: Dùng cho việc ghi từ điều khiển đọc từ trạng thái 8259A

(8) Khối đệm nối tầng so sánh: Ghi nhớ so sánh số hiệu mạch 8259A có mặt hệ thống vi xử lý

Các tín hiệu PIC 8259:

Một số tín hiệu mạch PIC 8259A có tên gọi giống tín hiệu tiêu chuẩn hệ vi xử lý 8088 (hình vẽ – sơ đồ khối), ngồi cịn có số tín hiệu đặc biệt sau:

Cas0 – Cas2 [I/O]: Đây đầu vào mạch PIC thợ đầu mạch PIC chủ Chúng sử dụng nối tầng để tăng thêm số lượng yêu cầu ngắt cần xử lý

SP/EN [I/O]: Khi 8259 làm việc chế độ đệm bus liệu tín hiệu vào để lập trình cho mạch 8259 thành mạch thợ (SP = 0) mạch chủ (SP =1) Khi 8259 làm việc hệ vi xử lý chế độ có đệm bus liệu tín hiệu EN dùng để mở đệm bus liệu cho 8259 (và 8088) thông vào bus liệu hệ thống Lúc việc định nghĩa mạch 8259 mạch chủ hay mạch thợ phải thực thông qua từ điều khiển ICW4 (sẽ nói kỹ phần sau)

INT [O]: Là tín hiệu yêu cầu ngắt đến chân INTR 8088

INTA [I]: Nối với chân báo chấp nhận ngắt CPU 8259 sử dụng xung INTA thứ phát từ 8088 để thực số thao tác nội (xử lý ưu tiên), tuỳ thuộc vào mode hoạt động mà lập trình Khi nhận xung INTA thứ hai từ 8088, 8259 xuất số hiệu ngắt N tương ứng yêu cầu ngắt IRQi lên bus liệu Số hiệu ngắt xác định: thứ IRQi, thứ hai số hiệu ngắt mà người lập trình viết cho 8259 khởi động

(98)

Hình vẽ: PIC 8259 làm việc độc lập (mạch chủ chế độ không đệm bus) nối với 8088 làm việc chế độ MIN thông qua bus hệ thống, địa mạch PIC 8259A 0FEh – 0FFh

ở sơ đồ ta thấy chân SP/EN 8259 nối với +5V, CS lấy từ mạch giải mã địa Vì có mạch PIC hệ thống nên xử lý yêu cầu ngắt đồng thời: IRQ0 – IRQ7

Nếu hệ vi xử lý 8088 làm việc chế độ MAX thường ta phải dùng mạch điều khiển bus 8288 đệm bus để cung cấp tín hiệu thích hợp cho hệ thống Mạch PIC 8259 phải làm việc chế độ có đệm bus để nối với bus hệ thống

Theo hình vẽ ví dụ (8088 chế độ MAX nối với PIC 8259) ta thấy tín hiệu địa cho 8259 lấy từ bus hệ thống (chứ khơng lấy trực tiếp từ 8088), tín hiệu liệu nối với bus liệu vi xử lý từ thông qua đệm để nối vào bus hệ thống

Lập trình cho PIC 8259

PIC 8259 RD WR A0 IRQ0 INTA INT A7-A1

IO/M CS

IRQ1 IRQ7 +5V SP/EN D7-D0 Bus hệ thống 8088 chế

độ MIN +5V +5V +5V CS IRQ0 IRQ1 IRQ7 A19-A0 AD7-AD0

CEN AEN ALE DT/R DT/R DEN IORDC IOWDC CLK INTA INT WR RD SP/EN A0 D7-D0 Cas0 Cas1 Cas2 A19-A15 AD7-AD0 S2-S0 INTR Reset READY CLK CSYNC READY RDY1 AEN2 RES 8284 8088 8259 DIR G OC „245 3x„373 Reset F/C CLK 8288 G

(99)

Vi mạch điều khiển ngắt ưu tiên PIC 8259A vi mạch lập trình cỡ lớn lập trình Để mạch PIC 8259 hoạt động theo yêu cầu, sau bật nguồn cấp điện cho nó, PIC cần phải lập trình (thiết lập chế độ hoạt động) cách ghi vào ghi (tương ứng với cổng) bên từ điều khiển khởi đầu ICW (Initialization Control Word) tiếp sau từ điều khiển hoạt động OCW (Operation Control Word)

Các từ điều khiển khởi đầu dùng để tạo nên kiểu làm việc ho PIC, từ điều khiển hoạt động định cách thức hoạt

động cụ thể PIC Từ điều khiển khởi đầu cần ghi trước PIC làm việc (tức trước PIC nhận yêu cầu ngắt để xử lý) từ điều khiển hoạt động ghi ta muốn thay đổi (cách thức) hoạt động PIC 8259

Cụ thể từ điều khiển nói sau: i, Các từ điều khiển khởi đầu:

PIC 8259 có tất từ điều khiển khởi đầu ICW1 – ICW4 Trong lập trình cho 8259 khơng phải lúc ta cần dùng từ điều khiển khởi đầu (tức ghi tất chúng) Tuỳ theo trường hợp ứng dụng cụ thể mà có lúc ta cần ghi liên tiếp từ điều khiển khởi đầu có lúc ta cần ghi từ điều khiển khởi đầu (trong số đó) đủ Thứ tự điều kiện ghi từ điều khiển khởi đầu ICW vào 8259 thực theo lưu đồ sau:

ICW1

Như biết, PIC 8259 có đường địa vào (A0), có nhiều ghi điều

khiển trạng thái tương đương (tương ứng) với cổng Tuy nhiên để phân biệt ghi (trong 8259) đầu vào địa A0 thứ tự ghi giúp ta phân biệt cá ghi khác bên 8259 để ghi liệu cho từ điều khiển Ví dụ, A0 = dấu hiệu để nhận biết ICW1 (ghi) đưa vào ghi có địa chẵn PIC, cịn A0 = từ điều khiển ICW2, ICW3 ICW4 (ghi) đưa vào ghi có địa lẻ PIC

Khi giới thiệu ghi cụ thể với ý nghĩa bit liệu, ta ghi rõ thêm giá trị A0 tương ứng cho ICWi

Bit D0 ICW1 (IC4) định 8259 nối với hệ vi xử lý Để làm việc với hệ 16, 32 bit (8088/x86) ICW1 thiết phải có IC4 = (tức ta cần đến từ điều khiển khởi đầu ICW4), hệ vi xử lý bit (như xử dụng 8080/8085) ta phải có IC4 = (và bit ICW4 vị xố 0)

Hình vé: Lưu đồ ghi từ điều khiển khởi đầu cho PIC 8259

ICW1(2)=0? ICW1

T F

ICW2

ICW3

ICW1(1)=1?

ICW4

Sẵn sàng nhận yêu cầu ngắt

(100)

Các bit lại ICW1 định nghĩa cách thức làm tác động xung yêu cầu ngắt (tác động theo sườn hay theo mức) chân yêu cầu ngắt IRQi 8259 việc bố trí mạch PIC 8259 khác hệ làm việc đơn lẻ hay theo chế độ nối tầng

Khi sử dụng 8259 hệ 16 – 32 bit (8088/x86), bit D2 (ADI) nhận giá trị tuỳ ý, có ý nghĩa làm việc với hệ bit nên thường chọn

Nếu sử dụng vi mạch PIC 8259 hệ, đặt bit D1 = (SNGL (S) = 1) Cịn có nhiều mạch PIC nối tầng hệ thống bit D1 ICW1 mạch PIC phải xoá

Bit D3 (LTIM) dùng để xác lập trigger theo mức hay trigger theo sườn xung Trong chế độ trigger theo mức, chương trình ngắt (yêu cầu ngắt) yêu cầu xuất mức điện áp cao lối vào yêu cầu ngắt IRQ Trong chế độ trigger theo sườn xung, tín hiệu yêu cầu ngắt lối vào IRQ phải chuyển từ mức thấp lên mức cao trì mức cao chương trình phục vụ ngắt thực Vì nói bit quy định cách thức tác động xung yêu cầu ngắt theo mức hay theo sườn (dương)

Khi hoạt động hệ 16 – 32 bit khơng cần quan tâm tới bit D5, D6 D7 thường đặt chúng cho đơn giản

Ngày nay, thường sử dụng vi xử lý 8088 cao xây dựng hệ vi xử lý nên sử dụng giá trị: 0000 1010 để ghi cho ICW1

ICW2

Trong hệ vi xử lý 16 – 32 bit, từ điều khiển khởi đầu dùng để (cho phép) chọn kiểu ngắt (số hiệu ngắt N) tương ứng với bit T7 – T3 cho đầu vào yêu cầu ngắt Các bit T2 – T0 8259 tự động gán giá trị tuỳ theo đầu vào yêu cầu ngắt IRQi cụ thể Thực chất chúng có ý nghĩa sau: Tồn bit ICW2 báo cho 8259 biết

số hiệu ngắt phải gửi (đi) bus liệu để đáp ứng tín hiệu yêu cầu ngắt IRQ0 Để đáp ứng yêu cầu ngắt khác (IRQ1 – IRQ7), 8259 tự động cộng số lối vào với giá trị sở (“không trừ”) gửi kết cho 8088 dùng làm số hiệu ngắt cho tín hiệu u cầu ngắt Do ngắt có số hiệu ngắt từ – 31 ngắt chuyên dụng để dự trữ nên số 32 (20h) số ngắt thấp cho ứng dụng mở rộng người sử dụng Giả sử, cho ICW2 = 0010 0000 = 32d, 8259 gửi số hiệu ngắt lên bus liệu cho 8088

Hình vẽ: Thanh ghi khởi đầu ICW1

0 x x x LTIM ADI SNGL IC4

D7 D6 D5 D4 D3 D2 D1 D0

Địa vector ngắt (chương trình con), khơng cần để ý hệ 16-32 bit

Cách tác động xung yêu cầu ngắt: 1: Tác động theo mức dương 0: Tác động theo sườn dương

Khoảng cách vector ngắt: 1: Cách byte (8088/x86) 0: Cách byte (8080/8085)

Single

1: Chỉ có mạch PIC 0: Có nhiều mạch PIC

1: Cần ICW4 0: Bỏ ICW4 A0

Hình vẽ: Thanh ghi khởi đầu ICW2

1 T7 T6 T5 T4 T3 T2 T1 T0

D7 D6 D5 D4 D3 D2 D1 D0

Để chọn kiểu (số hiệu) ngắt cho mạch PIC

(101)

làm số hiệu ngắt cho IRQ0 Với tín hiệu yêu cầu ngắt IRQ1, 8259 gán cho số hiệu ngắt 0010 0001 = 33d (tiếp tục), tương tự có: IRQ2 = 0010 0010 = 34d, IRQ3 = 0010 0011 = 34d, …

Trong ICW2 nạp vào 8259, bit thấp luôn 8259 tự động cấp phát bit cho tương ứng với số lối vào yêu cầu ngắt IRQi

ICW3

Từ điều khiển khởi đầu sử dụng đến bit D2 (SNGL – S) thuộc từ điều khiển khởi đầu ICW1 có giá trị = 0, có nghĩa hệ thống có nhiều mạch PIC 8259 làm việc chế độ nối tầng (chủ – tớ) Chính mà tồn (có) loại ICW3:

ICW3 cho mạch 8259 chủ: từ điều khiển để đầu vào yêu cầu ngắt IRQi có (tín hiệu INT của) mạch tớ nối vào Cần phải ghi ICW3 vào mạch chủ để biết với lối vào IRQ phải xuất ID vi mạch 8259 tớ lên đường Cas0 – Cas2

ICW3 cho mạch 8259 tớ: dùng làm phương tiện để mạch tớ nhận biết, từ điều khiển (“phải”) chứa mã số i ứng với đầu vào IRQi mạch chủ mà mạch 8259 tớ nối vào Mã số i (chính ID) sử dụng yêu cầu ngắt từ 8259 tớ Khi vi mạch 8259 chủ nhận yêu cầu ngắt từ mạch tớ – biết yêu cầu ngắt t mạch tớ thơng qua IRQ tương ứng Khi yêu cầu ngắt chấp nhận, mạch chủ yêu cầu mạch tớ xuất số hiệu ngắt lên bus liệu cách đưa số ID chân Cas0 – Cas 2, vi mạch 8259 tớ so sánh ID với số ID Cas0 – Cas2, vi mạch tớ thấy trùng (có nghĩa nhận ID nó) đưa số hiệu ngắt lên bus liệu (Sự xử lý ưu tiên có nghĩa là: Tại thời điểm có nhiều yêu cầu ngắt (từ thiết bị ngoại vi) gửi tới mạch tớ Trước hết chúng gửi yêu cầu ngắt tới mạch chủ chờ xung INTA Nhận yêu cầu ngắt từ mạch tớ, mạch chủ gửi xung yêu cầu ngắt qua chân INT tới 8088 Nếu yêu cầu ngắt chấp nhận 8088 gửi xung chấp nhận ngắt thứ INTA tới tất mạch 8259 (chân mạch PIC chủ tớ nối chung) Nhận xung INTA này, tất mạch PIC có xử lý ưu tiên để chuẩn bị đưa số hiệu ngắt (của ngắt có chứa mức ưu tiên cao nhất) lên bus liệu có xung INTA thứ hai Nhưng có xung INTA thứ hai, mạch tớ phải xem xét xem có “cho phép” từ mạch chủ hay khơng thơng qua việc so sánh ID với ID mạch chủ “chỉ định” qua chân Cas0 – Cas2 Số hiệu ID trùng với số i IRQi mạch chủ mà trước có tín hiệu u cầu ngắt từ mạch tớ gửi đến Như xung INTA thứ hai xuất số hiệu ngắt (của ngắt đó) từ mạch thợ chấp nhận đưa lên bus liệu để 8088 đọc

Hình vẽ: Thanh ghi khởi đầu ICW2

1

D7 D6 D5 D4 D3 D2 D1 D0

1: Đầu vào IRQi nối với mạch 8259 thợ (tớ) 0: Đầu vào IRQi không nối với mạch 8259 thợ

A0

ICW2 mạch chủ

1 0 0

D7 D6 D5 D4 D3 D2 D1 D0

Mã hoá số hiệu ID mạch thợ 0-7 nối vào IRQ0-IRQ7 A0

ID2 ID1 ID0

(102)

Ví dụ: Trong hệ vi xử lý ta có mạch PIC 8259A chủ mạch 8259A thợ nối vào chân IRQ0 IRQ2 mạch chủ Tìm giá trị từ điều khiển khởi đầu ICW3 để gán cho mạch PIC

Giải:

Mạch chủ: ICW3 = 0000 0101b = 05h

Mạch thợ (nối vào IRQ0 mạch chủ): ICW3 = 0000 0000b = 00h

Mạch thợ (nối vào IRQ2 mạch chủ): ICW3 = 0000 0010b = 02h

ICW4

Từ điều khiển khởi đầu dùng đến từ điều khiển khởi đầu ICW1 có bit IC4 = (cần thêm ICW4)

Bit PM (Microprocessor Mode): Cho phép vi xử lý 8088/86 cao (80x86) làm việc với 8259 Nếu μPM = cho phép vi xử lý 8080/85 làm việc với 8259

Bit SFNM = 1, cho phép ta chọn chế độ ưu tiên cố định đặc biệt Trong chế độ yêu cầu ngắt với mức ưu tiên cao thời từ mạch thợ làm việc theo kiểu nối tầng mạch chủ nhận biết mạch chủ phục vụ yêu cầu ngắt mạch thợ khác với mức ưu tiên thấp (như biết, 8088 nhận yêu cầu ngắt, yêu cầu ngắt chấp nhận cơng việc làm để chuẩn bị thực ISR có cơng đoạn: Xố cờ IF TF, điều có nghĩa thực ISR cấm ngắt che khác tác động Tuy nhiên, đầu ISR lại có lệnh lập cờ IF nhận biết yêu cầu ngắt che khác thực ISR đó, vấn đề cịn đề cập đến phần sau) Sau yêu cầu ngắt

Cas0 Cas1 Cas2 Cas0

Cas1 Cas2

Cas0 Cas1 Cas2 INT

INTA

INTA INTA

8259 chủ

8259 thợ1

8259 thợ2 INT

To 8088 From 8088

Hình vẽ: Sơ đồ theo đầu

Hình vẽ: Thanh ghi khởi đầu ICW4

1 0 SFNM BUF M/S AEOI mPM

D7 D6 D5 D4 D3 D2 D1 D0

1: Chế độ ưu tiên cố định đặc biệt (Chế độ ưu tiên vịng cố định)

0: Khơng phải chế độ ưu tiên cố định đặc biệt (chế độ khác)

0x: Mode không đệm 10: 8259 thợ – mode đệm 11: 8259 chủ – mode đệm

1: EOI tự động

(103)

được phục vụ xong chương trình phục vụ ngắt phải có lệnh kết thúc yêu cầu ngắt (EOF) đặt trước lệnh (IRET) trở để đưa đến cho mạch PIC chủ

Khi bit SFNM = chế độ ưu tiên cố định chọn (IRQ0: mức ưu tiên cao nhất, …, IRQ7: mức ưu tiên thấp nhất) Thực mạch 8259 khơng dùng ICW4 chế độ chọn ngầm định Trong chế độ ưu tiên cố định, thời điểm có yêu cầu ngắt i phục vụ (bit ISRi = 1), lúc tất yêu cầu ngắt khác với mức ưu tiên thấp bị cấm yêu cầu ngắt khác với mức ưu tiên cao ngắt yêu cầu ngắt khác với mức ưu tiên thấp

Bit BUF (Buffer): Cho phép định nghĩa mạch 8259 để làm việc với CPU trường hợp có đệm khơng có đệm nối với bus hệ thống Khi BUF = 1: 8259 làm việc chế độ có đệm bus, bit M/S = 1/0 cho phép ta chọn mạch 8259 để làm việc chế độ chủ/thợ (Master/Slave) SP/EN trở thành đầu cho phép mở đệm bus để PIC 8259 CPU thông với bus hệ thống

Bit AEOI (Automatic End Of Interrupt): Cho phép chọn cách kết thúc yêu cầu ngắt tự động

o AEOF = 8259 tự động xoá ISRi = xung INTA cuối chuyển lên mức cao mà không làm thay đổi thứ tự ưu tiên

o Ngược lại, ta chọn cách kết thúc yêu cầu ngắt thường (AEOF = 0) chương trình phục vụ ngắt phải có thêm lệnh EOI đặt trước lệnh IRET để kết thúc cho 8259

Những vấn đề liên quan đến chế độ ưu tiên kết thúc yêu cầu ngắt nói thêm phần giới thiệu ghi từ điều khiển hoạt động

ii, Các từ điều khiển hoạt động:

Các từ điều khiển hoạt động OCWi định 8259 hoạt động sau khởi đầu từ điều khiển khởi đầu ICWi Tất từ điều khiển hoạt động ghi vào ghi PIC A0 = 0, trừ OCW1 hi A0 = (chỉ số ghi địa ngược lại với thành ghi điều khiển khởi đầu)

OCW1

Thanh ghi để ghi bit mặt nạ vào ghi mặt nạ ngắt IMR Khi bit mặt nạ ghi IMR lập yêu cầu ngắt tương ứng với mặt nạ không 8259 nhận biết (bị che) Từ điều khiển phải (ghi) đưa đến 8259 sau từ điều khiển khởi đầu ICWi ghi vào 8259 lối vào yêu cầu ngắt IRTQi muốn

đáp ứng Ta đọc lại IMR lúc để xác định tình trạng mặt nạ ngắt (có nghĩa, kiểm tra xem thời điểm yêu cầu ngắt phép, yêu cầu ngắt bị che)

Hình vẽ: Thanh ghi hoạt động OCW1

D7 D6 D5 D4 D3 D2 D1 D0

Mặt nạ ngắt yêu cầu ngắt

1: Có mặt nạ (yêu cầu ngắt tương ứng bị che)

0: Không có mặt nạ (yêu cầu ngắt tương ứng nhận biết) A0

(104)

OCW2

Các bit: R, SL EOI (theo bảng) phối hợp cho phép chọn cách thức kết thúc yêu cầu ngắt khác Trong đó, vài cách kết thúc yêu cầu ngắt tác động tới yêu cầu ngắt đích danh với mức ưu tiên mã hoá bit L2, L1, L0 (L2L1L0)

Một số chế độ làm việc 8259

(1)Chế độ ưu tiên cố định: Đây chế độ làm việc ngầm định 8259 sau nạp từ điều khiển khởi đầu Trong chế độ này, đầu vào yêu cầu ngắt IRQ7 – IRQ0 gán cho mức ưu tiên cố định Cụ thể: IRQ0 gán mức ưu tiên cao nhất, … IRQ7 gán mức ưu tiên thấp Thứ tự mức ưu tiên giữ cố định (không thay đổi) mạch 8259 lập trình khác thơng qua việc ghi từ điều khiển hoạt động OCW2 Trong chế độ ưu tiên cố định, thời điểm có yêu cầu ngắt i phục vụ (bit ISRi = 1), lúc tất yêu cầu ngắt khác có mức ưu tiên cao ngắt yêu cầu ngắt có mức ưu tiên thấp

(2)Chế độ quay mức ưu tiên tự động (ưu tiên luân phiên): chế độ này, sau yêu cầu ngắt phục vụ xong, 8259 xố bit tương ứng ghi ISR gán cho đầu vào (IRQ) mức ưu tiên thấp để tạo điều kiện cho yêu cầu ngắt khác (với mức ưu tiên thấp) có hội (thời cơ) phục vụ

(3)Chế độ quay (đổi) mức ưu tiên đích danh: chế độ ta cần rõ (chỉ đích danh) đầu vào yêu cầu ngắt IRQi với i = L2L1L0 gán mức ưu tiên thấp nhất, đầu vào IRQi+1 tự động gán mức ưu tiên cao

Đó chế độ làm việc tiêu biểu 8259 Trên sở đó, nhìn lại phối hợp bit R, SL, EOI để tạo lệnh quy định cách thức kết thúc yêu cầu ngắt cho chế độ làm việc khác nói qua

(1)Kết thúc yêu cầu ngắt thường: Trong chương trình phục vụ ngắt phải có lệnh EOI đặt trước lệnh trở IRET cho 8259 Mạch 8259 xác định yêu cầu ngắt IRQi vừa phục vụ xoá bit ISRi tương ứng để tạo điều kiện cho u cầu ngắt ngắt có mức ưu tiên thấp tác động (phục vụ)

Hình vẽ: Thanh ghi hoạt động OCW2 R SL EOI 0 L2 L1 L0

D7 D6 D5 D4 D3 D2 D1 D0

R SL EOI ý nghĩa 0 Lệnh EOI thường 1 Lệnh EOI đích danh (*) 1 Đổi mức ưu tiên có EOI thường 0 Lập chế độ quay có EOI tự động 0 Xố chế độ quay có EOI tự động 1 Đổi mức ưu tiên có EOI đích danh (*) 1 Lệnh lập mức ưu tiên (*)

0 Không làm Kết thúc

ngắt (EOI)

A0

Đổi mức ưu tiên đích danh (đặc biệt) Đổi mức ưu tiên tự động (quay vịng)

Mã hố mức ưu tiên ngắt bị tác động 000: mức

001: mức 111: mức

(105)

(2)Kết thúc yêu cầu ngắt đích danh: Trong chương trình phục vụ ngắt phải có lệnh EOI đích danh đặt trước lệnh trở IRET cho 8259 Mạch 8259 xoá bit ISRi (i = L2L1L0) để tạo điều kiện cho yêu cầu ngắt yêu cầu ngắt có mức ưu tiên thấp tác động

(3)Quay (đổi) mức ưu tiên kết thúc yêu cầu ngắt thường: Trong chương trình phục vụ ngắt phải có lệnh EOI đặt trước lệnh trở IRET cho 8259 Mạch 8259 xác định yêu cầu ngắt thứ i vừa phục vụ, xố bit ISRi tưng ứng gán ln mức ưu tiên thấp cho đầu vào IRQi này, đầu vào IRQi+1 gán mức ưu tiên cao

Ví dụ:

Thanh ghi ISR trước IRQ4 chấp nhận

(0: mức ưu tiên cao nhất, 7: mức ưu tiên thấp nhất)

Các bit IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0

Trạng thái ISR

0 1 0 0

Mức ƣu tiên

Thanh ghi ISR sau IRQ4 chấp nhận sau có lệnh quay đổi

Các bit IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0

Trạng thái ISR

0 0 0 0

Mức ƣu tiên

Thanh ghi ISR trước IRQ5 chấp nhận (0: mức ưu tiên cao nhất, 7: mức ưu tiên thấp nhất)

Các bit IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0

Trạng thái ISR

0 0 0

Mức ƣu tiên

Thanh ghi ISR sau IRQ4 chấp nhận sau có lệnh quay đổi

Các bit IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0

Trạng thái ISR

0 0 0 0

Mức ƣu tiên

(1)Quay (đổi) mức ưu tiên chế độ kết thúc ngắt tự động: Trong chế độ cần lần đưa lệnh chọn chế độ mức ưu tiên kết thúc yêu cầu ngắt từ động Có thể chọn lệnh lập “chế độ quay có EOI tự động” Từ trở 8259 đổi mức ưu tiên kết thúc yêu cầu ngắt tự động tương tự mục trước Muốn loạ bỏ chế độ ta dùng lệnh xố “chế độ quay có EOI tự động”

(106)

(3)Lập mức ưu tiên: Chế độ cho phép thay đổi mức ưu tiên có định mức ưu tiên gán trước cách gán mức ưu tiên thấp cho yêu cầu ngắt IRQi đích danh ứng với tổ hợp mã i = L2L1L0 Yêu cầu ngắt IRQi+1 gán mức ưu tiên cao

OCW3

Từ điều khiển hoạt động OCW3 sau nạp vào 8259 cho phép:

o Chọn ghi để đọc (trạng thái)

o Thăm dò trạng thái yêu cầu ngắt cách đọc trạng thái đâu vào yêu cầu ngắt IRQi với mức ưu tiên cao với mã đầu vào

o Thao tác với mặt nạ đặc biệt Các

ghi IRR ISR nạp sau nạp từ điều khiển

OCW3 vào

8259 với bit ERIS = (D1) Bit (D0) RIS =

0, cho phép đọc IRR lần đọc sau; RIS = 1, cho phép đọc ISR lần đọc sau Bằng việc đưa vào 8259 từ

điều khiển hoạt động OCW3 với bit P = 1, ta đọc bus liệu lần đọc tiếp sau từ thăm dò, thơng tin u cầu ngắt với mức ưu tiên cao hoạt động mã tương ứng với yêu cầu ngắt theo dạng sau:

Ta coi chế độ thăm dò yêu cầu ngắt chế độ thường ứng dụng trường hợp có nhiều chương trình phục vụ ngắt giống cho yêu cầu ngắt

Hình vẽ: Thanh ghi hoạt động OCW3

D7 D6 D5 D4 D3 D2 D1 D0

Chế độ mặt nạ đặc biệt 10: Xoá chế độ mặt nạ đặc biệt 11: Lặp chế độ mặt nạ đặc biệt A0

10: Đọc IRR lần đọc sau 11: Đọc ISR lần đọc sau

0 ESMM SMM P ERIS RIS

Thăm dò trạng yêu cầu ngắt 1: Đọc mã mức ưu tiên cao lần đọc sau

D

D6 D5 D4 D3 D2 D1 D0

IRi=0: Đầu vào IRQi khơng có u cầu ngắt IRi=1: Đầu vào IRQi khơng có u cầu ngắt

(a) Thanh ghi yêu cầu ngắt: IRR

IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0

D7 D6 D5 D4 D3 D2 D1 D0

ISi=0: Yêu cầu ngắt i không phục vụ ISi=1: Yêu cầu ngắt i phục vụ

(a) Thanh ghi phục vụ ngắt: IRR

I S I S I S

IS4 I S I S I S I S

Hình vẽ: Dạng thức từ thăm dò trạng tháI yêu cầu ngắt

D7 D6 D5 D4 D3 D2 D1 D0

1: Đang có u cầu ngắt 0: Khơng có yêu cầu ngắt

I X X X X W2 W1 W0

Mã số yêu cầu ngắt

(107)

và việc chọn chương trình để sử dụng (trách nhiệm) công việc người sử dụng (người lập trình)

Vậy, muốn dùng chế độ thăm dò 8259 để xác định yêu cầu ngắt thời ta cầ thực dãy thao tác sau:

o Cấm yêu cầu ngắt che lệnh CLI (xoá IF)

o Ghi từ lệnh OCW3 với bit P=1

o Đọc từ thăm dò trạng thái yêu cầu ngắt bus liệu

Bit ESMM = 1: Cho phép 8259 thao tác với chế độ mặt nạ đặc biệt Bit SMM = 1: cho phép chế độ mặt nạ đặc biệt Chế độ mặt nạ đặc biệt dùng để thay đổi thứ tự ưu tiên bên chương trình phục vụ ngắt Ví dụ, trường hợp có yêu cầu ngắt bị cấm (bị che chương trình phục vụ ngắt với từ điều khiển hoạt động OCW1) mà ta lại muốn cho phép yêu cầu ngắt với mức ưu tiên thấp so với mưc ưu tiên yêu cầu ngắt bị cấm tác động ta dùng chế độ mặt nạ đặc biệt Nếu thiết lập, chế độ mặt nạ đặc biệt tồn xoá cách ghi vào 8259 từ điều khiển OCW3 khác với bit SMM = Mặt nạ đặc biệt không ảnh hưởng tới yêu cầu ngắt có mức ưu tiên cao

Tóm lược hoạt động 8259 hệ vi xử lý 8088:

(1)Khi có yêu cầu ngắt từ thiết bị ngoại vi tác động vào chân IRQi 8259 gửi xung INT = đến chân INTR CPU 8088

(2)Nếu chấp nhận, 8088 đưa xung INTA (low active) đến 8259

(3)8259 dùng xung INTA đầu thông báo để hồn tất xử lý nội cần thiết, kể việc xử lý ưu tiên có nhiều yêu cầu ngắt tác động

(4)8088 đưa xung INTA thứ hai khiến 8259 đưa bus liệu byte số hiệu ngắt yêu cầu ngắt vừa chấp nhận (yêu cầu ngắt có mức ưu tiên cao (nếu có nhiều yêu cầu ngắt tác động) – tuỳ theo chế độ làm việc 8259)

(5)8088 tính tốn địa chương trình phục vụ ngắt dựa số hiệu ngắt, cụ thể sau:

o Cất FR; xoá IF, TF; cất CS, IP vào Stack

(108)

Chƣơng VÀO RA DỮ LIỆU BẰNG DMA 7.1 Nguyên tắc việc trao đổi liệu với thiết bị ngoại vi cách thâm nhập

trực tiếp vào nhớ (DMA)

Trong kiểu điều khiển trao đổi liệu thiết bị ngoại vi hệ VXL cách thăm dò trạng thái sẵn sàng thiết bị ngoại vi hay cách ngắt VXL đưa chương trước, nhận thấy liệu chuyển từ nhớ tới thiết bị ngoại vi ngược lại phải qua VXL Vi tốc độ truyền liệu phục thuộc vào tốc độ lệnh di chuyển liệu MOV, IN, OUT, v.v

Tuy nhiên thực tế có lúc ta cần trao đổi liệu tốc độ cao với thiết bị ngoại vi, ví dụ cần đưa liệu hình, trao đổi liệu hai thiết bị lưu trữ Trong trường hợp ta cần có khả ghi/đọc liệu trực tiếp với nhớ (direct memory access-DMA) Phương pháp tiến hành thâm nhập trực tiếp vào nhớ để chuyển liệu tới đích mà không thông qua CPU Để làm điều hệ VXL nói chung phải dùng thêm mạch chuyên dụng để điều khiển việc thâm nhập trực tiếp vào nhớ (direct memory access controller-DMAC)

Có thể so sánh tốc độ truyền byte nhớ từ nhớ thiết bị ngoại vi sử dụng hai phương pháp DMA CPU sau:

CPU

LAP: Mov AL,[SI] Out Port,AL Inc SI Loop LAP

10 chu kỳ 10 chu kỳ chu kỳ 17 chu kỳ

Tổng 39 chu kỳ DMA Chuyển Byte liệu chu kỳ Tổng chu kỳ

Để hỗ trợ việc trao đổi liệu với thiết ịi ngoại vi cách thâm nhập trực tiếp vào nhớ, vi mạch CPU thường thồn hai chân tín hiệu điều khiển sau

- HOLD: Chân tín hiệu yêu cầu treo DMAC cảnh báo cho CPU biết cần sử dụng BUS liệu cho mục đích trao đổi

- HOLDA: Chân tín hiệu chấp nhận treo CPU, chấp nhận nhường BUS lại cho DMAC sử dụng Khi CPU nhận HOLD chấp nhận tự treo chính tức tách khỏi hệ thống cách đưa BUS liệu trạng thái trở kháng cao, sau HOLDA nên mức tích cực báo cho DMA phép sử dụng BUS liệu

(109)

Hệ VXL với DMAC

Ta nhận thấy hệ thống này, CPU tự tách khỏi hệ thống việc tự treo (ứng với vị trí cơng tắc chuyển mạch thời) để trao quyền sử dụng BUS liệu cho DMAC DMAC phải chịu trách nhiệm điều khiển toàn hoạt động trao đổi liệu hệ thống Để làm điều DMAC phải có khả tạo tín hiệu điều khiển cần thiết giống CPU thân phải thiết bị lập trình (để CPU đưa thông tin cần thiết công việc mà phải làm trước CPU tách khỏi hệ thống),

Quá trình hoạt động hệ thống tóm tắt sau:

Khi thiết bị ngoại vi có yêu cầu trao đổi liệu kiểu DMA với nhớ, đưa yêu cầu DRQ=1 đến DMAC, DMAC chấp nhận tín hiệu gửi tín hiệu HRQ=1 đến chân HOLD CPU Nhận yêu cầu treo, chấp nhận CPU treo BUS gửi tín hiệu trả lời HLDA=1 chấp nhận treo tới chân HACK DMAC Khi DMAC trả lời thiết bị ngoại vi tín hiệu DACK=1, cho phép thiết bị ngoại vi phép trao đổi đổi liệu theo kiểu DMA Kết thúc trình trao đổi DMA đặt tín hiệu HRQ=0, trả quyền điều khiển BUS liệu lại cho CPU

Trong thực tế có kiểu trao đổi liệu cách thâm nhập trực tiếp vào nhớ sau:

- Treo CPU khoảng thời gian để trao đổi mảng liệu - Treo CPU để trao đổi Byte

- Tận dụng thời gian không sử dụng BUS CPU để trao đổi liệu

7.2 DMAC 8237-5 hệ vi xử lý 8088

7.2.1 Tín hiệu HOLD HLDA CPU 8088

Hai tín hiệu yêu cầu treo trả lời chấp nhận treo chế độ MIN CPU 8088 HOLD HOLDA Quan hệ hai tín hiệu thể sau:

CPU

HOLD HOLDA

DMAC

HRQ DRQ HACK DACK

I/O

DRQ DACK

MEM

Bus A

Bus D

(110)

7.2.2 Mạch DMAC 8237-5 Intel

Vấn đề:

Trong thực tế thời điểm có nhiều yêu cầu ngắt từ loại ngắt khác nhau, đòi hỏi CPU phục vụ CPU lúc phục vụ tất yêu cầu ngắt Vì cần có quy trình định dựa đặc tính tính ưu tiên mà yêu cầu ngắt đáp ứng

Bản thân 8088 thiết kế để phân nhận diện mức ưu tiên ngắt theo tính chất quan sau:

Mức ưu tiên

 Ngắt nội bộ: INT (phép chia cho 0) … Cao

 Ngắt không che NMI

 Ngắt che ỈNT

 Ngắt để chạy lệnh ….Thấp

Khi có nhiều yêu cầu ngắt lúc CPU phục vụ theo mức ưu tiên giảm dần

Trong trường hợp có nhiều ngắt che từ bên phải phục vụ ta thường dùng vi mạch có sẵn 8259A để giải vấn đề ưu tiên Mạch 8259A gọi mạch điều khiển ngắt ưu tiên (priority interupt controller PIC) Đó vi mạch cỡ lớn lập trình được, xử lý trước yêu cầu ngắt với mức ưu tiên khác để tạo yêu cầu ngắt đưa đến đầu vào INTR(yêu cầu ngắt che được) CPU 8088 Nếu nối tầng mạch 8259A chủ với mạch 8259A ta nâng tổng số yêu cầu ngắt với mức ưu tiên khác lên thành 64

CLK

HOLD HOLDA

(111)

Sơ đồ khối PIC 8259A

Ghi chú:

 IR0-IR7: yêu cầu ngắt

 IRR: Thanh ghi yêu cầu ngắt

 PR: Bộ xử lý ưu tiên

 SP-EN: Slave program/Enable bufer(lập trình thành mạch thợ/mở đệm BUS liệu)

 ISR: Thanh ghi yêu cầu ngắt phục vụ

 Cas0-Cas2: Tín hiệu nối tầng PIC với

Các khối chức 8259A

 Thanh ghi IRR: Ghi nhớ yêu cầu ngắt có đầu vào IRi

 Thanh ghi ISR: Ghi nhớ yêu cầu ngắt phục vụ số yêu cầu ngắt Iri

 Thanh ghi IMR: ghi nhớ mặt nạ ngắt yêu cầu ngắt IRi

 Logic điều khiển: Khối có nhiệm vụ gửi yêu cầu ngắt tới INTR 8088 có tín hiệu chân IRi nhận trả lời chấp nhận trả lời chấp nhận yêu cầu ngắt INTA từ CPU để điều khiển việc đưa kiểu ngắt bus liệu

 Đệm bus liệu: Dùng để phối ghép 8259A với bus liệu CPU

 Logic điều khiển ghi/đọc: Dùng cho việc ghi từ điều khiển đọc từ trạng thái 8259A

 Khối đệm nối tầng so sánh: Ghi nhớ so sánh số hiệu mạch 8259A có mặt hệ vi xử lý

Các tín hiệu 8259A:

Một số tín hiệu mạch 8259A có tên giống tín hiệu tiêu chuẩn 8088 ta thấy rõ hiểu ý nghĩa chúng hình Ngồi tín hiệu cịn có số tín hiệu khác đặc biệt khác sau:

Cas0-Cas2 [I.O]: Là đầu vào mạch 8259A thợ đầu mạch 8259A chủ dùng cần nối tầng

SP/EN

Đệm

Bus D Logic điều khiển

ISR PR IRR

IMR (thanh ghi mặt nạ) Logic ghi

đọc

Đệm nối tầng so sánh

IR0 IR0 IR0 RD

WR A0 CS

Cas0 Cas1 Cas2

INTA INT

(112)

SP/EN[I.O]: Khi 8259A làm việc chế độ đệm bus liệu tín hiệu vào dùng lập trình để biến mạch 8259A thành mạch thợ (SP=0) chủ (SP=1) Khi 8259A làm việc hệ vi xử lý chế độ có đệm bus liệu chân tín hiệu EN dùng mở đệm bus liệu để 8088 8259 thông vào bus liệu hệ thống Việc định nghĩa 8259A chủ thợ phải thực thông qua từ điều khiển ICW4

 INT [O]: Tín hiệu yêu cầu ngắt đến chân INTR 8088

Ngày đăng: 05/03/2021, 18:43

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan