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 环境
第一个位置问题,按书上代码移动位置后,可以运行。对比了半天,发现自己多了个data段,把它删掉,就也可以移动位置了。可为什么会这样? 图1、图2都可以运行,F1正常
win7+DOSBox 0.74
页:
[1]