楚云天1989 发表于 2019-3-26 13:43:17

空栈SP的问题

在视频中17节课中这样讲的:栈为空,就相当于栈中唯一的元素出栈,出站后,SP=SP+2,SP原来为000EH,加2后SP = 10H,所以当栈为空的时候,SS=1000H,SP=10H在视频19节中题目:问题3.7 将10000H~1000FH这段空间当作栈,初始状态时空,将AX,BX,DS的数入栈。
程序中是这样写的:
MOV AX,1000H
MOV SS,AX
MOV SP,0010H
。。。
这里我实在不理解这个SP为什么是0010H呢,到底空栈SP是+2还是+1??

jackz007 发表于 2019-3-26 15:20:15

本帖最后由 jackz007 于 2019-3-26 16:12 编辑

       只要堆栈指针 SP 指向了栈顶(在本例中就是 10H),那么,堆栈就是空的。因为这时,堆栈里面可以容纳 8 个 word(即 16个 bytes)。   

      对于 16 位的 DOS 程序,压、退栈操作分别会使 SP 减 2 和 加 2,因为 1 个字长是 16 位,也就是 2 个字节,所以,SP 的增减必须是 2 的整数倍。

楚云天1989 发表于 2019-3-27 08:45:44

jackz007 发表于 2019-3-26 15:20
只要堆栈指针 SP 指向了栈顶(在本例中就是 10H),那么,堆栈就是空的。因为这时,堆栈里面可以容 ...

哦哦 我明白了,我有一点想错了,这个栈空间肯定是16的整数倍,所以10000H~1000FH的栈空间,地址1000F不是16的整数倍,但是也必须按照16的整数倍来计算,也就是到了1000EH的时候,SP不会指向1000FH,就是SP也必须按照2个字的长度来计算,所以SP还是=0010,谢谢指点
页: [1]
查看完整版本: 空栈SP的问题