设置栈段为什么要关中断?

yebo_kmp 2006-04-28 10:47:22
有这样一段代码:
cli
mov ss,#0
mov sp,#0x6c00
sti

为什么要关中断呢?我觉得即使不关中断,当发生中断的时候,返回地址也能正确的设置,并且找回来
的。并没有由于设置栈而破坏返回地址啊?
哪位高手能给我一个详细的解释啊,小弟不胜感谢。十分谢谢!
...全文
224 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leomaxking 2006-05-02
  • 打赏
  • 举报
回复
cs:F000 ip:FFF0其余寄存器都为0
yebo_kmp 2006-04-29
  • 打赏
  • 举报
回复
很感谢楼上的 回答,使我受益匪浅,不过我 还有一个 问题:当cpu刚上电时,它的各个寄存器的值是什么啊?是随机的?还是0,或者其他啊?谢谢,哪位高手给我指点一下啊?thanks.
zara 2006-04-29
  • 打赏
  • 举报
回复
堆栈是由 SS:SP 来指定的, 如果在只设置了 SS 后发生了个硬件中断, 比如是 int08 实时时钟中断, 那么 SS 是新的, 而 SP 是原来的, 这样组合的 SS:SP 就可能指向不确定空间, 甚至是危险的地方造成对那里数据的破坏, 导致不可预测的后果. 所以在设置新的堆栈时, 一般不能发生中断, 通常就暂时用 cli 指令禁止. 不过, 好像有种说法是现在的 cpu 在这方面有自己的保护的, 用户程序可以不需要 cli 的, 不太确切, 有兴趣的话, 楼主可以自己找下来看看的

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