计算机系统原理复习 执行测验: CH3-2020

解释: 你选择了他 是指做题的时候的选择,结合我的得分 就可以知道我选的对不对了,选项后面有个1 的是我之后补充的,不一定对,
大多数只是猜测,所以只能作为参考

标题: 执行测验: CH3-2020
描述: 无描述
题号: 1
分数: 得 10 分,满分 10 分
问题: 某C语言程序中对数组变量b的声明为“int b[10][5]有一条for语句如下:for (i=0; i<10, i++)for (j=0; j<5; j++)sum+= b[i][j];
假设执行到“sum+= b[i][j];"时,sum 的值在EAX中,b[i][0] 所在的地址在EDX中,j在ESI中,则“"sum+= b[i][j];"所对应的指令(AT&T格式)可以是( )
你的答案:
1、 addl 0(%edx, %esi, 2), %eax
2、 addl 0(%esi;, %edx, 2), %eax
3、 addl 0(%esi, %edx, 4), %eax
4、 addl 0(%edx, %esi, 4), %eax :你选择了他

题号: 2
分数: 得 0 分,满分 10 分
问题: 以下关于

if (cond _expr)

then. satement

else

else Statement

选择结构对应的机器级代码表示的叙述中,错误的是( )。
你的答案:
1、 对应then_ statement 的代码一定在对应else_ statement 的代码之前 1
https://blog.csdn.net/weixin_44711037/article/details/90547860
2、 一定包含一条无条件转移指令 :你选择了他
3、 一定包含一条条件转移指令(分支指令)
4、 计算cond expr的代码段一定在条件转移指令之前
猜一下 因为可以是if 跳转 也可以是if 不跳转
答案:1、 对应then_ statement 的代码一定在对应else_ statement 的代码之前

题号: 3
分数: 得 10 分,满分 10 分
问题: 以下有关C语言程序的变量的作用域和生存期的叙述中,错误的是( )。
你的答案:
1、 静态(static型)变量和非静态局部(auto型)变量都分配在对应栈帧中 :你选择了他
2、 不同过程中的非静态局部变量可以同名,是因为它们被分配在不同栈帧中
3、 非静态局部变量可以和全局变量同名,是因为它们被分配在不同存储区
4、 因为非静态局部变量被分配在栈中,所以其作用域仅在过程体内

题号: 4
分数: 得 10 分,满分 10 分
问题: 以下有关缓冲区溢出以及缓冲区溢出攻击的叙述中,错误的是( )。
你的答案:
1、 只要发生缓冲区溢出,CPU就会跳转到恶意程序事先设定好的程序去执行 :你选择了他
2、 当传送到栈中局部数组中的字符的个数超过数组长度时发生缓冲区溢出
3、 恶意程序可利用像strcpy等无字符串长度设定的c库函数进行缓冲区溢出攻击
4、 只要发生缓冲区溢出,寄存器内容或变量或返回地址等程序信息就可能被修改

题号: 5
分数: 得 10 分,满分 10 分
问题: 假定全局short型数组a的起始地址为0x804908c,则a[2]的地址是( )。
你的答案:
1、 0x8049092
2、 0x804908e
3、 0x8049094
4、 0x8049090 :你选择了他

题号: 6
分数: 得 10 分,满分 10 分
问题: IA-32中指令“ pushl %ebp"的功能是( )
你的答案:
1、 M[R[esp]]←R[ebp], R[esp] ←R[esp]+4
2、 R[esp]←R[esp]+4, M[R[esp]] ←R[ebp]
3、 R[esp]←R[esp]-4, M[R[esp]] ←R[ebp] :你选择了他
4、 M[R[esp]]←R[ebp], R[esp] ←R[esp]-4

题号: 7
分数: 得 10 分,满分 10 分
问题: 假定全局数组a的声明为char *a[8], a的首地址为0x80498c0, i在ECX中,现要将a[i]取到EAX相应宽度的寄存器中,则所用的汇编指令是( )。
你的答案:
1、 mov 0x80498c0(,%ecx), %ah
2、 mov (0x80498c0, %ecx, 4), %eax
3、 mov (0x80498c0, %ecx), %ah
4、 mov 0x80498c0(, %ecx, 4), %eax :你选择了他

