求解这段汇编代码的问题

assumecs:codecodesegmentstart:movax,0moves,axmovdi,200hmovax,csmovds,axmovsi,offsetin... assume cs:code

code segment

start: mov ax,0
mov es,ax
mov di,200h
mov ax,cs
mov ds,ax
mov si,offset int7ch
mov cx,offset int7chend - offset int7ch
cld
rep movsb

mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0

mov ax,4c00h
int 21h

int7ch:
jmp istart
table dw do1,do2,do3,do4

istart: push ax
push bx
push dx

mov bl,ah
mov bh,0
cmp bl,3
ja bye ;提取BH中的功能号,并进行比对是否大于3,大于则跳出
mov ah,0
push ax
pop dx
add bx,bx

call word ptr table[bx] ;跳转到相应功能对应的偏移地址

bye: pop dx
pop bx
pop ax
iret

do1: push ax
push cx
push es
push di

mov ax,0b800h
mov es,ax
mov di,0
mov cx,2000

do1s: mov byte ptr es:[di],' '
add di,2
loop do1s ;清屏

pop di
pop es
pop cx
pop ax
ret

do2: push ax
push cx
push es
push di

mov ax,0b800h
mov es,ax
mov di,1
mov cx,2000

do2s: and byte ptr es:[di],11111000b ;先将前景色置0,再修改前景色
or es:[di],dl
add di,2
loop do2s ;修改前景色

pop di
pop es
pop cx
pop ax
ret

code ends

end start
安装完int 7ch中断例程后,调用int 7ch出现了问题,直接定址表调用后call到了别的地方,求解这是为什么
超出字数限制了删了点代码
展开
 我来答
做而论道
高能答主

2015-06-17 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
这种安装方法,是错误的。

……
……
rep movsb ------复制代码
mov word ptr es:[7ch*4], 200h
mov word ptr es:[7ch*4+2], 0 ;修改中断向量

mov ax, 4c00h----之后立即就退出了程序
int 21h

------------

程序退出后,原来复制进去的代码,也被系统消除了,不可用了。
追问
可以调用int 7ch中断,但是调用之后int7ch下的call会call到别的地址
可以调用int7ch中断,但是调用之后call会call到别的地址
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式