鱼C论坛

 找回密码
 立即注册
查看: 2770|回复: 12

关于中断的问题

[复制链接]
发表于 2015-10-19 19:58:10 | 显示全部楼层 |阅读模式
15鱼币
当检测到中断信息的时候
1.取得中断类型码
2,标志寄存器,TF,IF设置为0
3、CS,ip如栈
4,设置cs ip 指向中断例程

如果在debug中运用单步中断t     假设上一条指令时  mov ss,ax    mov  sp,0010
再用T执行他的时候,过程是怎样的?   我知道iret是返回去的指令,但SS和SP改变了,是怎么返回去的?


妈蛋刚才手残,点错了,重发一贴

最佳答案

查看完整内容

明白你的意思了,你看我这样想对不对,中断也是一段程序,中断程序执行完了是直接返回的,也就是说你改变了ss,那么新中断会压入新的ss地址,iret也会从新的ss返回。就是说,你改变ss之前他已经返回了,你的命令根本就干涉不了1号内中断的内部命令
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-19 19:58:11 | 显示全部楼层
本帖最后由 y290176346 于 2015-10-19 22:09 编辑

明白你的意思了,你看我这样想对不对,中断也是一段程序,中断程序执行完了是直接返回的,也就是说你改变了ss,那么新中断会压入新的ss地址,iret也会从新的ss返回。就是说,你改变ss之前他已经返回了,你的命令根本就干涉不了1号内中断的内部命令
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-10-19 20:26:53 | 显示全部楼层
莫非在一号中断例程里面会用内存单元来保存修改之前的ss和sp?
比如一号中断例程中有一段代码是这样的:
push ax
push bx
mov [ 随便一个内存单元 ],ss
mov 【随便一个内存单元】,sp
mov ss,ax//要通过单步中断执行的代码//
mov sp,0010//要通过单步中断执行的代码//
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-10-19 20:30:01 | 显示全部楼层
感觉也不对,如果这样的话,最后要把之前保存在内存的SS和SP还原出来,然后再iret。。。。。。那ss和sp两个寄存器的值不就没变么- -。。。进死胡同了。。。。:mad:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-10-19 20:52:37 | 显示全部楼层
又有了一种想法,这个比较贴合实际。
假设一号中断例程里面有一个子程序是专门判断类似  mov ss,寄存器  这样的功能
一出现上述情况,则用内存单元去保存栈中的数据,比如保存栈中标志寄存器,CS和IP的值,之后修改SS
然后再用mov cs,【内存单元】这样的语句去回复cs,ip等寄存器的值,这样不用iret指令也能使CPU重新指向执行中断前的地方。。。。。。。。。。。。。这样想对么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-19 21:17:47 | 显示全部楼层
我觉得你假设的有问题,你具体试验过吗,内中断是系统给你编好的,你怎么知道人家故意要改变栈寄存器的地址,你有时间修改一个内中断,结尾的时候加两句改变ss的命令试试,共同学习下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-10-19 21:24:17 | 显示全部楼层
y290176346 发表于 2015-10-19 21:17
我觉得你假设的有问题,你具体试验过吗,内中断是系统给你编好的,你怎么知道人家故意要改变栈寄存器的地址 ...

不是人家要修改SS  是我要修改SS,  单步中断也是一号中断,我就纳闷我要是修改了SS寄存器内容后,之前入栈的那些标志寄存器,CS,IP什么的不就找不到了么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-19 21:34:05 | 显示全部楼层
我刚才说过了吗,人家不修改,你为什么要修改,那你确定你修改后会找得到吗?我也是新手,我觉着你问的问题逻辑不对,既然想知道答案我们可以自己修改下试试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-19 21:37:06 | 显示全部楼层
NBeeeeee 发表于 2015-10-19 21:24
不是人家要修改SS  是我要修改SS,  单步中断也是一号中断,我就纳闷我要是修改了SS寄存器内容后,之前入 ...

我的意思是如果你修改ss后,还能得到原来的csip,那才值得去研究,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-10-19 21:47:14 | 显示全部楼层
y290176346 发表于 2015-10-19 21:37
我的意思是如果你修改ss后,还能得到原来的csip,那才值得去研究,

你好好看看我问的啥,我上来就说在debug中
我要用A写指令

第一条指令: mov ax,1000
                 : mov ss,ax
                 :mov sp,0010
然后用单步中断执行,执行到第二条的时候,我用这个指令时修改SS寄存器的指令。。。我这样说你要是还觉得我问的问题逻辑有问题的话,那你就觉得有问题吧- -
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-10-19 22:19:21 | 显示全部楼层
y290176346 发表于 2015-10-19 22:03
明白你的意思了,你看我这样想对不对,中断也是一段程序,中断程序执行完了是直接返回的,也就是说你改变了 ...

对对对,你说对了,我之前就是这么想的。。。。只不过我脑子里一直记得是先压栈在进入中断,处理指令,再返回,所以我就吧这个想法给否定了。。。然后我刚才又重新看了看视频,发现了是先执行指令,在压栈,在执行中断程序(也就是显示个寄存器内容)                               真是谢谢你跟我一直这么争辩下去了,不是你跟我在这争辩,估计我懒得回去看视频,我也就想破头也想不出来啥问题了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-10-19 22:22:53 | 显示全部楼层
y290176346 发表于 2015-10-19 19:58
明白你的意思了,你看我这样想对不对,中断也是一段程序,中断程序执行完了是直接返回的,也就是说你改变了 ...

在指令执行后才进行压栈,执行中断例程,所以不怕回不去

大哥,加个Q,以后有问题一起讨论如何?辩证使人进步:lol:
Q1074677383   问题什么的就打你的论坛昵称!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-19 22:23:19 | 显示全部楼层
没事,共同学习。我一个视频都是看三遍以上,一边是理解不了多少东西的,笨鸟先飞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 00:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表