计算机系统基础 (一): 程序的表示, 转换与链接 (第七周小测验)
1. 假设 P 为调用过程, Q 为被调用过程, 程序在 IA-32 处理器上执行, 以下有关过程调用的叙述中, 错误的是( ).
A. 从 Q 跳回到 Q 执行应使用 RET 指令
B. 从 P 传到 Q 的实参无需重新分配空间存放
C.C 语言程序中的函数调用就是过程调用
D. 从 P 跳转到 Q 执行应使用 CALL 指令
2. 以下是有关 IA-32 的过程调用方式的叙述, 错误的是( ).
A.EBX,ESI,EDI,EBP 和 ESP 都是被调用 者保存寄存器
B. 入口参数使用栈 (stack) 传递, 即所传递的实参被分配在栈中
C. 返回地址是 CALL 指令下一条指令的地址, 被保 存在栈中
D.EAX,ECX 和 EDX 都是调用者保存寄存器
3. 以下是有关 IA-32 的过程调用所使用的栈和栈帧的叙述, 错误的是( ).
A. 只能通过将栈指针 ESP 作为基址寄存器 来访问用户栈中的数据
B. 过程嵌套调用深度越深, 栈中栈帧个数越多, 严重时会发生栈溢出
C. 从被调用过程返回调用过程之前, 被调用过程 会释放自己的栈帧
D. 每进行一次过程调用, 用户栈从高地址向低地 址增长出一个栈帧
4. 以下是有关 C 语言程序的变量的作用域和生存期的叙述, 错误的是( ).
A. 因为非静态局部变量被分配在栈中, 所以其作 用域仅在过程体内
B. 非静态局部变量可以和全局变量同名, 是因为 它们被分配在不同存储区
C. 静态 (static 型) 变量和非静态局部 (auto 型) 变量都分配在对应栈帧中
D. 不同过程中的非静态局部变量可以同名, 是因 为它们被分配在不同栈帧中
5. 以下是一个 C 语言程序代码:intadd(intx,inty)
{
returnx+y;
}
intcaller()
{
intt1=100;
intt2=200;
intsum=add(t1,t2);
returnsum;
}
以下关于上述程序代码在 IA-32 上执行的叙述中, 错误的是( ).
A. 变量 sum 被分配在 caller 函数的栈帧中
B.add 函数返回时返回值存放在 EAX 寄存器中
C. 变量 t1 和 t2 被分配在 caller 函数的栈帧中
D. 传递参数时 t1 和 t2 的值从高地址到低地址依次存入栈中
6. 第 5 题中的 caller 函数对应的机器级代码如下:pushl%ebp
movl%esp,%ebp
subl $24,%esp
movl $100,-12(%ebp)
movl $200,-8(%ebp)
movl-8(%ebp),%eax
movl%eax,4(%esp)
movl-12(%ebp),%eax
movl%eax,(%esp)
calladd
movl%eax,-4(%ebp)
movl-4(%ebp),%eax
leave
ret
假定 caller 的调用过程为 P, 对于上述指令序列, 以下叙述中错误的是( ).
A. 第 1 条指令将过程 P 的 EBP 内容压入 caller 栈帧
B. 第 3 条指令将栈指针 ESP 向高地址方向移动, 以生成当前栈帧
C. 第 2 条指令使 BEP 内容指向 caller 栈帧的底部
D. 从上述指令序列可看出, caller 函数没有使用 被调用者保存寄存器
7. 对于第 5 题的 caller 函数以及第 6 题给出的对应机器级代码, 以下叙述中错误的是( ).
A. 变量 t1 和 t2 的有效地址分别为 R[ebp]-12 和 R[ebp]-8
B. 参数 t1 所在的地址低 (或小) 于参数 t2 所在的 地址
C. 参数 t1 和 t2 的有效地址分别为 R[esp]和 R[esp]+4
D. 变量 t1 所在的地址高 (或大) 于变量 t2 所在的地址
8. 以下有关递归过程调用的叙述中, 错误的是( ).
A. 可能需要执行递归过程很多次, 因而时间开销 大
B. 递归过程第一个参数的有效地址为 R[ebp]+8
C. 每次递归调用都会生成一个新的栈帧, 因而空 间开销大
D. 每次递归调用在栈帧中保存的返回地址都不相同
9. 以下关于 if (cond_expr) then_statement else else_statement 选择结构对应的机器级代码表示的叙述中, 错误的是( ).
A. 一定包含一条无条件转移指令
B. 一定包含一条条件转移指令(分支指令)
C. 对应 then_statement 的代码一定在对应 else_statement 的代码之前
D. 计算 cond_expr 的代码段一定在条件转移指令之前
10. 以下关于循环结构语句的机器级代码表示的叙述中, 错误的是( ).
A. 循环体内执行的指令不包含条件转移 指令
B. 循环结束条件通常用一条比较指令 CMP 来实现
C. 一定至少包含一条条件转移指令
D. 不一定包含无条件转移指令
计算机系统基础(一): 程序的表示, 转换与链接(第七周小测验)
来源: http://www.bubuko.com/infodetail-3276090.html
965

被折叠的 条评论
为什么被折叠?



