assume cs:codesg
codesg segment
start:
;
设置源地址与目的地址,并使用movsb传送
mov ax,
cs
mov ds, ax
mov si, offset do0
mov ax, 0
mov es,
ax
mov di, 200h
mov cx, offset do0_end - offset do0
cld
rep
movsb
; 设置向量表
mov ax, 0
mov es,
ax
mov word ptr es:[0],
200h
mov word ptr es:[2],
0
;
激发一个除法溢出,后来证明其它程序有除法溢出时也会打印do0里的字符串,说明内存中的数据被改变。
;
重启电脑后无效,说明中断程序重新加载,疑问,加载的源程序信息在哪???继续学习之路吧
mov ax, 1000
mov bl, 1
div bl
mov ax,
4c00h
int 21h
do0:
jmp short do0_start
db ‘divide error!‘ ; 13个字符
do0_start:
mov ax,
cs
mov ds, ax
mov bx, 202h
; do0 最前面的jmp指令长度忘了,打印出来开始两个字符是乱码,貌似有$符
mov cx, 13
mov ax, 0b800h
mov es, ax
mov
di, 12*160+5*2 ; 12行,第5列,1
颜色不设置看会输出什么,结果黑底白色
mov ah,
24h
loop_do0:
mov
al, [bx]
mov es:[di],
ax
inc bx
add di, 2
loop
loop_do0
mov ax,
4c00h
int 21h
do0_end:
nop
codesg ends
end start
原文地址:http://www.cnblogs.com/boota/p/3714965.html