. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于习题栈段初始化,sp到底为fffeh还是0000h的问题的思考  [待解决] 回复[ 0次 ]   点击[ 344次 ]  
8782711
[帖 主]   [ 发表时间:2010-12-15 11:10 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-12-12 20:21
首先关于负数的处理
mov ax,0000
sub ax,0002

执行完后,ax=fffe

再是关于栈的问题
mov ax,1000
mov ss,ax

mov sp,0                mov sp,fffe
mov bx,1      或者        mov bx,1
push bx                  push bx

由于sp-2,所以第一个sp得0-2与得负数的例子一样得fffe,最小栈顶为10000,出现栈顶环绕
             第二个sp就理所应当的等于fffc,最小栈顶为10002,出现栈顶环绕
但是最重要的问题是如何区别sp=0是栈满还是栈空呢?
有些同学提出,用初始sp=fffe处理这个问题,那么同样可以提出当sp=2时,你怎么知道它是栈满还是还差两个字呢?这样到时更难注意和发现,所以我认为设为0000更为妥当,这样栈满sp距离同样值得sp很远
有同学提出栈循环的想法,我不知道这是什么意思,不过对于push,设置了栈顶环绕,对于pop,当我pop到sp=2时,就自动提示错误了,所以我相信在sp=0000时栈满栈空,数值是一样的,但是你可以在使用中区别出来。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved