某计算机系统采用堆栈结构进行参数传递,堆栈为硬堆栈(由多个寄存器组成),SP为栈指针寄存器。系统按字编址,存储字长为16位。堆栈操作规则为:进栈时(SP)-1→SP后写入数据,出栈时(SP)+1→SP后读取数据。若初始时SP=2000H,栈底地址为2004H,栈顶地址为1FFCH。在执行一次CALL指令调用子程序前,需要将PC值(当前为3000H)压栈保存。则压栈操作完成后,SP的值和栈顶内容应为以下哪项?
答案解析
核心考点说明:本题考察堆栈寻址方式的理解,需要综合存储编址方式、堆栈操作规则和指令执行流程等多个知识点。
解题思路分析:
1. 确定存储编址方式:按字编址,存储字长为16位,意味着每个地址对应2字节
2. 分析堆栈操作规则:进栈时先修改SP,后存入数据
3. 初始状态分析:
- SP=2000H
- 栈底地址为2004H
- 栈顶地址为1FFCH
4. 压栈操作过程:
- CALL指令执行前,PC=3000H
- 压栈操作:SP=SP-1=2000H-1=1FFEH
- 将PC值(3000H)存入新的栈顶地址1FFEH
每个选项的详细分析:
A. SP=1FFEH,栈顶内容为3000H:正确选项,准确反映了按字编址下堆栈操作的过程
B. SP=1FFEH,栈顶内容为3002H:错误,3002H是假设PC自动增加后的值,但CALL指令执行前PC已经指向了下一条指令
C. SP=1FFCH,栈顶内容为3000H:错误,1FFCH是原来的栈顶地址,压栈操作会修改SP
D. SP=1FFCH,栈顶内容为3002H:错误,两个值都不正确
易错点提醒:
1. 容易混淆按字编址和按字节编址对堆栈操作的影响
2. 可能忽略堆栈操作是先修改SP后存数据
3. 需要理解CALL指令执行时PC的更新时机
4. 要注意区分栈指针SP和栈顶地址的不同概念
正确答案:A