王爽汇编语言,外中断例题,照抄都出错

来源:互联网 发布:做淘宝客的步骤有哪些 编辑:程序博客网 时间:2024/06/05 20:18


王爽汇编语言,外中断例题,照抄都出错,求纠错,如图


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


0 0
原创粉丝点击