| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
assume cs:code,ss:stack 
stack segment 
db 128 dup(0) 
stack ends 
data segment 
dw 0,0 
data ends 
 
code segment  
star:mov ax,stack  
     mov ss,ax 
         mov sp,128 
     mov ax,0 
         mov es,ax 
         mov ax,data 
         mov dx,ax 
         push es:[9*4] 
         pop ds:[0] 
         push es:[9*4+2] 
         pop ds:[2] 
       
 
 
mov word ptr es:[9*4],offset int9 
        mov es:[9*4+2],cs        ;在中断向量表中设置新的int 9中断例程的入口地址 
 
        mov ax,0b800h 
        mov es,ax 
        mov ah,'a' 
s:         
        mov  es:[160*12+40*2],ah 
        call delay 
        inc ah 
        cmp ah,'z' 
        jna s 
        mov ax,0 
        mov es,ax 
 
        push ds:[0] 
        pop es:[9*4] 
        push ds:[2] 
        pop es:[9*4+2]           ;将中断向量表中int 9中断例程的入口恢复为原来的地址 
 
        mov ax,4c00h 
        int 21h 
 
delay:         
        push ax 
        push dx 
        mov dx,2000h 
        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 bx 
        push es 
 
 
        in al,60h 
 
        pushf 
        pushf 
        pop bx 
        and bh,11111100b 
        push bx 
        popf 
        call dword ptr ds:[0]         ;对int指令进行模拟,调用原来的int 9中断例程 
 
 
cmp al,1 
jne int9ret 
        mov ax,0b800h 
        mov es,ax 
        mov byte ptr es:[60*12+40*2+1],2 
        int9ret: 
        pop es 
        pop bx 
        pop ax 
        iret 
 
code ends 
 
end star        为什么我按下esc建字母没有变成绿色,还有那个字母的从a到z根本没有跳,我的cpu没有那么烂吧10000次循环难道就卡住了? |   
 
 
 
 |