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