自己编写汇编除法溢出的中断处理,运行了之后,再做除0 *** 作时,就不动了,貌似并没有相应自己写的中断处理

自己编写汇编除法溢出的中断处理,运行了之后,再做除0 *** 作时,就不动了,貌似并没有相应自己写的中断处理,第1张

1、把程序放在0:200h就不是一种正规的路子,该地址也是在中断向量表,将破坏int 80h以后若干中断的地址,应该把本程序写为TSR(退出时调用int 21h的31h功能或int 27h),0号中断的地址设为本程序段内适当偏移。

2、中断响应例程:首先应该保证运行前后的所有CPU寄存器不变,故需要在例程入口首先push会改变的寄存器,当然了,不加区分地用pusha也行;其次退出应该用iret指令,而不是int 21h的4ch功能。

3、loop命令也不对,应该loop到给cx赋值的下一句,你现在这个将构成死循环。

你问的可真轻松啊,我只简单的说下

先用DOS取中断功能保存已存在的中断到内存,中断向量程序格式与过程类似,过程类型为FAR,堆栈用主程序堆栈,然后压用到的寄存器,之后是功能代码。最后取中断向量的地址用DOS设置中断向量功能添加到中断向量表。

在主程序结束前要恢复原中断

手机很麻烦,搜一下很多的。

第一步把0号中断向量设置成0000:0200h(0号中断发生时CS为0000 IP为0200h)

第三步把int0到int0end的代码复制到00200h中去了

注意到int0处的第一个指令是jmp short int0start

这条语句的汇编代码为0ebh(jmp short *** 作码) 02h(偏移量)

所以紧接着的db "my name is xiongbingxin" 的首地址安排在了0000(CS就是0000):0202h了

我们可以用中断类型码,在中断向量表中找到中断处理程序的入口。找到这个入口地址的最终目的是用它设置CS和IP,使CPU执行中断处理程序。用中断类型码找到中断向量,并用它来设置CS和IP,这个工作是由CPU的硬件自动完成的。CPU硬件完成这个工作的过程被称为中断过程。

下面是8086CPU在收到中断信息后,所引发的中断过程。

2)标志寄存器的值入栈(因为在中断过程中要改变标志寄存器的值,所以先将其保存在栈中)

3)设置标志寄存器的第8位TF和第9位IF的值为0;

4)CS的内容入栈;

5)IP的内容入栈;

6)从内存地址为中断类型码 4和中断类型码 4+2的两个字单元中读取中断处理程序的入口地址设置IP和CS。

可以简洁的描述如下:

1)取得中断类型码N

2)pushf

3)TF=0,IF=0

4)push CS

5)push IP

以上就是关于自己编写汇编除法溢出的中断处理,运行了之后,再做除0 *** 作时,就不动了,貌似并没有相应自己写的中断处理全部的内容,包括:自己编写汇编除法溢出的中断处理,运行了之后,再做除0 *** 作时,就不动了,貌似并没有相应自己写的中断处理、用汇编语言怎么编中断向量程序、汇编语言中中断程序的中一个问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9769376.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存