+ -
当前位置:首页 → 问答吧 → 请教一个小程序

请教一个小程序

时间:2010-12-05

来源:互联网

这是一个我的一个小练习,想替换原来的0号中断例程。可是达不到我预期的效果,请大家帮忙看看。
Assembly code
d:\MASM>type d0.asm
assume  cs:code,ds:code
code    segment
start:
        jmp install
do0:
        jmp begin
msg     db      'Divide Error$'
begin:
        mov ax,cs
        mov ds,ax
        mov dx,offset msg
        mov ah,9
        int 21h
        mov ah,4ch
        int 21h
;
;驻留程序,用新的地址取代以前的地址
;
install:
        mov ax,2500h
        mov dx,offset do0
        int 21h
;驻留并退出
        mov dx,offset install
        int 27h
code    ends
end     start

d:\MASM>

作者: masmaster   发布时间: 2010-12-05

是否是因为设置新中断处理程序时,没有指明段地址呢?

作者: shzhfu   发布时间: 2010-12-05

windows平台模拟DOS的窗口,不能真正替代中断吧。

作者: asmlearn   发布时间: 2010-12-05

引用 1 楼 shzhfu 的回复:
是否是因为设置新中断处理程序时,没有指明段地址呢?

嗯, 也这个可能,程序开始伪指令:
assume cs:code,ds:code
而驻留后,上述指定的段地址就被释放了? 如果是这样,那应该是找不到0号入口地址的,
可是用debug看, 0:0处的入口地址也确实被改变了呀! 这是什么原因呢

作者: masmaster   发布时间: 2010-12-05

引用 2 楼 asmlearn 的回复:
windows平台模拟DOS的窗口,不能真正替代中断吧。

只是暂时替换,可以的,王爽老师的教材里有实例。

作者: masmaster   发布时间: 2010-12-05