首页 > 试题广场 >

设(SP)=0028H,执行段内返回指令RET 6后,SP的

[单选题]

设(SP)=0028H,执行段内返回指令RET 6后,SP的内容是(

  • 0036H
  • 0022H
  • 0030H
  • 0020H


常见的寄存器代表的含义:

SS:存放栈的段地址;
SP:堆栈寄存器SP(stack pointer)存放栈的偏移地址;


BP: 基数指针寄存器BP(base pointer)是一个寄存器,它的用途有点特殊,是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到

比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址
(SS和SP、BP配合使用)

CS寄存器:保存CPU将要执行代码所在物理内存的基地址 
IP寄存器:保存CPU将要执行代码所在物理内存的 偏移地址
(CS和IP配合使用)


解释:
函数运行时,栈是从高地址向低地址生长的。
调用函数,会创建新的栈帧,当有传入参数时,要把参数压进栈,栈会向低地址生长。ESP就是一直指向栈顶的指针(也就是栈的地址最低的地方)。所以,参数入栈,栈生长时,SP指针会向下移动,(如果有局部变量要申请空间,栈会继续向下生长;释放局部变量时,栈会复原);当函数执行介绍时,要回收传入参数时生长的空间,所以使用 RET 6,表示回收6个单位的地址空间。回收地址,相当于往高地址退,所以是0028H+6=0030H (十六进制)。另外,如果没有传入参数的话,就直接 RET 就可以了(RET会修改IP的值,指向对应的程序段)。



发表于 2018-08-09 22:02:15 回复(2)