您的位置:首页 > 其它

汇编题目:按A键,当松开的时显示字母A

2016-01-25 15:25 232 查看
安装一个新的int9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏的“A”;其他的按键照常处理。
提示:按下一个键时产生的扫描码称为通码,松开一个键时产生的扫描码称为断码,断码 = 通码 + 80h

我把程序改了下,按c键,在屏幕上显示B字母,程序代码如下:

;程序功能:按A键,当松开的时候在屏幕的80*25的里面全部显示字母A,不松开则不作任何处理,其他的键照常处理。

assume cs:code
data segment
db 100 dup(0)

data ends

code segment
start:
mov ax,0
mov es,ax
mov di,200h
mov ds,ax
mov si,[9*4]
mov cx,4
cld
rep movsb

mov ax,offset int9
mov ds:[9*4],ax
mov ax,cs
mov ds:[9*4+2],ax

call breakPoint

;还原int9中断向量表
mov ax,0
mov ds,ax
mov si,200h
mov di,9*4
mov cx,4
cld
rep movsb

mov ax,4c00h
int 21h

;实现int9中断例程
int9:
cli
push ax
mov ax,0b800h
push es
mov es,ax

push bx
mov bx,0

push cx
mov cx,2000

in al,60h
cmp al,2eh+80h
jne int9ret
mov ah,'B'
s0:
mov byte ptr es:[bx],ah
add bx,2
loop s0

int9ret:
int 80h
pop cx
pop bx
pop es
pop ax
iret

breakPoint:
push ax
pushf
pop ax
or ah,3        ;这里可以增加判断,例:当cx为100的时候再设置断点
push ax
popf
pop ax
ret

code ends
end start


运行:我使用的是win7+masm6.15环境,通过编译、链接后,使用debug xxx.exe的形式运行,直接按g命令,则会执行到断点处call breakPoint,这时候你按c键盘,就可以在屏幕上显示B字母了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: