王爽汇编语言,外中断例题,照抄都出错,求纠错,如图
2015-04-09 00:06梁嘉1990 | 分类:汇编语言 | 浏览30次
编程要求:安装一个新的 int 9 中断例程,
功能:在 DOS 下,按下“A”键后,除非不松开,如果松开,就显示满屏幕的“A”,
其他的键照常处理
连接编译正常,运行时我按下’A'再松开,并没有如期变成满屏幕的'A'
题目链接:http://zhidao.baidu.com/question/177873928081107684
做而论道回答如下: (2015-04-10 15:10 提问者采纳)
王爽这程序,出发点,就是错误的。
他把中断例程,很随意的,就安装在 00200H 的位置,
也不管此处,是不是还有,别人安装过什么。
另外,他安装了新中断例程后,这个安装程序就结束了。
他是希望,他所安装的新中断例程,能够长期驻留在内存。
一旦有人按A键再松开,就引起 'A' 的显示。
实际上,他安装程序结束的同时,他所安装的新中断程序,
也被操作系统给清除了。
可以看出来,他对 Winows 环境里面的 DOS 操作系统,还没有弄懂。
就是王爽的又一个错误。
楼主看不到显示 A,这就是正确的结果。
因为,新的 INT 9 例程,已经被清除了。
提问者评价:这是我看过的最靠谱的回答
附:王爽的错误程序。
assume cs:code
stack segment stack
db 128 dup(0)
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,128
mov ax,cs
mov ds,ax
mov si,offset int9
mov ax,0
mov es,ax
mov di,204h
mov cx,offset int9end-offset int9
cld
rep movsb
push es:[9*4]
pop es:[200h]
push es:[9*4+2]
pop es:[202h]
cli
mov word ptr es:[9*4],204h
mov word ptr es:[9*4+2],0
sti
mov ax,4c00h
int 21h
int9:push ax
push cx
push es
push di
in al,60h
pushf
call dword ptr cs:[200h]
cmp al,1eh+80h
jne int9ret
mov ax,0b800h
mov es,ax
mov di,0
mov cx,80*20
s:mov byte ptr es:[di],'A'
add di,2
loop s
int9ret:pop di
pop es
pop cx
pop ax
iret
int9end:nop
code ends
end start