问题 3.11、3.12
将10000H~1FFFFH地址空间当作栈段,初始状态为空,则SS=1000H时,SP寄存器存储的数据是什么?栈空间的容量有多大?
当初始状态栈设置SS=1000H,则只要既不用手工也不通过指令对SS进行修改,只是任SP随栈指令操作而自然变动,SS是不会因SP的任何改变而发生改变。SP的变化范围是0000H~FFFFH,所以当SP=0000H时,再次执行push将使得SP=SP-2,由于溢出效应,SP变为FFFEH,于是SS:SP由1000:0000变为1000:FFFE;当SP=FFFFH,再次执行pop使得SP=SP+2,溢出效应导致SP由FFFFH变为0001H,SS:SP由1000:FFFF变为1000:0001。可见,栈空间10000H~1FFFFH形成一个闭环,让栈空间的存储单元可以循环使用而不会越界。
由于SP的变化范围0000H~FFFFH是64KB的容量,所以一个栈段的最大容量也就是64KB:一个地址代表一个内存单元,一个内存单元的容量为1B;在0~FFFFH范围内共有2¹⁶个数值,一个值就是一个地址,因此也就是2¹⁶个地址;可见这个栈的空间容量为2¹⁶B,即2⁶KB(64KB)。