编写0号中断的处理程序

部署运行你感兴趣的模型镜像

一、实验要求

    编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“overflow”,然后返回到DOS。

 

二、设计思路:

1、编写0号中断的处理程序,该程序显示字符串,然后返回到DOS

2、编写安装程序,将步骤1中处理程序复制到0000:0200开始的内存中

3、修改中断向量表,使0号中断的处理程序地址指向0000:0200

 

三、详细设计

assume cs:codesg

codesg segment
start:
 ;将do0子程序放入到0000:0200开始的内存空间中
 mov ax,0
 mov es,ax
 mov di,0200h ;es:[di]指向目标地址0000:0200
 mov ax,cs
 mov ds,ax
 mov si,offset do0 ;ds:[si]指向do0程序的首地址
 
 mov cx,offset do0end-offset do0  ;计算传输的长度
 cld    ;设置传输方向为正
 rep movsb
 
 
 ;设置中断向量表,将0号(除法溢出)中断的处理程序地址改为0000:0200
 mov ax,0
 mov ds,ax
 mov bx,0
 mov word ptr ds:[bx],0200h
 mov word ptr ds:[bx+2],0000h
 
 ;安装程序返回
 mov ax,4c00h
 int 21h


do0:
 ;存放要显示的数据
 jmp short do0start
 db "overflow"

do0start:
 ;显示字符串"overflow"
 mov ax,0b800h
 mov ds,ax
 mov bx,12*80*2+30*2   ;ds:bx指向屏幕中央
 mov ax,cs
 mov es,ax
 mov si,0202h   ;es:si指向要显示的字符串
 mov cx,8
s:
 mov al,es:[si]
 mov ds:[bx],al
 inc bx
 mov byte ptr ds:[bx],02h
 inc bx
 inc si
 loop s
 
 ;返回dos
 mov ax,4c00h
 int 21h

do0end:
 nop

codesg ends
end start

 

 

四、程序测试

代码测试

 

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

编写0中断处理程序,在法溢出时在屏幕中间显示字符串“divide error!”并返回DOS,可参考如下代码: ```asm assume cs:code code segment start: ; do0安装程序 mov ax,cs mov ds,ax mov si, offset do0 ; 设置ds:si指向源地址 mov ax,0 mov es,ax mov di,200h ; 设置es:di指向目的地址 mov cx,offset do0end - offset do0 ; 设置cx为传输长度 cld ; 设置传输方向为正 rep movsb ; 设置中断向量表 mov ax,0 mov es,ax ; 设置段地址为0 mov word ptr es:[0*4],200h ; 低位存放偏移值0: [0]=200h mov word ptr es:[0*4+2],0 ; 高位存放段地址0:[2] = 0 mov ax,4c00h int 21h do0: jmp short do0start db "divide error!" do0start: mov ax,cs mov ds,ax mov si,0202h ; 设置ds:si指向字符串 mov ax,0b800h mov es,ax mov di,12*160+34*2 ; 设置es:di指向显存空间的中间位置 mov cx,13 ; 设置cx为字符串长度 s: mov al,[si] mov es:[di],al inc si ; 下面两行为设置文字显示的颜色 mov al,02h ; 设置颜色值 mov es:[di+1],al add di,2 loop s mov ax,4c00h int 21h do0end: nop code ends end start ``` ### 代码解释 1. **安装中断处理程序**:将`do0`中断处理程序复制到内存地址`0000:0200`处。 2. **设置中断向量表**:将`0`中断向量表的偏移地址设置为`200h`,段地址设置为`0`。 3. **中断处理程序`do0`**:在发生法溢出时,跳转到`do0start`,将字符串“divide error!”显示在屏幕中间,并设置文字颜色,最后返回DOS。 ### 跟踪调试步骤 1. **使用调试工具**:如Debug或其他汇编调试器。 2. **加载程序**:将编写好的汇编程序编译链接成可执行文件,然后在调试器中加载。 3. **设置断点**:在关键位置设置断点,如`do0`程序的入口、字符串显示部分等。 4. **单步执行**:使用单步执行命令,逐行执行程序,观察寄存器内存的变化。 5. **触发中断**:执行可能导致法溢出的指令,观察程序是否跳转到`do0`中断处理程序。 6. **检查显示结果**:在中断处理程序执行后,检查屏幕中间是否显示了“divide error!”字符串。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值