关于外中断的一个问题
这是一个访问 cmos ram 芯片的程序 ,运行后能按 年/月/日 时:分:秒 显示时间 ,如果按下 esc 就退出 ,代码如下 ,我想问的问题在下面assume cs:code
code segment
s: db 9,8,7,4,2,0
start:
mov si,offset s
mov ax,code
mov ds,ax
mov cx,6
mov bx,0b800h
mov es,bx
mov di,160*12 + 40*2
sa: push cx
mov al,ds:[si]
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
mov byte ptr es:[di],ah
mov byte ptr es:[di+2],al
inc si
pop cx
dec cx
cmp cx,3
je se
mov byte ptr es:[di+4],'/'
add di,6
jmp short sa ;年/月/日显示
se: push cx
mov al,ds:[si]
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
add di,6
mov byte ptr es:[di],ah
mov byte ptr es:[di+2],al
inc si
pop cx
dec cx
cmp cx,0
je sc
mov byte ptr es:[di+4],':' ;时:分:秒显示
jmp short se
sc: cli ;这个 cli 本来是没有的,但是书上说如果 if = 0 ,cpu 就不会理会可屏蔽中断,所以我想试试
in al,60h ;利用键盘中断退出程序 但我加上 cli 后,按下 esc 仍能终止程序,不知道为什么,请高手指教
cmp al,01h ;esc键的扫描码 还有一个问题,我知道 通码 + 80h = 断码 ,当我把 cmp al,01h 改成 cmp al,81h 时
je quit 我以为我一直按下 esc 时程序仍能运行,松开 esc 时程序才终止,但并不是这样,我一按键就终止了
jmp start 这也让我很纳闷,请指教
quit:
mov ax,4c00h
int 21h
code ends
end start