题号: 8
分数: 得 10 分,满分 10 分
问题: 假设short型变量x被分配在寄存器AX中,若R[ax]=FF70H,则执行指令“salw $2, %ax”后,变量x的机器数和真值分别是( )
你的答案:
1、 FDC0H, -576 :你选择了他
2、 FDC3H,-573
3、 FFDCH, -36
4、 3FDC,16348

题号: 9
分数: 得 10 分,满分 10 分
问题: 以下关于IA-32中整数运算指令所支持的操作数的叙述中,错误的是( )。
你的答案:
1、 对于乘除运算指令,操作数一定区 分是无符号整数还是带符号整数
2、 除乘法指令外,其他运算指令的源操作数和目的操作数的位数相等 :你选择了他
3、 参加运算的操作数可以是一个字节(8b)、一个字(16b)或双字(32b)
4、 对于加减运算指令,操作数不区分是无符号整数还是带符号整数

题号: 10
分数: 得 10 分,满分 10 分
问题: IA-32 中指令“movl 8(%ebp), %edx” 的功能是()
你的答案:
1、 R[ebp]+8←R[edx]
2、 M[R[ebp]+8] ←R[edx]
3、 R[edx]←M[R[ebp]+8] :你选择了他
4、 R[edx]←R[ebp]+8

题号: 11
分数: 得 0 分,满分 10 分
问题: 假定全局数组a的声明为double *a[8],a的首地址为0x80498c0,i在ECX中,现要将a[i]取到EAX相应宽度的寄存器中,则所用的汇编指令是( )
你的答案:
1、 mov (0x80498c0, %ecx, 4), %eax 1

2、 mov 0x80498c0( ,%ecx, 8), %eax
3、 mov (0x80498c0, %ecx, 8), %eax
4、 mov 0x80498c0(, %ecx, 4), %eax
答案:4、 mov 0x80498c0(, %ecx, 4), %eax
指针是4个byte
()里面不能写地址 写的是寄存器

题号: 12
分数: 得 10 分,满分 10 分
问题: 以下有关IA-32的过程调用所使用的栈和栈帧的叙述中,错误的是( )
你的答案:
1、 每进行一次过程调用,用户栈从高地址向低地址增长出二个栈帧
2、 从被调用过程返回调用过程之前,被调用过程会释放自己的栈帧
3、 过程嵌套调用深度越深,栈中栈帧个数越多,严重时会发生栈溢出
4、 只能通过将栈指针ESP作为基址寄存器来访问用户栈中的数据 :你选择了他

题号: 13
分数: 得 10 分,满分 10 分
问题: 假定静态short型二维数组b的声明如下:static short b[2][4]={ {2, 9, -1, 5}, {3, 1, -6, 2 }};若b的首地址为0x8049820,则按行优先存储方式下,地址0x804982c中的内容是( )。
你的答案:
1、 0xfa :你选择了他
2、 0xff
3、 0x00
4、 0x05

题号: 14
分数: 得 0 分,满分 10 分
问题: 某C语言程序中有以下两个变量声明:int a[10];int *ptr=&a[0];则ptr+i的值为( )。
你的答案:
1、 &a[0]+i :你选择了他
2、 &a[0]+2xi
3、 &a[0]+4xi 1
int 是4个byte的
4、 &a[0]+8xi

