在debug中运行
我在debug中执行movss,ds 后,后面的指令就被改变了,这是为啥呀?,而且后面movsp,0000 我都没执行,它就自动执行了。 我想说的是: mov ss,ds 这条指令本身就是不符合规范的因为mov 指令要求: 值得再次强调的是存储器与存储器之间不能进行数据直接传送.若要实现
存储单元间的数据传送,可以借助于通用寄存器作为中介来进行. movss,ds
涉及到 ss 会自动执行下一条
这是中断引起的
应该是标志寄存器 TF,if置0不响应单步中断和外部中断
因为cpu 要连续设置ss sp 指向正确的栈顶
发生问题是指在 movss, ax 指令后, 如果事先不禁止中断的话, 就有可能产生一个硬件中断并且响应, 比如是 int8ch (实时时钟中断), 这时的 ss 是新的值, 而 sp 却还是个原值, ss:sp 组成的完整的堆栈地址就指向了一个难以确定的错误的地方, 以此进行堆栈操作的话 (最起码发生中断被响应时被压栈的 CFlag 和返回的 CS:IP 是要保存到这里的), 就会对那里的数据产生破坏, 可能引发难以预测的结果.
应该利用这个特性在 ss后立马设置sp
没学到可以先不用理解
知道是会连续执行就行了
放在一起设置就好了 上学期学的 现在玩的差不多了
页:
[1]