我是靠谱客的博主 清秀白开水,最近开发中收集的这篇文章主要介绍汇编语言实验:编写0号中断处理程序汇编语言实验:编写0号中断处理程序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

任务:编写0号中断处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”,然后返回操作系统。

下面写给出效果,再给出实现代码,最后给出设计思路(为什么这样做呢?因为本次实验没有任何难度,改编之前的示范程序就可以了,我也偷个懒,不写注释了)

这里写图片描述

实现代码如下:

assume
cs:code,ss:stack
stack
segment
db
512 dup(?)
stack
ends
code
segment
main:
mov
ax,stack
mov
ss,ax
mov
sp,512
mov
ax,0
mov
ds,ax
call
install_do0
mov
ax,1000h
mov
bh,0
div
bh
mov
ax,4c00h
int
21h
;***********************************************************
install_do0:
push
ax
push
cx
push
ds
push
es
push
si
push
di
mov
ax,0
mov
es,ax
mov
di,200h
mov
ax,cs
mov
ds,ax
mov
si,offset do0
mov
cx,offset install_end - offset do0
cld
rep
movsb
mov
ax,0
mov
es,ax
mov
word ptr es:[0*4],200h
mov
word ptr es:[0*4+2],0
jmp
near ptr install_end
;------------------------------------------------------------
do0:
jmp
short do0_start
db 'divide error!'
do0_start:
mov
ax,cs
mov
ds,ax
mov
si,202h
mov
ax,0b800h
mov
es,ax
mov
di,10*160+20*2
mov
cx,13
s:
mov
al,[si]
mov
es:[di],al
mov
byte ptr es:[di+1],2
inc
si
add
di,2
loop
s
mov
ax,4c00h
int
21h
;------------------------------------------------------------
install_end:
pop
di
pop
si
pop
es
pop
ds
pop
cx
pop
ax
ret
code
ends
end
main

中断的过程其实很容易理解,概括的说就是CPU自己完成一下操作
1. 取得中断类型码N
2. pushf, 标志寄存器压栈
3. 设置标志为TF=0,IF=0
4. push CS,将CS压栈
5. push IP,将IP压栈
6. 设置IP,CS为中断向量表存放的地址,也就是使(IP) = (N*4),
(CS) = (N*4+2)

至于编写中断处理程序,和编写普通的子程序没有多大区别:
1. 保存用到的寄存器
2. 处理中断
3. 恢复寄存器
4. iret 返回
其中,iret 指令相当于先retf ,然后popf

这里我在编写0号中断处理程序do0时,直接返回操作系统,没有使用iret,因为我在debug中调试时,发现中断过程发生时,堆栈区存入的CS,IP指向的仍然时div bh 指令(这不是玩我吗),所以干脆在do0中直接返回操作系统算了。

最后,总结一下我此次实验的思路:

  • 首先,编写安装子程序install_do0,功能是将中断处理程序do0安装到内存空间0:0200~0:02FF(中断向量表中的空余表项,没有任何信息,是一段安全空间)中。
  • 在子程序install_do0中,修改中断向量表,使得0号中断发生时,可以执行程序do0(do0程序的代码就在子程序install_do0中,只不过作为数据传送到目的地址中,没有被执行罢了,这也充分说明了代码和数据没有本质的区别)

好了,总算是把王爽的教材中“内中断”的部分学习完了,任务也算基本完成了。可以继续学习新的内容了,我在学习汇编的路上越走越远……

 

转载于:https://www.cnblogs.com/wyf12138/p/6581526.html

最后

以上就是清秀白开水为你收集整理的汇编语言实验:编写0号中断处理程序汇编语言实验:编写0号中断处理程序的全部内容,希望文章能够帮你解决汇编语言实验:编写0号中断处理程序汇编语言实验:编写0号中断处理程序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部