鱼C论坛

 找回密码
 立即注册
查看: 2950|回复: 1

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

[复制链接]
发表于 2011-8-9 22:43:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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*4]  ;保存中断向量表中9号单元指向的地址
           pop word ptr es:[di-4]
           push word ptr es:[9*4+2]
           pop word ptr es:[di-2]
           
           
           mov word ptr es:[9*4],204h  ;将中断向量表9号单元指向的地址改为0000:0204H
           mov word ptr es:[9*4+2],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:[200h]
           
           cmp al,1
           jne int9ret
           
           mov ax,0b800h
           mov es,ax           
           inc byte ptr es:[160*12+40*2+1]
           
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:[120*12+40*2],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    ;sbb  dx-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键时,为什么没有改变颜色????




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-11 21:39:23 | 显示全部楼层
:'(鱼友们!!!帮帮我吧!!!求助!!求助!!求助!!求助!!求助!!求助!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 03:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表