21,497
社区成员




assume cs:code,ss:stack
stack segment
dw 10 dup(0)
stack ends
code segment
start:
mov ax,stack //初始化
mov ss,ax
mov sp,20
mov ax,0
mov es,ax
push es:[9*4+2]
push es:[9*4]
mov word ptr es:[9*4],offset int9 //送中断向量
mov word ptr es:[9*4+2],seg int9
mov ax,0b800h
mov es,ax
mov cx,26
mov al,'a'
lop1:
mov byte ptr es:[160*16],al //循环显示26个字母
call delay
inc al
loop lop1
mov ax,0
mov es,ax
pop es:[9*4] //恢复原有的INT9功能
pop es:[9*4+2]
mov ax,4c00h
int 21h
delay: push ax //延时程序,可以无视,哈哈
push dx
mov dx,10h
mov ax,0
s1: sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret
int9: push ax //中断程序
push es
mov ax,0b800h
mov es,ax
in al,60h
cmp al,1
jne endsub
inc byte ptr es:[160*16+1]
endsub:
mov al,20h //问题这在这里,为什么不加这两句,按ESC就没效果呢?
out 20h,al
pop es
pop ax
iret
code ends
end start