求解这段汇编代码的问题
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到了别的地方,求解这是为什么
超出字数限制了删了点代码 展开
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到了别的地方,求解这是为什么
超出字数限制了删了点代码 展开
1个回答
展开全部
这种安装方法,是错误的。
……
……
rep movsb ------复制代码
mov word ptr es:[7ch*4], 200h
mov word ptr es:[7ch*4+2], 0 ;修改中断向量
mov ax, 4c00h----之后立即就退出了程序
int 21h
------------
程序退出后,原来复制进去的代码,也被系统消除了,不可用了。
……
……
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到别的地址
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询