在32位处理器上,假设栈顶指针寄存器的当前值为0xOOFFFFE8,那么在执行完指令“push eax"(eax为32位寄存器)后,栈指针的当前值为( )。

admin2019-12-10  19

问题 在32位处理器上,假设栈顶指针寄存器的当前值为0xOOFFFFE8,那么在执行完指令“push eax"(eax为32位寄存器)后,栈指针的当前值为(    )。

选项 A、0x00FFFFE4   
B、0x00FFFFE6   
C、0x00FFFFEA   
D、0x00FFFFEC

答案A

解析 “push eax”是一条进栈指令,进栈时要先修改栈指针,32位数据占4个字节,存储器按字节编址,所以栈指针-4。
[归纳总结]存储器堆栈的大小可变,栈底固定,栈顶浮动,需要一个专门的硬件寄存器作为堆栈栈顶指针,简称栈指针(SP)。栈指针所指定的存储单元,就是堆栈的栈顶。对于自底向上生成的堆栈(栈底地址大于栈顶地址),通常栈指针始终指向栈顶的满单元。因此,进栈时,SP的内容需要先自动减量,然后再将数据压入堆栈;出栈时,需要先将堆栈中的数据弹出,然后SP的内容再自动增量。
[解题技巧]首先要明确进栈时栈指针是自动减量的,所以可以排除掉选项C和D。选项B栈指针-2,与32位寄存器的描述不符,所以正确答案为A。
转载请注明原文地址:https://kaotiyun.com/show/Bs3i777K
0

随机试题
最新回复(0)