汇编语言 实验12 0号中断处理程序

本文详细介绍了如何使用汇编语言实现一个除法溢出中断处理程序,包括设置中断向量表、复制中断处理程序到指定内存位置、触发除法溢出以及在屏幕上显示错误信息的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

assume cs:codesg
codesg segment
start:
			mov ax,0
			mov es,ax
			mov di,0200h   		 	;将es:di 指向 divError中断处理程序的要存放的起始地址  设置目的地址  即代码段存放到0:200处
				
			mov ax,codesg		 	;或者使用mov ax,cs 效果相同
			mov ds,ax
			mov si,offset divError	;将ds:si 指向 divError中断处理程序的起始地址  设置目的地址
			
			cld						;设置DF=0 正向传送
			
			mov cx,offset divErrEnd - offset divError;计算整个中断程序的长度  注意这里要用divError
			rep movsb				;将中断处理程序放到0200:0000的内存段中
			
			mov ax,0
			mov ds,ax
			mov	word ptr ds:[0],200h		;设置中断向量表  就是中断程序执行的起始地址的IP 偏移地址
			mov word ptr ds:[2],0	        ;设置中断向量表  就是中断程序执行的起始地址的CS 段地址
			
			mov dx,3
			mov ax,1
			mov cx,1
			div cx					    ;测试除法溢出 div指令格式  div reg  或 div 内存单元
		 
			mov ax,4c00h
			int 21h
		 

divError:		;除法溢出时显示"divide error!"  也就是说divError的功能是在屏幕上显示 divide  error!
			jmp short divErr1		;注意"divide error!" 是不可执行代码  所以要在其前面加上,jmp指令 跳过它 转而执行可执行代码
			db "divide error!"		;屏幕要显示的内容  

	divErr1:mov ax,0b800h			;注意这条指令为中断程序的执行开始,而上面的数据域费程序的入口  参照codesg
			mov es,ax
			mov di,12*160			;要在屏幕上显示的位置
		 
			mov ax,cs				;此时cs:ip已经指向到了中断程序内
			mov ds,ax				;找到要显示的字符串地址	
			mov bx,202h				;设置ds:si指向字符串  bx指向字符串的起始地址  jmp short divErr1指令占了两个字节
			
			mov cx,13			    ;要显示的字符串的长度
		s:	mov al,[bx]
			mov byte ptr es:[di],al
			mov byte ptr es:[di+1],00001011b;设置字体颜色为绿色高亮
			inc bx
			add di,2
			loop s
		 
			mov ax,4c00h
			int 21h		;中断程序执行完成后返回DOS
 divErrEnd: nop	;nop 占一个字节

codesg ends
end start

小结: 一定要区分开主程序,和中断处理程序 中断处理程序中使用的寄存器与主程序中使用的寄存器是完全独立的,两者之间没有任何的影响。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值