鱼C论坛

 找回密码
 立即注册
查看: 5324|回复: 4

[已解决]在debug中运行

[复制链接]
发表于 2021-5-26 23:31:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我在debug中执行mov  ss,ds 后,后面的指令就被改变了,这是为啥呀?,而且后面mov  sp,0000 我都没执行,它就自动执行了。
最佳答案
2021-5-27 12:29:42
我想说的是: mov ss,ds 这条指令本身就是不符合规范的
因为mov 指令要求: 值得再次强调的是存储器与存储器之间不能进行数据直接传送.若要实现  
存储单元间的数据传送,可以借助于通用寄存器作为中介来进行.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-27 12:29:42 | 显示全部楼层    本楼为最佳答案   
我想说的是: mov ss,ds 这条指令本身就是不符合规范的
因为mov 指令要求: 值得再次强调的是存储器与存储器之间不能进行数据直接传送.若要实现  
存储单元间的数据传送,可以借助于通用寄存器作为中介来进行.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-5-27 19:03:32 | 显示全部楼层
mov  ss,ds
涉及到 ss   会自动执行下一条  
这是中断引起的
应该是标志寄存器 TF,if置0  不响应单步中断和外部中断   
因为cpu 要连续设置ss sp 指向正确的栈顶  
发生问题是指在 mov  ss, ax 指令后, 如果事先不禁止中断的话, 就有可能产生一个硬件中断并且响应, 比如是 int8ch (实时时钟中断), 这时的 ss 是新的值, 而 sp 却还是个原值, ss:sp 组成的完整的堆栈地址就指向了一个难以确定的错误的地方, 以此进行堆栈操作的话 (最起码发生中断被响应时被压栈的 CFlag 和返回的 CS:IP 是要保存到这里的), 就会对那里的数据产生破坏, 可能引发难以预测的结果. 

应该利用这个特性在 ss后立马设置sp
  
20200716202057286.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-27 19:04:36 | 显示全部楼层
没学到可以先不用理解      
知道是会连续执行就行了
放在一起设置就好了  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-27 23:23:26 From FishC Mobile | 显示全部楼层
上学期学的 现在玩的差不多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 03:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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