第 18 题
一条双字长直接寻址的子程序调用 CALL 指令,其第一个字节是操作码和寻址特征,第二个字节是地址码 5000H。假设 PC 当前值为 1000H,SP 的内容为 0100H,栈顶内容为 1234H,存储器按字编址,而且进栈操作是先 (SP) ← (SP),后存入数据。则 CALL 指令执行后,SP 及栈顶的内容分别为( )。
A. 00FFH, 1000H B. 0101H, 1000H C. 00FEH, 1002H D. 00FFH, 1002H
[tag_link]
正确答案:D
首先,`CALL` 指令为双字长直接寻址,且存储器按字编址,因此指令占用两个字:第一个字包含操作码和寻址特征,第二个字为地址码 `5000H`。 程序计数器当前值为 `1000H`,即指令起始地址,故指令占地址 `1000H` 和 `1001H`,下一条指令地址为 `1002H`,此即返回地址。
其次,执行 `CALL` 指令时需将返回地址压栈。 初始栈指针 `SP=0100H`,栈顶内容(地址 `0100H` 处)为 `1234H`。 进栈操作描述“先 `(SP) ← (SP)`,后存入数据”应理解为栈向下增长,压栈前 `SP` 先减 `1`(因按字编址,压入一个字占用一个地址单位),即
然后将返回地址 1002H 存入新 SP 指向的地址 00FFH。
因此,执行后 `SP=00FFH`,栈顶内容(地址 `00FFH` 处)`=1002H`。 选项 D 符合。