请看下面的lea sp,tos这句为什么用-t指令不显示啊,但是执行执行了 stack_seg segment dw 100 dup(?) tos label word stack_seg ends code segment main proc far assume cs:code,ss:stack_seg start: mov ax,stack_seg mov ss,ax lea sp,tos //就是这句为什么不显示 retmain endp code ends end start 在查了有关资料得出:这个是 cpu 的个保护功能的体现吧. 堆栈是由 SS 和 SP 共同指定的, 要设置完整的堆栈地址, 需要有两条指令, 如果在这两条指令间发生中断, 那么就可能导致堆栈的错误使用, 引发的后果难以预料. 因此, 一般在设置堆栈前, 早期的做法就是采用 cli 指令禁止可屏蔽类中断, 设置完成后再 sti; 后来的 cpu 籍此增加了个保险措施, 就是遇见设置堆栈的指令组时, 让它们一并执行, 中间不允许中断, 行如一条指令, 这样也是为了防止无意中漏了 cli 指令导致不良后果哈哈哈,学习了,我也验证了,凡是跟在 mov ax,stack_seg mov ss,ax 后的语句都不显示,和mov ss,ax一起连续执行

评论