yundi 发表于 2016-4-14 11:32:40

15章外中断例子有疑问

;任务,一个新的9号中断处理例程,按F1改变颜色,其它键无变化
assume cs:code , ds:data , ss:stack

stack segment
        db 128 dup ('0')
stack ends

data segment
        db 128 dup('0')
data ends

code segment
start:
                ;0.段初始化
                mov ax,stack
                mov ss,ax
                mov sp,128
               
                mov ax,data
                mov ds,ax
               
                ;3.将程序安装到内存
                push cs
                pop ds
                mov si,offset bk9
                mov ax,0
                mov es,ax
                mov di,204h
                mov cx,offset bk9end - offset bk9
                cld
                rep movsb
                ;1.先保存原9号中断例程入口,不能存到本程序中,可指定到某内存位置
                mov ax,0
                mov es,ax
                push es:
                pop es:
                push es:
                pop es:
                ;2.改写入口地址
                cli
                mov word ptr es: , 0
                mov word ptr es:,204h
                sti

               
                ;4.程序结束
                mov ax,4c00h
                int 21h
;----以下是中断处理程序-----
bk9:       
                push ax
                push bx
                push cx
                push es
                ;1.读取60号端口
                in al,60h
                pushf;模拟原9号中断时,注意pushf位置
                ;2.执行原9号中断,注意位置
                ;下三句错误
                ;mov bx,0
                ;mov es,bx       
                ;call dword ptr es:
                call dword ptr cs:
                ;3.新加的处理
                cmp al,3bh
                jne bk9ret
                mov ax,0b800h
                mov es,ax
                mov bx,1
                mov cx,2000
s1: add byte ptr es:,1
                add bx,2
                loop s1
bk9ret:
                pop es
                pop cx
                pop bx
                pop ax
                iret
bk9end:nop
;----以上是中断处理程序-----
code ends
end start
一、按下图移动代码位置后,程序能编译不能运行。

二、按下图白框的写法,能编译不能运行。

请教各位,为什么会这样? 我用的虚拟机 dos7 环境

yundi 发表于 2016-4-14 15:29:05

第一个位置问题,按书上代码移动位置后,可以运行。对比了半天,发现自己多了个data段,把它删掉,就也可以移动位置了。可为什么会这样?

键盘手 发表于 2016-4-14 17:23:34

图1、图2都可以运行,F1正常
win7+DOSBox 0.74
页: [1]
查看完整版本: 15章外中断例子有疑问