题目
设SS:SP=2000:0300H,则堆栈在内存中的物理地址范围是___ (1) __~ ___ (2) ___ .执行两条PUSH指令后,SS:SP= ___ (3) ____,再执行一条POP指令后,SS:SP= ___ (4) ___ 。
设SS:SP=2000:0300H,则堆栈在内存中的物理地址范围是___ (1) __~ ___ (2) ___ .执行两条PUSH指令后,SS:SP= ___ (3) ____,再执行一条POP指令后,SS:SP= ___ (4) ___ 。
题目解答
答案
20000H;202FFH;2000:02FCH; 2000:02FCH;2000:02FEH; 2000:02FEH
解析
本题考查8086微处理器中堆栈段的物理地址计算及PUSH、POP指令对堆栈指针SP的影响。关键点如下:
- 物理地址计算:物理地址 = SS × 16 + SP,其中SS为堆栈段寄存器值,SP为堆栈指针。
 - 堆栈方向:8086堆栈向上生长,即压入数据时SP减小,弹出数据时SP增大。
 - PUSH/POP指令对SP的影响:每条PUSH指令压入2字节数据,SP减2;每条POP指令弹出2字节数据,SP加2。
 
物理地址范围
- 堆栈段起始地址:SS = 2000H → 物理地址起始为 
2000H × 16 = 20000H。 - 堆栈段末尾地址:堆栈段大小为64KB(0~0FFFH),末尾物理地址为 
20000H + 0FFFH = 20FFFH。 - 堆栈实际使用范围:堆栈从SS:SP(20300H)向下扩展至SS:0000H(20000H),因此物理地址范围为 20000H ~ 20FFFH。
 
执行PUSH指令两次
- 初始SP = 0300H,每次PUSH减2:
- 第1次PUSH:SP = 0300H - 2 = 02FEH → SS:SP = 2000:02FEH。
 - 第2次PUSH:SP = 02FEH - 2 = 02FCH → SS:SP = 2000:02FCH。
 
 
执行POP指令一次
- 当前SP = 02FCH,POP指令弹出2字节,SP加2:
- SP = 02FCH + 2 = 02FEH → SS:SP = 2000:02FEH。