michael2ou 发表于 2011-8-9 22:43:13

小甲鱼请进!!关于《王爽汇编》第15章 外中断 编写int 9中断例程的一个题目

本帖最后由 michael2ou 于 2011-8-10 12:55 编辑

关于《王爽汇编》第15章 外中断 15.4节 编写int 9中断例程的一个题目题目:在屏幕中间依次显示"a"~"z",并可以让人看清。在显示的过程中,按下Esc键后,改变显示的颜色。
Q:问题在最后面!!
先看看本人的做法:

①先将下面的程序编译运行——将int9程序安装在0000:0204H中
assume cs:code
code segment
start: mov ax,code
       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 word ptr es:;保存中断向量表中9号单元指向的地址
         pop word ptr es:
         push word ptr es:
         pop word ptr es:
         
         
         mov word ptr es:,204h;将中断向量表9号单元指向的地址改为0000:0204H
         mov word ptr es:,0
         
         
         mov ax,4c00h
         int 21h
;--------------------int 9程序
int9:push ax
       push bx
         push es
         
         in al,60h
         
         pushf
         pushf
         pop bx
         and bh,11111100b;将IF,TF设置为零
         push bx
         popf
         call dword ptr ds:
         
         cmp al,1
         jne int9ret
         
         mov ax,0b800h
         mov es,ax         
         inc byte ptr es:
         
int9ret:pop es
      pop bx
                pop ax
                iret
               
int9end: nop

code ends
end start

②编译运行上面的程序后,在运行下面的程序!!
assume cs:code

code segment

start: mov ax,0b800h
       mov es,ax
         
         mov al,'a'
s:   mov es:,al            
       call delay
         inc al
       cmp al,'z'
       jna s

       mov ax,4c00h
       int 21h
;delay相当于实现了 1000*10000h次循环   相当于下面c语言程序
; for(int i=0;i<1000;i++)
;{
;   for(int j=0;j<10000;j++)
;      {
;         --------
;      }
;}
delay proc near

    push ax
      push dx
      
      mov dx,1000h   ;dx 为外层循环
      mov ax,0         ;ax 为内层循环   
                              
s1:      sub ax,1
      sbb dx,0    ;sbbdx-0-CF    ax有进位时dx才减一   
    cmp ax,0   
    jnz s1
    cmp dx,0    ;当ax减10000h次是,dx才减一次
    jnz s1

    pop dx
    pop ax
    ret
delay endp      
         
code ends
end start

;-----------------------------------------------------end------------------------
Q:在执行依次显示"a"~"z"这程序的过程中,按下Esc键时,为什么没有改变颜色????




michael2ou 发表于 2011-8-11 21:39:23

:'(鱼友们!!!帮帮我吧!!!求助!!求助!!求助!!求助!!求助!!求助!!
页: [1]
查看完整版本: 小甲鱼请进!!关于《王爽汇编》第15章 外中断 编写int 9中断例程的一个题目