下面是实验十二的代码
assume cs:code
code segment
start: ;do0的安装程序,只需要安装一次,以后无需此步骤
mov ax, cs
mov ds, ax
mov si, offset do0 ;设置ds:si指向do0程序所在位置
mov ax, 0
mov es, ax
mov di, 200h ;设置es:di指向中断向量表内存空间的空闲位置,目标安装位置
mov cx, offset do0end-offset do0 ;设置传输长度,即中断程序do0的长度
cld ;设置传输方向为正
rep movsb ;通过loop循环,将do0程序安装在目标位置
;设置中断向量:中断类型码,根据中断向量地址,前往对应的中断程序
mov ax, 0
mov es, ax ;段寄存器不支持直接输入数据
mov word ptr es:[0], 200h ;设置中断程序所在的偏移地址IP
mov word ptr es:[2], 0 ;设置中断程序所在的偏移地SP
mov ax, 4c00h
int 21h
;编写0号中断程序do0,功能为显示字符串"overflow!"
do0: jmp short do0start ;该指令占2个字节
db "divide error!"
do0start: mov ax, cs
mov ds, ax
mov si, 202h ;设置ds:si指向字符串地址
mov ax, 0b800h
mov es, ax
mov di, 12*160 + 36*2 ;设置es:di指向显示字符串在显存空间的自定义目标位置
mov cx, 13
sdo0: mov al, [si]
mov es:[di], al
inc si
add di, 2
loop sdo0
mov ax, 4c00h ;一旦出现除法溢出这种错误,直接将控制权交付给操作系统,不再向下进行
int 21h
do0end: nop
code ends
end start
标签:汇编,12,di,mov,si,王爽,ax,do0,es
From: https://blog.csdn.net/2301_81570594/article/details/143216393