1. Trang chủ
  2. » Thể loại khác

Lập trình hệ thống phkkhanh bai2

7 139 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 214,06 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

PHẦN I : CƠ SỞ LÝ THUYẾT Ngắt interrupt là quá trình dừng chương trình chính đang chạy để ưu tiên thực hiện một chương trình khác, chương trình này được gọi là chương trình phục vụ ngắt

Trang 1

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

BÀI 2: XỬ LÝ NGẮT

™ MỤC ĐÍCH THÍ NGHIỆM

Giúp sinh viên bằng thực nghiệm khảo sát các vấn đề chính sau đây :

- Đọc nội dung của bảng vector ngắt

- Thực hiện chặn ngắt

™ THIẾT BỊ SỬ DỤNG

1 Máy vi tính

PHẦN I : CƠ SỞ LÝ THUYẾT

Ngắt (interrupt) là quá trình dừng chương trình chính đang chạy để ưu tiên thực hiện một chương trình khác, chương trình này được gọi là chương trình phục vụ ngắt (ISR – Interrupt Service Routine) ISR hoàn toàn giống với một chương trình bình thường trên máy tính, nghĩa là nó có khả năng truy xuất đến tất cả các lệnh ngôn ngữ máy của µP Tuy nhiên cuối ISR sẽ kết thúc bằng lệnh IRET (Interrupt Return) để µP tiếp tục thực hiện lệnh đã kết thúc trước đây

Khi thực hiện lệnh gọi một ngắt nào đó, chương trình con phục vụ cho ngắt sẽ được gọi Để thực hiện các ngắt tương ứng, địa chỉ thực hiện các chương trình con phục

vụ ngắt được đặt trong một bảng, gọi là bảng vector ngắt

Bảng vector ngắt gồm có 256 phần tử, mỗi phần tử gồm 4 byte ứng với 256 ngắt (từ ngắt 0 đến ngắt 0FFh) Mỗi phần tử trong bảng vector ngắt chứa 2 địa chỉ: địa chỉ thanh ghi đoạn đưa vào CS và địa chỉ offset của chương trình phục vụ ngắt đưa vào IP

Bảng vector ngắt có thể mô tả như sau:

Địa chỉ Địa chỉ ISR Số thứ tự ngắt

0000h:0000h IP 0000h:0002h CS 0 0000h:0004h IP

0000h:0006h CS 1 0000h:0008h IP

0000h:000Ah CS 2

… … … 0000h:03FCh IP

0000h:03FEh CS 255 Khi có một quá trình ngắt xảy ra, CPU sẽ tìm địa chỉ bắt đầu của chương trình ngắt được chứa trong bảng vector ngắt theo số thự tự ngắt Do một phần tử trong bảng

Trang 2

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

vector ngắt chiếm 4 byte nên để tìm giá trị địa chỉ trong bảng vector ngắt, ta chỉ cần nhân

số thứ tự ngắt với 4

Quá trình gọi ngắt từ hợp ngữ đơn giản là thực hiện lệnh INT STT_ngắt sau khi

nạp các tham số cần thiết cho ngắt Khi thực hiện lệnh gọi ngắt, CPU sẽ tìm kiếm trong bảng vector ngắt địa chỉ của chương trình phục vụ ngắt Người sử dụng cũng có thể xây dựng môt chương trình cơ sở như các chương trình xử lý ngắt Sau đó, các chương trình khác có thể gọi ngắt ra để sử dụng Một chương trình có thể gọi chương trình con loại này mà không cần biết địa chỉ của nó

Như vậy, nếu muốn thay đổi ngắt, ta có thể thay đổi nội dung trong bảng vector ngắt để chỉ đến chương trình phục vụ do người sử dụng tự xây dựng và chương trình này

sẽ được thực hiện khi ngắt được gọi Để làm điều này, ta chỉ cần tìm vị trí của vector ngắt tương ứng trong bảng và thay đổi giá trị của nó Điều này thực hiện được do bảng vector ngắt đặt trong RAM và được nạp mỗi khi khởi động hệ thống

Quá trình lấy và gán địa chỉ của chương trình con phục vụ ngắt có thể thực hiện thông qua ngắt 21h bằng các hàm sau:

Hàm 35h: lấy địa chỉ của ngắt

Vào: AL = số thứ tự ngắt Ra: ES:BX = địa chỉ của chương trình phục vụ ngắt

Hàm 25h: gán địa chỉ của một chương trình phục vụ cho một ngắt

Vào: AL = số thứ tự ngắt, DS:DX Ra: không có

PHẦN II : TIẾN TRÌNH THÍ NGHIỆM

Quá trình đọc nội dung từ bảng vector ngắt có thể thực hiện bằng 2 cách: dùng hàm 25h và 35h của ngắt 21h hay truy nhập trực tiếp vào bộ nhớ

1 Dùng hàm 25h và 35h

- Dùng NCEdit soạn thảo chương trình sau:

.MODEL SMALL

.STACK 100h

.DATA

Hexcode db ‘0123456789ABCDEF’

Msg db ‘Nhap so thu tu ngat: $’

Msg1 db ‘Dia chi segment: $’

Msg2 db ‘Dia chi offset: $’

Msg3 db ‘Nhan mot phim bat ky de tiep tuc, ESC de thoat$’

CrLf db 13,10,’$’

.CODE

main PROC

MOV AX,@DATA

Trang 3

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

MOV DS,AX

Start:

MOV AX,02h

INT 10h

MOV AH,09h

LEA DX,Msg

INT 21H

CALL read_number ; ••c s• Hex

MOV AH,09h

LEA DX,CrLf

INT 21h

MOV AH,09h

LEA DX,Msg1

INT 21h

POP AX

CALL print_hex

MOV AH,09h

LEA DX,CrLf

INT 21h

MOV AH,09h

LEA DX,Msg2

INT 21h

POP AX

CALL print_hex

MOV AH,09h

LEA DX,CrLf

INT 21h

MOV AH,09h

LEA DX,Msg3

INT 21h

MOV AH,08h

INT 21h

CMP AL,27

JNE start

MOV AH,4Ch

INT 21H

main ENDP

; -

Print_hex PROC

Trang 4

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

PUSH AX

MOV BX,AX

AND BX,0F000h

MOV CL,12

SHR BX,CL

MOV DL,Hexcode[BX]

MOV AH,02h

INT 21h

POP AX

PUSH AX

MOV BX,AX

AND BX,0F00h

MOV CL,8

SHR BX,CL

MOV DL,Hexcode[BX]

MOV AH,02h

INT 21h

POP AX

PUSH AX

MOV BX,AX

AND BX,00F0h

MOV CL,4

SHR BX,CL

MOV DL,Hexcode[BX]

MOV AH,02h

INT 21h

POP AX

PUSH AX

MOV BX,AX

AND BX,000Fh

MOV DL,Hexcode[BX]

MOV AH,02h

INT 21h

POP AX

RET Print_hex ENDP

; -

Read_number PROC

; Nh•p s• Hex t• bàn phím

MOV AH,01h

INT 21h

MOV BX,0

Look1:

CMP AL,Hexcode[BX]

JE Next1

INC BX

JMP Look1

Next1:

MOV CL,4

SHL BL,CL

PUSH BX

MOV AH,01h

Trang 5

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

INT 21h

MOV BX,0

Look2:

CMP AL,Hexcode[BX]

JE Next2

INC BX

JMP Look2

Next2:

MOV AL,BL

POP BX

ADD AL,BL

RET

Read_number ENDP

END main

- Ghi nhận địa chỉ chương trình phục vụ ngắt của các ngắt 00h, 09h, 0Bh và 10h

2 Truy nhập trực tiếp vào bộ nhớ

Để xác định địa chỉ chương trình phục vụ ngắt, ta xác định dựa vào bảng vector ngắt Thay đoạn in đậm bằng đoạn chương trình sau:

MOV BX,0

MOV ES,BX

MOV BL,4

MOV AH,0

MUL BL

MOV BX,AX

MOV AX,ES:[BX]

PUSH AX

MOV AX,ES:[BX+2]

PUSH AX

- Ghi nhận địa chỉ chương trình phục vụ ngắt của các ngắt 00h, 09h, 0Bh và 10h

So sánh kết quả với phần thực hành trên

II CHẶN NGẮT

- Thực hiện chương trình chuyển chữ thường thành chữ hoa mỗi khi nhấn phím: .MODEL SMALL

.STACK 100h

.DATA

.CODE

main PROC

off_int DW ? seg_int DW ? MOV AX,CS MOV DS,AX

Trang 6

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

MOV AH,35h ; L•u ••a ch• ng•t 09h MOV AL,09h

INT 21h MOV off_int,BX MOV BX,ES

MOV seg_int,BX MOV AH,25h ; Gán ••a ch• m•i cho ng•t 09h MOV AL,09h

PUSH DS PUSH CS POP DS MOV DX,offset Int0_ISR INT 21h

POP DS PUSH DS MOV AH,25h MOV AL,60h MOV DX,off_int MOV BX,seg_int MOV DS,BX

INT 21h POP DS lap:

MOV AH,08h ; Ki•m tra phím nh•n INT 21h ; N•u có nh•n phím thì CMP AL,27 ; xu•t ký t• v•a nh•n

JE EXIT ; ra màn hình, n•u nh•n MOV DL,AL ; ESC thì thoát

MOV AH,02h INT 21h JMP lap exit:

MOV DX,off_int ; Khôi ph•c ng•t 09h PUSH DS

MOV BX,seg_int MOV DS,BX

MOV AH,25h MOV AL,09h INT 21h POP DS

MOV AH,4Ch INT 21h main ENDP Int0_ISR PROC FAR

INT 60h ; X• lý phím nh•n MOV BX,40h

MOV ES,BX MOV BX,ES:[1Ah]

MOV AX,ES:[BX]

Trang 7

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

CMP AL,'a'

JB exit_int CMP AL,'z' ; N•u không là ch• th••ng

JA exit_int ;thì gi• nguyên SUB AL,20h ; ng••c l•i thì chuy•n thành MOV ES:[BX],AX ; ch• hoa và l•u vào b• ••m exit_int:

IRET Int0_ISR ENDP END main

- Sửa đổi chương trình để không nhận các phím số từ ‘0’ Æ ‘9’

Ngày đăng: 21/01/2018, 11:39

TỪ KHÓA LIÊN QUAN