实验七 中断程序设计与I/O程序设计 计科1093班 伍林锋 200911621323
一、 实验目的
1. 学习中断的原理和设置中断向量,加深对中断处理程序的理解
2、掌握dos和bios中断调用编写I/O程序。
二、 实验内容
1、
编写程序1:要求每隔5.5s在屏幕上显示提示符‘please enter:’,然后从键盘读入一个字符并将这个字符的ASCII码送入内存输入缓冲区,共读入5个字符,然后将这5个字符在屏幕中央显示。
源码:
.model small .stack .data
cnt dw 100 ;计数次数 mes db 5 dup(0),'$' ;内存缓冲区 str db 'please enter:$' ;提示字符串 crlf db 0dh,0ah,'$' ;回车换行 .code start:
mov ax, @data mov ds, ax
mov si,0 ;缓冲区指针 mov al, 1ch mov ah, 35h
int 21h ;取原向量1ch push es
push bx ;保存原向量
push ds
mov dx, offset input mov ax, seg input mov ds, ax mov al, 1ch mov ah, 25h
int 21h ;设置新向量1CH,对应中断处理程序input
pop ds
in al, 21h ;读中断屏蔽寄存器 push ax
and al, 11111100b
out 21h, al ;增加定时器和键盘中断 in al, 20h ;读中断命令寄存器 push ax mov al,11100000b
out 20h,al ;使键盘中断的优先级高于定时器中断 sti ;开中断 rotate: cmp si,5 jl rotate mov ah,2 mov bh,0 mov dh,10 mov dl,30
int 10h ;设置光标在屏幕中央 mov dx, offset mes mov ah, 09
int 21h ;显示内存缓冲区的字符串
pop ax
out 20h,al ;恢复中断命令寄存器 pop ax
out 21h,al ;恢复中断屏蔽寄存器 pop dx pop ds
mov al, 1ch mov ah, 25h int 21h
;恢复原向量
mov ax, 4c00h int 21h
;-------------中断处理程序 input proc near push ds push ax push cx
push dx ;保存寄存器
mov ax, @data mov ds, ax
sti ;开中断,允许中断嵌套
dec cnt ;递减计数 jnz exit mov ah,9 lea dx,str
int 21h ;显示提示字符串 mov ah,0
int 16h ;等待键盘输入
mov mes[si],al ;接收字符到缓冲区 inc si mov ah,9 lea dx,crlf
int 21h ;显示回车换行 mov cnt,100 ;重新进行计数 exit: cli ;关中断 pop dx pop cx pop ax
pop ds ;恢复寄存器 iret input endp end start
答:使键盘中断的优先级高于定时器中断
mov al,11100000b
out 20h,al ;使键盘中断的优先级高于定时器中断 sti ;开中断
备注:所有的PC机都有一个计时芯片(8253/8254定时器),初始化后以每秒约18.2次发出脉冲。每次脉冲调用计时器中断(INT 08H)。计数器以计数频率18.2Hz进行计数,1小时对
应计数值为65520次,1分钟对应计数值为1092次,1秒对应计数值为18.2次(取18次)。即时间计数器每55ms自动加1,也即两个计数之间的时间间隔是55ms,则要计时5.5s(5500ms),需要计数到100。关于INT 08H的原理参见教材300页例8.5
2、编写程序2:实现时钟功能:要求循环调用dos中断读取系统时钟,并在屏幕
中央10行30列的位置显示时钟格式“yyyy-mm-dd hh:mm:ss“,按下esc键则退出程序
源码:
.model small .stack .data
yy dw ?
str1 db 5 dup(0)
str2 db '-','-',' ',':',':' .code
start:
mov ax, @data mov ds, ax mov si,0
mov di,0 ;初始化指针 mov ah,2ah
int 21h ;读系统日期 mov yy,cx ;保存年 mov str1,dh ;保存月 mov str1+1,dl ;保存日 mov ah,2ch
int 21h ;读系统时间 mov str1+2, ch ;时 mov str1+3, cl ;分 mov str1+4, dh ;秒
call state ;定位光标 mov bx,yy
call binidec ;显示年 mov bp,5 ;循环次数
s: call display ;显示格式符号
call time ;依次显示显示月、日、时、分、秒 dec bp jnz s
in al,60h ;读键盘输入
cmp al,01h ;与esc键的扫描码比较 jz exit ;按下esc键退出程序 jmp start ;循环读取 exit: mov ah,4ch int 21h
;------------定位光标 state proc near push ax push bx push dx mov dh,10 mov dl,30 mov bh,0 mov ah,2 int 10h pop dx pop bx pop ax ret
state endp
;------------显示日期、时间 time proc near push cx
mov bl,str1[si] mov cl, 10d call ddiv mov cl, 1d call ddiv inc si pop cx ret time endp
;--------------除法 ddiv proc near
mov al, bl mov ah, 0 div cl
mov bl, ah mov dl, al add dl, 30h mov ah, 2 int 21h ret ddiv endp
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新经管营销实验7 中断程序设计 全文阅读和word下载服务。
相关推荐: