您的位置:首页 > 其它

汇编入门学习----第二天(1)--中断【原创】

2011-02-16 15:37 211 查看
视频7 中断









 






cpu如何去找中断向量表






注意两个字是4个字节



入栈后cs和ip保存的是中断程序的cs和ip,执行完中断程序后,再把原来程序的cs和ip出栈。
也是c语言函数调用的本质。



但是我们自己会编一些中断的程序。
 
如何产生中断呢?
用0号中断来演示。0号中断是什么,当除法错误的时候会发生0号中断。
 



上面三行引发0号中断



运行后效果如上,说明0号中断是打印Divide error。



所以上述除法是1000h除1,结果仍然是1000h,然后这个数存在AH中自然会溢出。
那我们修改0号中断程序,如何修改?
 






修改成我们自己程序的入口地址就可以了。






当然要先把ds设为0



必须得保证中断处理程序不能被覆盖,那把中断处理程序放在哪呢?






看到上图,那中断程序岂不是要覆盖中断向量表了吗,其实不然,中断向量表只有256个,还没用到0000:0200



ds:[0]和ds:[2]表示的是中断向量表的前4个字节,把0200给ds:[0],0给ds:[2],就修改了中断向量表。
 
 



这样写有错误,得明确知道考给ds:[0]是几个字节,我们希望是两个



这样明确告诉是拷贝2个字节



我们希望中断后立即跳到显示字符串的代码,而不是把数据定义当成指令来执行。
 






在中断处理程序中加入跳转指令。



把中断程序拷贝到刚在0号中断指向的内存地址。






刚才第二步的指令其实都是字符串,只要把这些字符串拷到指定的地址就行。



这里用CLD


 
rep是重复拷贝,
要拷贝的字节数是在cx里。
 
 


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: