您的位置:首页 > 编程语言

王爽 汇编语言 第三版 实验15 安装新的int 9中断例程

2017-03-20 17:06 761 查看

题目

安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏幕的“A”,其他的键照常处理。

源代码

assume cs:code
code segment
main:	mov ax,cs
mov ds,ax
mov si,offset startF				;设置ds:si指向源地址
mov ax,0
mov es,ax
mov di,204H							;设置es:di指向目的地址
mov cx,offset endF - offset startF	;设置传输长度
cld									;设置传输方向为正
rep movsb
;将原来的int 9中断例程的入口地址保存到0000:0200H处
mov ax,es:[9*4]
mov es:[200H],ax
mov ax,es:[9*4+2]
mov es:[202H],ax
;将入口地址0:204H,写入中断向量表的9号表项中
mov word ptr es:[9*4],204H
mov word ptr es:[9*4+2],0

mov ax,4C00H
int 21H
startF:	nop
;-------------------------------
;名称:int9
;功能:对松开A键事件进行相关操作
;参数:无
;返回:无
;-------------------------------
int9:	in al,60H							;从端口60H读出键盘的输入
pushf
call dword ptr cs:[200H]			;调用原来的int 9中断例程
call keyboard
iret
keyboard:										;如果松开了A键,则断码为9EH
cmp al,9EH
je keyUpA
ret
;----------------------
;名称:keyUpA
;功能:显示满屏幕的“A”
;参数:无
;返回:无
;----------------------
keyUpA:	mov ax,0B800H
mov es,ax
mov di,0
mov cx,160*25/2
mov al,'A'
a1:	mov byte ptr es:[di],al
add di,2
loop a1
ret
endF:	nop
code ends
end	main


程序运行示例图



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息