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

    技术2025-11-11  10

    视频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里。

     

     

    最新回复(0)