当前位置: 代码迷 >> 汇编语言 >> 中断的有一个有关问题
  详细解决方案

中断的有一个有关问题

热度:8778   发布时间:2013-02-26 00:00:00.0
中断的有一个问题
;摁F1键改变屏幕颜色,但是却退不出去.
stack segment
db 128 dup(0)
stack ends
assume cs:code,ss:stack
code segment
start:
push cs
pop ds
mov ax,0
mov es,ax
mov si,offset int9
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

jmp $ ;等待中断,退不出去了,不继续向下执行指令了.
mov ax,4c00h
int 21h

int9:
push ax
push bx
push cx
push es

in al,60h

pushf
call dword ptr cs:[200h]
cmp al,3bh
jne int9ret
mov ax,0b800h
mov es,ax
mov bx,1
mov cx,2000
s:
inc byte ptr es:[bx]
add bx,2
loop s
int9ret:
pop es
pop cx
pop bx
pop ax
iret
int9end:nop
code ends
end start

------解决方案--------------------------------------------------------
[code=Assembly][/code]stack segment
db 128 dup(0)
stack ends
assume cs:code,ss:stack
code segment
flag db 0;
start:
push cs
pop ds
mov ax,0
mov es,ax
;mov si,offset int9 ;not use
;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
mov ax,offset int9
mov word ptr es:[9*4],ax
mov ax,cs
mov word ptr es:[9*4+2],ax

sti

;jmp $ ;
@@:
cmp byte ptr cs:[flag],1 ;check the flag have set or not
jnz @b

push es:[200h]
pop es:[9*4]
push es:[202h]
pop es:[9*4+2] 

mov ax,4c00h
int 21h

int9:
push ax
push bx
push cx
push es

in al,60h

;pushf
push ax
push es
mov ax,0
mov es,ax
pushf
call dword ptr es:[200h]
pop es
pop ax

cmp al,3bh
jne notF1
mov ax,0b800h
mov es,ax
mov bx,1
mov cx,2000
s:
inc byte ptr es:[bx]
add bx,2
loop s
notF1:
cmp al,01
jnz int9ret
mov al,1
mov byte ptr cs:[flag],al
int9ret:

pop es
pop cx
pop bx
pop ax
iret
int9end:nop
code ends
end start
这样改完之后,按ESC就可以退出了
------解决方案--------------------------------------------------------
@@:
cmp byte ptr cs:[flag],1 ;check the flag have set or not
jnz @b
判断定义的变量flag是不是已经被设置为1,如果是的话,表示你按了ESC,就不会再跳到@@的地方;如果是没有被设置为1,则会一直在等待,也就是不停跳转到@@:的地方
------解决方案--------------------------------------------------------
学 习
------解决方案--------------------------------------------------------
建议楼主多关注一下图形编程.
图形用户界面和开发数据可视化
娱乐一下,不是说楼主的!

      楼 主其实也是一番好意,他发出 这 样的帖子
      
      主 要是为了让大家开心。只不过 帖 子本身的
      
      快 慢没有赶上时代的步伐,这个 也 不全怪他。
      
      回 帖的同学们还请克制,不要有 太 多不满和
      
      火 气。其实只要记得没事的时候 老 来,每个
      
      星 期都坚持在坛子里灌灌水就好 了,请努力
      
      吧。
------解决方案--------------------------------------------------------
@b就是上边最近一个@@
------解决方案--------------------------------------------------------
@F
@@
@B
------解决方案--------------------------------------------------------
学习一下,顶
  相关解决方案