tancs 发表于 2019-11-8 17:25:06

除法溢出引发中断过程的IP是那条指令的IP

      
      mov ax,0ffffH
      mov bl,1
      div bl
      nop

执行 div bl时,引发中断过程,那么在push IP的时候,是那一条指令的IP入栈,div bl指令的IP,还是nop指令的IP

人造人 发表于 2019-11-9 20:24:11

我早就看到了这个问题,只是我的调试环境出现了一些问题
花了点时间,我修好了我的调试环境,现在给出调试过程
可以看到是 div bl 的地址入栈

tancs 发表于 2019-11-9 21:40:55

能够说明下是什么原因吗?除法溢出引发的中断与
int 0 引发的中断有什么区别吗?跪求!!!!!!

人造人 发表于 2019-11-9 22:32:02

tancs 发表于 2019-11-9 21:40
能够说明下是什么原因吗?除法溢出引发的中断与
int 0 引发的中断有什么区别吗?跪求!!!!!!

除法溢出引发的中断与int 0 引发的中断有什么区别吗?
没有区别

tancs 发表于 2019-11-10 09:20:44

那为什么压入栈中的ip的值不一样?
由int 0 引发中断时的压入栈中的ip的值是下一条指令的ip
而由除法溢出引发中断压入栈中ip的值是它本指令的ip呢?

人造人 发表于 2019-11-10 11:06:35

tancs 发表于 2019-11-10 09:20
那为什么压入栈中的ip的值不一样?
由int 0 引发中断时的压入栈中的ip的值是下一条指令的ip
而由除法溢出 ...

嗯,我试了一下,int 0压入栈中的的确是下一条指令的ip
其实没有什么为什么,硬件就是这样设计的,如果你想问为什么这样设计,这样设计有什么好处的话
你可以看一看这本书
《Intel® 64 and IA-32 Architectures》
intel的官方文档,里面应该有这样设计的理由,大概吧
我英语能力不行,目前还不具备翻这本书的能力
如果你有兴趣,可以在这本书中找一找,看看有没有你想要的答案

tancs 发表于 2019-11-10 14:28:10

谢谢你,帮我解决了困扰了我好几天的问题,3Q
页: [1]
查看完整版本: 除法溢出引发中断过程的IP是那条指令的IP