标题:汇编中的中断为啥刹不住了?
只看楼主
乾坤洞主
Rank: 3Rank: 3
来 自:乾坤洞
等 级:论坛游侠
帖 子:93
专家分:103
注 册:2012-7-18
结帖率:77.78%
已结贴  问题点数:10 回复次数:5 
汇编中的中断为啥刹不住了?
为什么在debug下t命令管不住
mov ss,ax
mov sp,16
这两步一个t直接就过去了!
2013-01-24 17:56
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:5 
debug在处理堆栈的时候经常有一些奇怪的问题 原因很简单 DOS是单进程的 所以debug和被调试的程序用的是同一个堆栈 因而会有很多稀奇古怪的事 习惯就好了
2013-01-24 18:00
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
得分:0 
回复 2楼 zklhp

Stay hungry , Stay foolish!
2013-01-24 18:22
x64asm
Rank: 2
来 自:X64ASM
等 级:论坛游民
威 望:1
帖 子:45
专家分:36
注 册:2010-5-20
得分:5 
因为MOV SS,段寄存器的操作是原子操作.

堆栈指针是由SS段寄存器和SP组成的,所以修改堆栈的操作需要两条指令,即:

MOV SS,堆栈段指针
MOV SP,堆栈指针

在早期的8086处理器,这两条指令不是原子操作,因此,如果修改SS后发生中断
那么,中断处理程序将得到错误的堆栈,造成系统崩溃,后来INTEL修正了指令系统
在执行 MOV SS,堆栈段指针 以后,自动隐含关闭中断,直到下条指令执行完毕以后,
才会开放中断,实现了修改堆栈的原子操作.

所以,跟在MOV SS,堆栈段指针后的指令,将无法打断,因此不能单步执行.
收到的鲜花
  • hu9jj2013-01-25 11:09 送鲜花  20朵   附言:好文章

姓名:旖旎[x64asm]
QQ:6405035,6405038
2013-01-25 00:34
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
解释的很详细,赞!

活到老,学到老! http://www. E-mail:hu-jj@
2013-01-25 11:10
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
得分:0 
DEBUG下的T命令是通过设置标志寄存器的TF=1,让cpu执行完这条语句后,引发单步中断的,中断的过程会伴随FR,CS,IP的入栈操作!

Stay hungry , Stay foolish!
2013-01-25 12:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-397519-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 2.931538 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved