假设P为调用过程,Q为被调用过程,程序在IA-32处理器上执行,以下有关过程调用的叙述中,错误的是( )。
A. C语言程序中的函数调用就是过程调用
B. 从P传到Q的实参无需重新分配空间存放
C. 从P跳转到Q执行应使用CALL指令
D. 从Q跳回到Q执行应使用RET指令
查看答案
以下是有关IA-32的过程调用所使用的栈和栈帧的叙述,错误的是( )。
A. 过程嵌套调用深度越深,栈中栈帧个数越多,严重时会发生栈溢出
B. 从被调用过程返回调用过程之前,被调用过程会释放自己的栈帧
C. 每进行一次过程调用,用户栈从高地址向低地址增长出一个栈帧
D. 只能通过将栈指针ESP作为基址寄存器来访问用户栈中的数据
以下是有关C语言程序的变量的作用域和生存期的叙述,错误的是( )。
A. 静态(static型)变量和非静态局部(auto型)变量都分配在对应栈帧中
B. 因为非静态局部变量被分配在栈中,所以其作用域仅在过程体内
C. 非静态局部变量可以和全局变量同名,是因为它们被分配在不同存储区
D. 不同过程中的非静态局部变量可以同名,是因为它们被分配在不同栈帧中
第15题中的caller函数对应的机器级代码如下:1pushl%ebp2movl%esp, %ebp3subl$24, %esp4movl$100, -12(%ebp)5movl$200, -8(%ebp)6movl-8(%ebp), %eax7movl%eax, 4(%esp)8movl-12(%ebp), %eax9movl%eax, (%esp)10calladd11movl%eax, -4(%ebp)12movl-4(%ebp), %eax13leave14ret假定caller的调用过程为P,对于上述指令序列,以下叙述中错误的是()。
A. 第1条指令将过程P的EBP内容压入caller栈帧
B. 第2条指令使BEP内容指向caller栈帧的底部
C. 第3条指令将栈指针ESP向高地址方向移动,以生成当前栈帧
D. 从上述指令序列可看出,caller函数没有使用被调用者保存寄存器
对于第15题的caller函数以及第16题给出的对应机器级代码,以下叙述中错误的是()。
A. 变量t1和t2的有效地址分别为R[ebp]-12和R[ebp]-8
B. 变量t1所在的地址高(或大)于变量t2所在的地址
C. 参数t1和t2的有效地址分别为R[esp]和R[esp]+4
D. 参数t1所在的地址低(或小)于参数t2所在的地址