CPU的单步中断

CPU在执行完一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断,引发中断过程。也就是说如果CPU检测到TF位为1,CPU就会去转去执行1号中断处理程序

其实在我们执行Debug的t命令的时候,就用到了CPU的单步中断,Debug当中提供了单步中断的中断处理程序,在使用t命令之后,Debug会将标志寄存器的TF位设置为1,然后使得CPU工作于单步中断的方式下,也就是说CPU在执行完t命令之后就会去引发单步中断,然后去执行单步中断的中断处理程序,这样所有寄存器当中的内容就会被显示在屏幕上了,并且去等待输入的命令

这里需要注意的是,我们之前讲了在标志寄存器TF位为1的时候会发生单步中断,如果我们在发生中断过程的时候没有把TF位设置为0,会发生什么样的情况?

要知道我们的中断处理程序也是由一条条指令组成的,如果再指向中断程序之前,TF为1,则CPU在执行完中断处理程序的第一条指令之后,又会去产生单步中断,这样不断的循环不断的循环就会不能结束,所以我们才会在终中断的过程中把TF位设置为0

响应中断的特殊情况

一般情况下,CPU在执行完当前指令之后,如果检测到了中断信息就会去响应中断,会去引发中断过程,但是有的时候,CPU在执行完当前的指令之后,即便是发生了中断,但是也不会去响应

就比如说在执行完ss寄存器传送数据的指令之后,即便是发生了中断,CPU也不会响应,这样做的原因就在于ss:sp需要联合的去指向栈顶,对它们的设置应该去连续的完成,不然的话,如果我们在执行完设置ss的指令之后,CPU响应中断,引发了中断过程,要在栈中压入标志寄存器、CS和IP的值,而这个时候ss改变了,sp没有改变肯定会出错。所以CPU在执行完设置ss的指令之后不去响应中断,这就给连续设置ss和sp指向正确的栈顶提供了一个时机

所以我们应该利用这种特性,去将ss和sp的指令连续存放一下,这样就会使得设置sp的指令紧接着设置ss的指令执行,在此期间,CPU不会去响应中断

所以其实Debug中就是利用了单步中断去实现T命令的功能,也就是说,用T命令执行一条指令后,CPU去响应单步中断,然后执行Debug设置好的处理程序,才能够在屏幕上显示出寄存器的状态,并且去等待命令的输入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值