题号: 15
分数: 得 0 分,满分 10 分
问题: 程序P中有两个int类型变量i和j,被分别分配在寄存器EAX和EDX中,P中存在以下if语句:if (i 该if语句对应的指令序列一定不会是( )
你的答案:
1、 cmpl %eax, %edx jle 804847c :你选择了他
2、 cmpl %edx, %eax jl 8048460
3、 cmpl %eax, %edx jg 8048480
4、 cmpl %eax, %edx ja 8048380
edx -eax <=0 j-i<=0 这个时候可以是执行{} 也可以是跳过{}
所以也可以相当于 j>i 就 {} 所以可以
为什么
i-j <0
j-i>0
j-i >0 然而这个我也不太清楚 猜一下是因为ja 是usigned 和 int 不一样吧

ans:4、 cmpl %eax, %edx ja 8048380

题号: 16
分数: 得 0 分,满分 10 分
问题: 程序P中有两个变量i和j,被分别分配在寄存器EAX和EDX中,P中语句“if(i 右边为汇编指令):

804846a  39 c2   cmpl %eax, %edx
804846c  7e 0d   jle  xxxxxxxxx

若执行到804846a处的cmpl指令时,i=105, j=100,
则jle指令执行后将会转到( )处的指令执行。
你的答案:

1、 8048461
2、 804846e
3、 8048479 :你选择了他
4、 804847b
答案:4、 804847b
引用的解析
https://blog.csdn.net/qq_43176366/article/details/103104302

解析:
A、因为cmpl指令中EDX内容为100,EAX内容为105,对这两个数做减法,显然100<105,满足jle指令小于或等于的条件,执行完jle指令后将转移到PC+偏移量=0x84846c+2+0d=0x804847b去执行。

那个2 应该是说pc会跑到下面的846c+2==846e这句话上吧 所以要+2
0d 应该是偏移量

7e 可能是cmp的 机器码
edx -eax 100-105 小于 jmp addr+2+0d

题号: 17
分数: 得 10 分,满分 10 分
问题: 假定局部int型数组a的首地址在EDX中,i在ECX中,现要将a[i]取到EAX相应宽度的寄存器中,则所用的汇编指令是( )
你的答案:
1、 mov (%edx, %ecx, 4), %eax :你选择了他
2、 mov (%edx, %ecx, 4), %ax
3、 mov (%edx, %ecx, 2), %eax
4、 mov (%edx, %ecx, 2), %ax

题号: 18
分数: 得 10 分,满分 10 分
问题: 以下有关IA-32/Linux的过程调用的叙述中,错误的是( )
你的答案:
1、 在过程中通常先使用被调用者保存寄存器 :你选择了他
2、 通常EBP寄存器指向对应栈帧(stack frame)的底部
3、 通常每个栈帧底部单元中存放其调用过程的EBP内容
4、 每个过程都有一个栈帧,其大小为16B的倍数

题号: 19
分数: 得 10 分,满分 10 分
问题: 以下有关递归过程调用的叙述中,错误的是( )。
你的答案:
1、 递归过程第一个参数的有效地址为R[ebp]+8
2、 每次递归调用都会生成-个新的栈帧,因而空间开销大
3、 可能需要执行递归过程很多次,因而时间开销大
4、 每次递归调用在栈帧中保存的返回地址都不相同 :你选择了他

题号: 20
分数: 得 10 分,满分 10 分
问题: 假定静态short型二维数组b的声明如下: static short b[2][4]={ {2, 9, -1,5}, {3,8, 2, -6}};若b的首地址为0x8049820,则按行优先存储方式下,数组元素“8” 的地址是( )。
你的答案:
1、 0x8049828
2、 0x8049825
3、 0x8049824
4、 0x804982a :你选择了他

题号: 21
分数: 得 0 分,满分 10 分
问题: 假定int型数组a的首址在ECX中,则“a送EAX"所对应的汇编指令是( )。

你的答案:
1、 leal (%ecx, 0), %eax :你选择了他
2、 movl %edx, %eax
3、 leal (%ecx, 4), %eax
4、 movl %ecx, %eax
猜测:
这个看起来是送一个地址的意思 所以不是lea吗
https://blog.csdn.net/swordmanwk/article/details/41169953
这是个加法

eax =ecx+0 为什么不是这个答案呢
1、 leal (%ecx, 0), %eax
好的 我知道了 原因是i am an idiot
ecx里面存了个地址 就是把ecx里的东西mov出来
用lea 的时候是 有括号的那种,算出来的直接送到eax
遇到题目感觉不对 还是不要马上怀疑题目出错。。。
不要太自以为是。。。
这波老师考试的时候直接把题目改成
4 movl (%ecx), %eax
那么是不是这个不能选了啊
然后多了个这个选项
leal %ecx, %eax
那这个能选吗,我是个废物,永远搞不懂了,请高人自己搞懂吧
o(╥﹏╥)o
答案我不知道但是
bb上显示的是:4、 movl %ecx, %eax

题号: 22
分数: 得 0 分,满分 10 分
问题: 假设R[ax]=FFE8H, R[bx]=7FE6H,执行指令“ subw %bx, %ax"后,寄存器的内容和各标志的变化为( )
你的答案:
1、 R[ax]=8002H, OF=0,SF=1, CF=0,ZF=0
2、 R[bx]=8002H, OF=0, SF=1, CF=0, ZF=0
3、 R[bx]=8002H, OF=1, SF=1, CF=0,ZF=0 :你选择了他
4、 R[ax]=8002H, OF=1, SF=1, CF=0,ZF=0

FFE8
7FE6
8002
cf=0
sf=1
负数-正数=负数
算出来也正常 of=0
答案:
2、 R[bx]=8002H, OF=0, SF=1, CF=0, ZF=0

题号: 23
分数: 得 10 分,满分 10 分
问题: IA-32中指令“leal 8(%edx, %esi, 4), %edx"的功能是( )
你的答案:
1、 R[edx]←R[edx]+R[esi]*4+8 :你选择了他
2、 R[esi]+R[edx]*4+8←R[edx]
3、 R[edx]+R[esi]*4+8←R[edx]
4、 R[edx]←R[esi]+R[edx]*4+8

题号: 24
分数: 得 0 分,满分 10 分
问题: 假设R[ax]=FFE8H, R[bx]=7FE6H, 执行指令“ addw %bx, %ax"后,寄存器的内容和各标志的变化为( )
你的答案:
1、 R[ax]=7FCEH,OF=1, SF=0, CF=0, ZF=0 :你选择了他
异号相加不可能溢出 OF=0
2、 R[bx]=7FCEH,OF=0,SF=0,CF=1, ZF=0
3、 R[ax]=7FCEH, OF=0, SF=0, CF=1, ZF=0 1
4、 R[bx]=7FCEH, OF=1, SF=0, CF=0,ZF=0
f+7 进位了,cf=1
答案:3、 R[ax]=7FCEH, OF=0, SF=0, CF=1, ZF=0

题号: 25
分数: 得 0 分,满分 10 分
问题: 假定静态short 型二维数组b和指针数组pb的声明如下:static short b[2][4] ={ {2, 9, -1, 5}, {3, 1, -6, 2 }};
static short * pb[2]={b[0], b[1]}若b的首地址为0x8049820,则&pb[1]的值是( )。
你的答案:
b 占用了 8 * 2
b从这个开始 0x8049820 ,所以pb从0x8049820+ 8 * 2 开始,就是0x8049830

因为一个pb是一个short * , 是4bit ,所以&pb[1]是0x8049830+4==0x8049834
注意有& , 取的是pb[1] 的地址
1、 0x8049834 选择这个
2、 0x8049832
3、 0x8049838
4、 0x8049830

题号: 26
分数: 得 10 分,满分 10 分
问题: 以下关于IA-32指令格式的叙述中,错误的是( )
你的答案:
1、 指令中给出的操作数所在的通用寄存器的宽度总是32位 :你选择了他
2、 采用变长指令字格式,指令长度从整个字节到十几个字节不等
3、 指令中指出的位移量和立即数的长度可以是0、1、2或4个字节
4、 采用变长操作码,操作码位数可能是5位到十几位不等

题号: 27
分数: 得 10 分,满分 10 分
问题: 以下关于各类控制转移指令的叙述中,错误的是( )
你的答案:
1、 调用指令(CALL)和返回指令(RET)都是特殊的无条件转移指令
2、 条件转移指令(Jcc)的判断条件可用于整数之间和浮点数之间的大小比较 :你选择了他
3、 条件转移指令(Jcc) 将根据EFLAGS寄存器中的标志信息进行条件判断
4、 无条件转移指令(JMP) 直接将转移目标地址送到EIP寄存器中

题号: 28
分数: 得 0 分,满分 10 分
问题: 4.指令集体系结构(ISA) 是计算机系统中必不可少的一个抽象层,它是对硬件的抽象,软件通过它所规定的指令系统规范来使用硬件。
以下有关ISA的叙述中,错误的是( )
你的答案:
1、 ISA规定了指令的操作数类型、寄存器结构、存储空间大小、编址方式和大端/小端方式 :你选择了他
2、 ISA规定了指令获取操作数的方式,即寻址方式
3、 ISA规定了所有指令的集合,包括指令格式和操作类型
4、 ISA规定了执行每条指令时所包含的控制信号 1

题号: 29
分数: 得 0 分,满分 10 分
问题: 程序P中有两个unsigned类型变量i和j,被分别分配在寄存器EAX和EDX中,P中存在以下if语句: if (i 该if语句对应的指令序列一定不会是( )。
你的答案:
1、 cmpl %edx, %eax jb 8048460
i-j<0
2、 cmpl %eax, %edx ja 8048380 :你选择了他
j-i>0
3、 cmpl %eax, %edx jae 8048480 1
j-i >=0
4、 cmpl %eax, %edx Jbe 804847c
j-i <=0

题号: 30
分数: 得 0 分,满分 10 分
问题: 以下关于IA-32的定点寄存器组织的叙述中,错误的是( )。
你的答案:
https://www.cnblogs.com/nonlinearthink/p/11809347.html
1、 EIP/IP为指令指针寄存器,即PC; EFLAGS/FLAGS 为标志寄存器
2、 每个通用寄存器都可作为32位、16 位或8位寄存器使用 1 esp ebp 不行
3、 寄存器ESP/SP称为栈指针寄存器, EBP/BP 称为基址指针寄存器 :你选择了他
4、 寄存器EAX/AX/AL称为累加器,ECX/CX/CL称为计数寄存器

题号: 31
分数: 得 10 分,满分 10 分
问题: 假设P为调用过程,Q为被调用过程,程序在IA-32处理器上执行,以下有关过程调用的叙述中,错误的是( )、
你的答案:
1、 从P跳转到Q执行应使用CALL指令
2、 从P传到Q的实参无需重新分配空间存放 :你选择了他
3、 从Q跳回到P执行应使用RET指令
4、 C语言程序中的函数调用就是过程调用

题号: 32
分数: 得 10 分,满分 10 分
问题: IA-32中指令“movl 8(%edx, %esi, 4), %edx"的功能是( )
你的答案:
1、 R[edx]←M[R[edx]+R[esi]*4+8] :你选择了他
2、 M[R[edx]+R[esi]*4+8]← R[edx]
3、 R[edx]←M[R[esi]+R[edx]*4+8]
4、 M[R[esi]+R[edx]*4+8]←R[edx]

题号: 33
分数: 得 10 分,满分 10 分
问题: 假设R[eax]=FF000008H, R[ecx]=00001000H,执行指令“ testl %eax, %ecx”后,寄存器的内容和标志变为( ) 。
你的答案:
1、 寄存器内容不变,OF=CF=SF=0, ZF=1 :你选择了他
2、 R[ecx]=00000000H,OF=CF=SF=0,ZF=1
3、 R[eax]=00000000H,OF=CF=SF=0, ZF=1
4、 R[ecx]=0000000H,标志不变

题号: 34
分数: 得 10 分,满分 10 分
问题: 假定局部数组a的声明为int a[4)={0,-1, 300, 20},a的首地址为R[ebp]-16,则在地址R[ebp]- 4处存放的是( )。
你的答案:
1、 0
2、 20 :你选择了他
3、 300
4、 -1

题号: 35
分数: 得 10 分,满分 10 分
问题: 以下关于1A-32处理器对齐方式的叙述中,错误的是( )。
你的答案:
1、 不同操作系统采用的对齐策略可能不同
2、 对于同-一个struct型变量,在不同对齐方式下可能会占用不同大小的存储区
3、 可以用编译指导语句(如tpragma pack)设置对齐方式
4、 总是按其数据宽度进行对齐,例如double型变量的地址总是8的倍数 :你选择了他

题号: 36
分数: 得 10 分,满分 10 分
问题: 以下关于 IA-32指令寻址方式的叙述中,错误的是( )。
你的答案:
1、 存储器操作数中最复杂的寻址方式是“ 基址加比例变址加位移”
2、 操作数可以是指令中的立即数,也可以是通用寄存器或存储单元中的内容
3、 对于寄存器操作数,必须在指令中给出通用寄存器的3位编号
4、 相对寻址的目标地址为“PC 内容加位移”,PC内容指当前正在执行指令的地址 :你选择了他

题号: 37
分数: 得 10 分,满分 10 分
问题: 假定全局double型数组a的起始地址为0x804908c,则a[i]的地址是( )
你的答案:
1、 0x804908c+2i
2、 0x804908c+8
i :你选择了他
3、 0x804908c+i
4、 0x804908c+4* i

题号: 38
分数: 得 10 分,满分 10 分
问题: 假设P为调用过程,Q为被调用过程,程序在IA-32处理器上执行,以下是C语言程序中过程调用所涉及的操作:①过程Q保存P的现场,并为非静态局部变量分配空间②过程P将实参存放到Q能访问到的地方③过程P将返回地址存放到特定处,并跳转到Q执行④过程Q取出返回地址,并跳转回到过程P执行⑤过程Q恢复P的现场,并释放局部变量所占空间⑥执行过程Q的函数体过程调用的正确执行步骤是( )
你的答案:
1、 ②→③→④→①→⑤→⑥
2、 ②→③→①→④→⑥→⑤
3、 ②→③→①→⑥→⑤→④ :你选择了他
4、 ②→③→①→⑤→⑥→④

题号: 39
分数: 得 0 分,满分 10 分
问题: 假定int型数组a的首址在 ECX中,i在EDX中, 则“&a[i]-a 送EAX"所对应的汇编指令是( )。
你的答案:
a +i -a ==i
1、 leal ( ,%edx, 4), %eax :你选择了他
2、 leal ( ,%ecx, 4), %eax
3、 movl %ecx, %eax
4、 movl %edx, %eax 1

题号: 40
分数: 得 10 分,满分 10 分
问题: 以下选项中,不属于指令集体系结构名称的是( )
你的答案:
1、 ARM
2、 MIPS
3、 UNIX :你选择了他
4、 IA-32

题号: 41
分数: 得 10 分,满分 10 分
问题: 以下关于循环结构语句的机器级代码表示的叙述中,错误的是( )。
你的答案:
1、 不一定包含无条件转移指令
2、 循环体内执行的指令不包含条件转移指令 :你选择了他
3、 一定至少包含-一 条条件转移指令
4、 循环结束条件通常用一条比较指令CMP来实现

题号: 42
分数: 得 10 分,满分 10 分
问题: IA-32中指令“popl %ebp"的功能是( )。
你的答案:
1、 R[esp]←R[esp]+4, R[ebp] ←M[R[esp]]
2、 R[ebp]←M[R[esp]], R[esp] ←R[esp]+4 :你选择了他
3、 R[esp]←R[esp]-4, R[ebp] ←M[R[esp]]
4、 R[ebp]←M[R[esp]], R[esp] ←R[esp]-4

题号: 43
分数: 得 0 分,满分 10 分
问题: 以下关于switch语句的机器级代码表示的叙述中,错误的是( )。
你的答案:
1、 当case中出现的条件取值范围较小时,可以用跳转表的方式实现
http://www.dingzhigongjiao.cn/q-215356.html
2、 每个case至少对应一条条件转移指令,因而一定会包含多条条件转移指令 1 猜测是如果只有一个case 就只有一个了 只是猜测
3、 每个case对应的一段代码结束后,都会有一条无条件转移指令
4、 可以用连续的if ~ else ~ if ~ else ~ if……语句对应的机器代码来实现switch语句 :你选择了他

题号: 44
分数: 得 10 分,满分 10 分
问题: 假定int型数组a的首址在ECX中,i在EDX中,则“*(a+i)送EAX"所对应的汇编指令是( )。
你的答案:
1、 leal (%edx, %ecx, 4), %eax
2、 leal (%ecx, %edx, 4),%eax
3、 movl (%ecx, %edx, 4), %eax :你选择了他
4、 movl (%edx, %ecx, 4), %eax

题号: 45
分数: 得 10 分,满分 10 分
问题: 以下有关IA-32的过程调用方式的叙述中,错误的是( )。
你的答案:
1、 入口参数使用栈(stack)传递,即所传递的实参被分配在栈中
2、 返回地址是CALL指令下一条指令的地址,被保存在栈中
3、 EBX、ESI、 EDI、 EBP和ESP都是被调用者保存寄存器 :你选择了他
4、 EAX、ECX和EDX都是调用者保存寄存器

你可能感兴趣的:(计算机系统原理)