assume cs:code
code segment
start:
mov ax,code
mov ds,ax
mov si,offset do0;设置目标源地址
mov ax,0
mov es,ax
mov di,200h ;设置程序写入的地址
mov cx,offset do0end-offset do0 ;程序长度
cld
rep movsb;程序复制
mov word ptr es:[0*4],200h
mov word ptr es:[0*4+2],0;将程序的入口地址写入中断向量表0号表项
mov ax,4c00h
int 21h
;------do0
do0: jmp short do0start
db "error div"
do0start:
mov ax,cs
mov ds,ax
mov si,202h ;指向字符串
mov ax,0b800h
mov es,ax
mov di,160*12+32*2;指向显示缓冲区
mov cx,9
s:
mov al,[si]
mov es:[di],al
mov byte ptr es:[di+1],21h
inc si
add di,2
loop s ;字串写入
mov ax,4c00h
int 21h ;返回系统
do0end:nop
code ends
end start
- [qingpengchen2011] 我的子程序是没错的,我在想是不是虚拟机的问题 08/08 12:17
- [qingpengchen2011] 嗯~行。我再认真详细看看,谢谢咯 08/08 10:38
- [tomato] 我运行了,不是地址的问题。也没有出现崩溃的现象,不过有的子程序功能好像不太对。子程序书中都有,建议你 08/07 22:07
- [tomato] 还是不行吗?我帮你看一下。 08/07 21:29
- [qingpengchen2011] table等标志的值都是在此安装程序中的偏移地址,所以那些子程序等等的地址都是要重新计算的。这点我倒 08/07 18:10
- [qingpengchen2011] table dw sub0-int7ch+200h,sub1-int7ch+200h,sub2-in 08/07 18:06
- [qingpengchen2011] table dw sub0-int7ch+200h,sub1-int7ch+200h,sub2-in 08/07 18:06
- [tomato] 结果也贴上来晾凉吧。 08/05 23:49
- [tomato] 我看不是死循环的问题,是子程序入口地址错了。告诉你一个解决思路,就是单步跟踪读取子程序地址那个地方, 08/05 23:45
- [tomato] 很有可能是你程序的问题,检查一下是不是死循环了。 08/05 23:41
[ 游客 发表于 2011-08-02 17:22 ]
经测试,此程序OK。