问题:这里有个坑,如果像书本那样写,安装了7ch中断程序后,你再另写一个测试程序引发7ch中断程序,执行时会找不到table里面的子程序入口地址。书本代码如下:
assume cs:code
code segment
setscreen:
jmp short set
table dw clean_screen,set_foreColor,set_backColor,scroll_up
set:
push bx
cmp ah,3 ;参数ah存放功能号,功能号范围是0-3,对应4种功能
ja sret
mov bl,ah
mov bh,0
add bx,bx ;根据ah中的功能号计算对应子程序在table表中的偏移
call word ptr table[bx] ;调用对应的子程序功能
sret: pop bx
iret
clean_screen:
push bx
push es
push cx
mov bx,0b800h
mov es,bx
mov bx,0
mov cx,2000
print_space:
mov byte ptr es:[bx],' '
add bx,2
loop print_space
pop cx
pop es
pop bx
ret
set_foreColor:
push bx
push cx
push es
mov bx,0b800h
mov es,bx
mov bx,1 ;显示缓存区奇数位存属性
mov cx,2000
set012bit:
and byte ptr es:[bx],11111000b
or es:[bx],al ;参数al为颜色值
add bx,2
loop set012bit
pop es
pop cx
pop bx
ret
set_backColor:
push bx
push cx
push es
mov cl,4
shl al,cl
mov bx,0b800h

本文详细分析了在《汇编语言》王爽第三版实验16中遇到的问题,即安装7ch中断程序后,测试程序调用子程序时找不到正确入口。问题源于中断向量表和子程序入口地址的不匹配。文中提出了两种解决方法:一是使用`org 200h`调整程序起始位置;二是利用20h:0的内存地址形式保持偏移地址一致。此外,还提供了一个测试程序,实现了清屏、设置颜色和滚动屏幕等功能。
最低0.47元/天 解锁文章
692





