想要用0号中断做一些事情可是不知道为什么就直接退出程序了 求帮忙看看
谢,快乐 2019-07-17 03:40:21 assume cs:code,ds:data,ss:stack
data segment
db 'Divde error',0 ;使用程序的时候会被覆盖掉
data ends
stack segment stack
stack ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
call Cpy_nwe_init0
call set_new_int0
mov ax,0
mov dx,1
mov bx,1
div bx
mov ax,4C00H
int 21H
;============================================================================
set_new_int0:
mov bx,0 ;修改了 0号的段地址和偏移地址
mov es,bx
mov word ptr es:[0*4],7E00H ;设置的是Ip
mov word ptr es:[0*4+2],0 ;设置的是cs
ret
;============================================================================
new_init0: jmp newInt0
String: db 'divde error',0
newInt0: mov bx,0B800H
mov es,bx
mov bx,0
mov ds,bx
mov di,160*10 +30*2
;mov si,OFFSET String - new_init0 + 7E00H
mov si,7E03
Show_REt: mov dl,ds:[si] ;判断dl里的数据是不是等于0
jmp dl,0 ;如果等于0就跳转程序结束 因为 我们用到的是0号中断程序 所以 要重新写一个程序返回
je Show_String ;不等于0就把数据放到 es:[di]中 直到dl等于0
mov es:[di],dl
inc di
inc di
inc si
jmp Show_REt
Show_String: mov ax,4c00H
int 21
new_init0_end: nop
;============================================================================
Cpy_nwe_init0:
mov bx,cs
mov ds,bx
mov si,OFFSET new_init0
mov bx,0
mov es,bx
mov di,7E00H
mov cx,OFFSET new_init0_end - new_init0 ;用高减低 来获取两个标号位的差
Cld ;向上
rep movsb ;从 ds;[si] 复制字节型数据到 es:[di] 中, 每执行一次 si和di分别加上一(inc)
ret
code ends
end start