Andrew@ 发表于 2021-5-26 23:31:38

在debug中运行

我在debug中执行movss,ds 后,后面的指令就被改变了,这是为啥呀?,而且后面movsp,0000 我都没执行,它就自动执行了。

肖-肖 发表于 2021-5-27 12:29:42

我想说的是: mov ss,ds 这条指令本身就是不符合规范的
因为mov 指令要求: 值得再次强调的是存储器与存储器之间不能进行数据直接传送.若要实现
存储单元间的数据传送,可以借助于通用寄存器作为中介来进行.

万千只cnm 发表于 2021-5-27 19:03:32

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

应该利用这个特性在 ss后立马设置sp

万千只cnm 发表于 2021-5-27 19:04:36

没学到可以先不用理解      
知道是会连续执行就行了
放在一起设置就好了

Gacy 发表于 2021-5-27 23:23:26

上学期学的 现在玩的差不多了
页: [1]
查看完整版本: 在debug中运行