实验12
首先得配置DOS环境和Debug工具。
在Vscode插件中搜索MASM/TASM下载。(已配置好环境)
实验配套教程: https://blog.csdn.net/orangehap/category_8914680.html。
参考教材:《汇编语言》第四版P240。
编程:编写0号中断处理程序do0,当发生除法溢出时,在屏幕中间显示“overflow!”,返回DOS。
1 | mov ax, 1000h |
当CPU执行div bh
时,产生0号中断信息,从而引发中断过程,CPU执行0号中断处理程序。
本次实验将自己实现0号中断程序的功能,在屏幕中间显示“overflow!”,然后返回DOS。
1、0000:0200至0000:02FF的256个字节的空间所对应的中断向量表项都是空的,可以将中断处理程序do0传送到内存0000:0200处。
2、中断处理程序do0放到0000:0200
,再将其地址登记在中断向量表对应表项
- 0号表项的地址
0:0
。0:0
字单元存放偏移地址,0:2
字单元存放段地址 - 将do0的段地址0存放在
0000:0002
字单元中,将偏移地址200H存放在0000:0000
字单元
1 | assume cs:codesg |
先来看如何安装do0?
显然串传送指令(movsb)很适合一段连续空间的复制操作。
安装程序如下:
进行串传送时需要知道循环次数,也就是do0程序的长度。
下面直接给出编译器计算do0长度的方法。
1 | mov ax,0 |
然后开始编写do0程序:
1 | do0: ;在屏幕上显示字符串“overflow!” |
最后设置中断向量:
1 | ;将do0的入口地址0:200写入中断向量表的0号表项中 |
完整程序:
1 | assume cs:codesg |
测试结果:
汇编语言实验系列正式完结。