题目内容

以下有关IA32的过程调用方式的叙述中,错误的是()。

A. EBX、ESI、ESP都是被调用者保存寄存器
B. 入口参数使用栈传递
C. 返回地址是CALL指令下一条指令的地址,保存在栈中
D. EAX、ECX、EDX都是调用者保存寄存器

查看答案
更多问题

以下有关IA-32的过程调用所使用的栈和栈帧的叙述中,错误的是()。

A. 只能通过将栈指针ESP作为基址寄存器来访问用户栈的数据
B. 过程嵌套调用深度越深,栈中栈帧个数越多,严重时会发生栈溢出
C. 从被调用过程返回调用过程之前,被调用过程会释放自己的栈帧
D. 每进行一次过程调用,用户栈从高地址向低地址增长出一个栈帧

以下有关C语言程序的变量的作用域和生存期的叙述中,错误的是()。

A. 静态(static型)变量和非静态局部变量(auto型)都分配在对应栈帧中
B. 因为非静态局部变量被分配在栈帧中,所以其作用域仅在过程体内
C. 不同过程中的非静态局部变量可以同名,是因为它们被分配在不同栈帧中
D. 非静态局部变量可以和全局变量同名,是因为它们被分配在不同存储区

以下是一段C语言程序代码:1 int add(int x,int y)2 {3 return x+y;4 }56 int caller( )7 {8 int t1=100;9int t2=200;10 int sum=add(t1,t2);11 return sum;12 }以下关于上述程序代码在IA-32上执行的叙述中,错误的是()。

A. 变量t1和t2被分配在caller函数的栈帧中
B. 传递参数时t1和t2的值从高地址到底地址依此存入栈中
C. add函数返回时返回值存放在EAX寄存器中
D. 变量sum被分配在caller函数的栈帧中

在第3题中的caller函数对应的机器级代码表示如下:1pushl %ebp2movl %esp, %ebp3subl $24, %esp4 movl $100, -12(%ebp)5 movl $200, -8(%ebp)6movl -8(%ebp), %eax7 movl %eax, 4(esp)8 movl -12(%ebp), %eax9 movl %eax, (%esp)10 call add11 movl %eax, -4(%ebp)12 movl -4(%ebp), %eax13 leave14 ret假定caller的调用过程是P,对于上述指令序列,以下叙述中错误的是()。

A. 第1条指令将过程P的EBP内容压入caller栈帧
B. 第2条指令使EBP内容指向caller栈帧的底部
C. 第3条指令将栈指针ESP向高地址方向移动,以生成当前栈帧
D. 从上述指令序列可以看出,caller函数没有使用被调用者保持寄存器

答案查题题库