在8086中定义一个堆栈段其空间最大为多大?

2025-02-23 04:36:29
推荐回答(1个)
回答1:

由于SP的变化范围为0000H~FFFFH,(H表示16进制

其中需要注意的一点是,当栈满的时候,SP=0000H  (由于8086压栈是由高地址端(FFFFH)到低地址端(0000H),SP不断减小),继续压栈,SP溢出(不会影响SS),将会让SP从FFFFH端向0000H端环绕,能够覆盖之前的值,也就是绝对地址最大范围也就和SP的最大范围相同

SP可以指向的每个单元大小对应1Byte(这个单元大小和SP变化范围无关),由SP的变化范围可知SP可表示为16位二进制数,最大容量应该为

2^16 Byte=64KB

或者根据共有FFFFH+1个单元,

(FFFFH-0000H+1)*1 Bit=10000H(Byte)
                       =2^16 (Byte)
                       =64KB

绝对地址计算方法(其实和CS:IP的计算方法相同):

StackAddress=StackSegment*16+StackPointer;

其中*16可以表示为二进制数向左移动四位,对应16进制左移一位(加0)就可以了

StackAddress=100F0+01A1
            =10291(十六进制)