内中断03 – 零基础入门学习汇编语言62

第十二章:内中断03

让编程改变世界

Change the world by program

编程处理0号中断(2)

现在,我们在反过来从CPU的角度看一下,什么是中断处理程序?

do0变成0号中断的中断处理程序的过程:

(1)”shiyan”这个程序在执行时,被加载到内存中,此时do0的代码在程序所在的内存空间中,它只是存放在程序的代码段中的一段要被传送到其他单元中的数据,我们不能说它是0号中断的中断处理程序;

(2)程序中安装do0 的代码执行完后,do0的代码被从程序的代码段中拷贝到0:200处。此时,我们也还不能说它是0号中断的中断处理程序,它只不过是存放在0:200处的一些数据;

(3)程序12.1中设置中断向量表的代码执行完后,在0号表项中填入了do0的入口地址0:200,此时0:200 处的信息,即do0 的代码,就变成了0号中断的中断处理程序。

当除法溢出(即0号中断)发生时,CPU就会执行0:200处的代码。

下面的内容中,我们讨论每一部分程序的具体编写方法。

提示:我们可以使用movsb指令,将do0的代码送入0:0200处。

更详细的程序框架: 相关代码下载

我们来看一下,用rep movsb指令的时候需要确定的信息:

(1)传送的原始位置,段地址:code,偏移地址:offset do0;

(2)传送的目的位置:0:200;

(3)传送的长度:do0部分代码的长度;

(4)传送的方向:正向。

更明确的程序: 相关代码下载

问题是,我们如何知道do0代码的长度?

最简单的方法是,计算一下do0 所有指令码的字节数。

但是这样做太麻烦了,因为只要do0的内容发生了改变,我们都要重新计算它的长度。

其实,我们可以利用编译器来计算do0的长度:

更明确的程序2: 相关代码下载

“-”是编译器识别的运算符号,编译器可以用它来进行两个常数的减法。

比如:mov ax,8-4,被编译器处理为指令: mov ax,4。

另外,编译器还可以处理表达式。

比如指令: mov ax,(5+3)*5/10,被编译器处理为指令: mov ax,4

接下来是do0程序,do0程序的主要任务是显示字符串,程序如下:相关代码下载

把以上所有的元素都放进程序中,我们得出:相关代码下载

程序program1.asm看似合理,可实际上却大错特错。

错误分析:》》T_T

注意,“Welcome to Fishc.com!”在程序program1的data段中。程序program1执行完成后返回,它所占用的内存空间被系统释放,而在其中存放的“Welcome to Fishc.com!”也将很可能被别的信息覆盖;

而do0程序被放到了0:200处,随时都会因发生了除法溢出而被CPU 执行,很难保证 do0 程序从原来程序program1所处的空间中取得的是要显示的字符串“Welcome to Fishc.com!”。

因为 do0 程序随时可能被执行,而它要用到字符串“Welcome to Fishc.com!”,所以该字符串也应该存放在一段不会被覆盖的空间中。

我们修改下源代码:相关代码下载

这样进行修改后,我们的字符串就能跟随do0保存在安全空间中,但是问题又来了,do0程序执行过程中必须要找到“overflow!”,那么它在哪里呢?

首先来看段地址,“Welcome to Fishc.com!”和do0的代码处于同一个段中,而除法溢出发生时,CS中必然存放do0的段地址,也就是“Welcome to Fishc.com!”的段地址;

再来看偏移地址,0:200处的指令为jmp short do0start ,这条指令占两个字节,所以“Welcome to Fishc.com!”的偏移地址为202h 。

最后,我们将do0的入口地址0:200,写入中断向量表的 0 号表项中,使do0成为0 号中断的中断处理程序。

0号表项的地址为0:0,其中0:0字单元存放偏移地址,0:2字单元存放段地址。

完整程序实现如下:相关代码下载

视频下载
技术, IT技术, 汇编语言, 视频教程



                                                    风险提示及免责条款

市场有风险,投资需谨慎。本文不构成个人投资建议,也未考虑到个别用户特殊的投资目标、财务状况或需要。用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部