MOOC 计算机系统基础(一):程序的表示、转换与链接-南京大学 中国大学慕课答案_第1页
MOOC 计算机系统基础(一):程序的表示、转换与链接-南京大学 中国大学慕课答案_第2页
MOOC 计算机系统基础(一):程序的表示、转换与链接-南京大学 中国大学慕课答案_第3页
MOOC 计算机系统基础(一):程序的表示、转换与链接-南京大学 中国大学慕课答案_第4页
MOOC 计算机系统基础(一):程序的表示、转换与链接-南京大学 中国大学慕课答案_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MOOC计算机系统基础(一):程序的表示、转换与链接-南京大学中国大学慕课答案第一周小测验1、问题:以下有关冯.诺依曼结构思想的叙述中,错误的是()。选项:A、计算机由运算器、存储器、控制器和I/O设备组成B、程序由指令构成,计算机能自动执行程序中一条一条指令C、指令和数据都放在存储器中,两者在形式上有差别D、计算机内部以二进制形式表示指令和数据正确答案:【指令和数据都放在存储器中,两者在形式上有差别】2、问题:以下有关指令以及指令执行过程的叙述中,错误的是()。选项:A、指令由操作码和操作数或操作数的地址码构成B、CPU中的控制器对指令操作码进行译码C、指令中指定的操作数只能是存放在存储器中的数据D、将要执行的下条指令的地址总是在程序计数器PC中正确答案:【指令中指定的操作数只能是存放在存储器中的数据】3、问题:以下有关编程语言的叙述中,错误的是()。选项:A、不能直接用机器语言(机器指令)编写程序B、用高级编程语言编写程序比用汇编语言更方便C、汇编语言和机器语言都与计算机系统结构相关D、计算机不能直接执行高级语言程序和汇编语言程序正确答案:【不能直接用机器语言(机器指令)编写程序】4、问题:以下有关机器指令和汇编指令的叙述中,错误的是()。选项:A、机器指令和汇编指令一一对应,功能相同B、?机器指令和汇编指令都能被计算机直接执行C、汇编指令中用符号表示操作码和地址码D、?汇编指令中用十进制或十六进制表示立即数正确答案:【?机器指令和汇编指令都能被计算机直接执行】5、问题:以下有关使用高级编程语言编写和开发软件的叙述中,错误的是()。选项:A、须有一个翻译或转换程序,即编译器或解释器B、须有一套工具软件或集成开发环境,即语言处理系统C、须程序员在应用程序中直接控制外设进行输入/输出D、须有程序员与计算机交互的用户接口,即GUI或CUI正确答案:【须程序员在应用程序中直接控制外设进行输入/输出】6、问题:一个完整的计算机系统包括硬件和软件。软件又分为()。选项:A、操作系统和语言处理程序B、系统软件和应用软件C、操作系统和高级语言D、低级语言程序和高级语言程序正确答案:【系统软件和应用软件】7、问题:以下给出的软件中,属于系统软件的是()。选项:A、WindowsXPB、MSWordC、金山词霸D、RealPlayer正确答案:【WindowsXP】8、问题:以下有关指令集体系结构的叙述中,错误的是()。选项:A、指令集体系结构位于计算机软件和硬件的交界面上B、指令集体系结构是指低级语言程序员所看到的概念结构和功能特性C、通用寄存器的长度、功能与编号不属于指令集体系结构的内容D、指令集体系结构的英文缩写是ISA正确答案:【通用寄存器的长度、功能与编号不属于指令集体系结构的内容】9、问题:以下有关计算机系统层次结构的叙述中,错误的是()。?选项:A、最上层是提供给最终用户使用的应用程序(软件)层B、应用程序员工作在指令集体系结构层,需要对底层很熟悉?C、ISA是对硬件的抽象,软件通过ISA使用硬件提供的功能D、OS是对ISA和硬件的抽象,程序员通过OS使用系统资源正确答案:【应用程序员工作在指令集体系结构层,需要对底层很熟悉?】10、问题:以下术语中,不属于计算机中硬件(即物理上实际存在的部件)的是()。选项:A、算术逻辑部件B、指令字C、程序计数器(PC)D、数据通路正确答案:【指令字】第二周小测验1、问题:108对应的十六进制形式是()。?选项:A、6CHB、?B4HC、5CH?D、63H正确答案:【6CH】2、问题:–1029的16位补码用十六进制表示为()。选项:A、0405HB、7BFBHC、?8405HD、FBFBH?正确答案:【FBFBH?】3、问题:考虑以下C语言代码:shortsi=–8196;unsignedshortusi=si;执行上述程序段后,usi的值是()。选项:A、8196B、34572C、57339D、57340正确答案:【57340】4、问题:考虑以下C语言代码:shortsi=–32768;unsignedshortusi=si;执行上述程序段后,usi的值是()。选项:A、?–32768B、32768?C、65535D、65536?正确答案:【32768?】5、问题:考虑以下C语言代码:unsignedshortusi=65535;shortsi=usi;执行上述程序段后,si的值是()。选项:A、?65535B、–65535C、–1D、1正确答案:【–1】6、问题:在ISOC90标准下执行以下关系表达式,结果为“真”的是()。选项:A、–10UB、2147483647–2147483648C、(unsigned)–1–2D、2147483647(int)2147483648U正确答案:【(unsigned)–1–2】7、问题:–1028采用IEEE754单精度浮点数格式表示的结果(十六进制形式)是()。选项:A、44808000HB、C4808000HC、44C04000HD、C4C04000H正确答案:【C4808000H】8、问题:假定变量i、f的数据类型分别是int、float。已知i=12345,f=1.2345e3,则在一个32位机器中执行下列表达式时,结果为“假”的是()。选项:A、i==(int)(float)iB、i==(int)(double)iC、f==(float)(int)fD、f==(float)(double)f正确答案:【f==(float)(int)f】9、问题:假定某计算机按字节编址,采用小端方式,有一个float型变量x的地址为0xffffc000,x=12345678H,则在内存单元0xffffc001中存放的内容是()。选项:A、0001001000110100BB、00110100B?C、01010110B?D、?0101B正确答案:【01010110B?】10、问题:下面是关于计算机中存储器容量单位的叙述,其中错误的是()。选项:A、最小的计量单位为位(bit),表示一位“0”或“1”B、最基本的计量单位是字节(Byte),一个字节等于8bitC、一台计算机的编址单位、指令字长和数据字长都一样,且是字节的整数倍D、“主存容量为1KB”的含义是指主存中能存放1024个字节的二进制信息正确答案:【一台计算机的编址单位、指令字长和数据字长都一样,且是字节的整数倍】第三周小测验1、问题:CPU中能进行算术运算和逻辑运算的最基本运算部件是()。选项:A、多路选择器B、移位器C、加法器D、ALU正确答案:【ALU】2、问题:ALU有一个操作控制端ALUop,ALU在ALUop的控制下执行相应的运算。以下给出的运算中,()运算不能由ALUop直接控制完成。选项:A、加法和减法B、乘法和除法?C、与、或、非等逻辑运算D、传送(ALU输入直送为输出)正确答案:【乘法和除法?】3、问题:假设变量x的位数为n(n=8),x的最低有效字节不变,其余各位全变为0,则对应C语言表达式为()。选项:A、x0xFFB、x|0xFFC、x^0xFFD、x|~0xFF正确答案:【x0xFF】4、问题:假设变量x的位数为n(n=8),x的最高有效字节不变,其余各位全变为0,则对应C语言表达式为()。选项:A、?(x(n-8))(n-8)B、((x0xFF)(n-8))(n-8)?C、(x(n-8))(n-8)D、((x0xFF)(n-8))(n-8)正确答案:【(x(n-8))(n-8)】5、问题:考虑以下C语言代码:shortsi=–8196;inti=si;执行上述程序段后,i的机器数表示为()。选项:A、0000DFFCHB、FFFF9FFCHC、FFFFDFFCHD、00009FFCH正确答案:【FFFFDFFCH】6、问题:若在一个8位整数加/减运算器中完成x–y的运算,已知带符号整数x=–69,y=–38,则加法器的两个输入端和输入的低位进位分别为()。选项:A、10111011、11011010、0B、10111011、11011010、1C、10111011、00100101、1D、10111011、00100110、1正确答案:【10111011、00100101、1】7、问题:若在一个8位整数加/减运算器中完成x+y的运算,已知无符号整数x=69,y=38,则加法器的两个输入端和输入的低位进位分别为()。选项:A、01000101、00100110、0B、01000101、00100110、1C、01000101、11011010、0D、01000101、11011010、1正确答案:【01000101、00100110、0】8、问题:若在一个8位整数加/减运算器中完成x+y的运算,已知x=63,y=–31,则x+y的机器数及相应的溢出标志OF分别是()。选项:A、1FH、0B、20H、0C、1FH、1D、20H、1正确答案:【20H、0】9、问题:若在一个8位整数加/减运算器中完成x+y的运算,假定变量x和y的机器数用补码表示为[x]补=F5H,[y]补=7EH,则x+y的值及相应的溢出标志OF分别是()。选项:A、115、0?B、119、0C、115、1?D、119、1?正确答案:【115、0?】10、问题:若在一个8位整数加/减运算器中完成x–y的运算,假定变量x和y的机器数用补码表示为[x]补=F5H,[y]补=7EH,则x–y的值及相应的溢出标志OF分别是()。选项:A、115、0B、119、0C、115、1D、119、1正确答案:【119、1】第四周小测验1、问题:若在一个8位计算机中完成x+2y的运算,假定变量x和y的机器数用补码表示为[x]补=44H,[y]补=DCH,则x+2y的机器数及相应的溢出标志OF分别是()。选项:A、32H、0B、32H、1C、FCH、0D、FCH、1正确答案:【FCH、0】2、问题:若在一个8位计算机中完成x–2y,假定变量x和y的机器数用补码表示为[x]补=44H,[y]补=DCH,则x–2y的机器数及相应的溢出标志OF分别是(?)。选项:A、68H、0B、68H、1C、8CH、0D、8CH、1正确答案:【8CH、1】3、问题:若在一个8位计算机中完成x/2+2y,假定变量x和y的机器数用补码表示为[x]补=44H,[y]补=DCH,则x/2+2y的机器数及相应的溢出标志OF分别是()。选项:A、CAH、0B、CAH、1C、DAH、0D、DAH、1正确答案:【DAH、0】4、问题:假定变量r1和r2的机器数用8位补码表示为[r1]补=F5H,[r2]补=EEH。若将运算结果存放在一个8位寄存器中,则下列运算中会发生溢出的是()。选项:A、r1+r2B、r1–r2C、r1×r2D、r1/r2正确答案:【r1×r2】5、问题:假定整数加法指令、整数减法指令和移位指令所需时钟周期(CPI)都为1,整数乘法指令所需时钟周期为10。若x为整型变量,为了使计算64*x所用时钟周期数最少,编译器应选用的最佳指令序列为()。选项:A、1条乘法指令B、1条左移指令C、1条左移指令和1条加法指令D、两条左移指令和两条加法指令正确答案:【1条左移指令】6、问题:假定整数加法指令、整数减法指令和移位指令所需时钟周期(CPI)都为1,整数乘法指令所需时钟周期为10。若x为整型变量,为了使计算54*x所用时钟周期数最少,编译器应选用的最佳指令序列为()。选项:A、1条乘法指令B、4条左移指令和3条加法指令C、3条左移指令和两条减法指令D、两条左移指令和两条减法指令正确答案:【3条左移指令和两条减法指令】7、问题:假定整数加法指令、逻辑运算指令和移位指令所需时钟周期(CPI)都为1,整数除法指令所需时钟周期为32。若x为整型变量,为了使计算x/64所用时钟周期数最少,编译器应选用的最佳指令序列为()。选项:A、1条除法指令B、1条右移指令C、1条加法指令、1条右移指令D、两条右移指令、1条与操作指令、1条加法指令正确答案:【两条右移指令、1条与操作指令、1条加法指令】8、问题:已知float型变量用IEEE754单精度浮点格式表示,float型变量x和y的机器数分别表示为x=40E80000H,y=C2040000H,则在计算x+y时,第一步对阶操作的结果[Ex-Ey]补为()。选项:A、00000111B、00000011C、11111011D、11111101正确答案:【11111101】9、问题:对于IEEE754单精度浮点数加减运算,只要对阶时得到的两个阶之差的绝对值|ΔE|大于等于(),就无需继续进行后续处理,此时,运算结果直接取阶大的那个数。选项:A、23B、25C、127D、128正确答案:【25】10、问题:变量dx、dy和dz的声明和初始化如下:doubledx=(double)x;doubledy=(double)y;doubledz=(double)z;若float和double分别采用IEEE754单精度和双精度浮点数格式,sizeof(int)=4,则对于任意int型变量x、y和z,以下哪个关系表达式是永真的?选项:A、dx*dx=0B、(double)(float)x==dxC、dx+dy==(double)(x+y)D、(dx+dy)+dz==dx+(dy+dz)E、dx*dy*dz==dz*dy*dxF、dx/dx==dy/dy正确答案:【dx*dx=0#(dx+dy)+dz==dx+(dy+dz)】第五周小测验1、问题:以下有关指令的叙述中,错误的是()。选项:A、机器指令是用二进制表示的一个0/1序列,CPU能直接执行B、汇编指令是机器指令的符号表示,CPU能直接执行C、伪指令是由若干条机器指令构成的一个指令序列,属于软件范畴D、微指令是一条机器指令所包含的控制信号的组合,CPU能直接执行正确答案:【汇编指令是机器指令的符号表示,CPU能直接执行】2、问题:一条机器指令通常由多个字段构成。以下选项中,通常(?)不显式地包含在机器指令中。选项:A、操作码B、寻址方式C、下条指令地址D、寄存器编号正确答案:【下条指令地址】3、问题:对于运算类指令或传送类指令,需要在指令中指出操作数或操作数所在的位置。通常,指令中指出的操作数不可能出现在()中。选项:A、指令B、通用寄存器C、存储单元D、程序计数器正确答案:【程序计数器】4、问题:令集体系结构(ISA)是计算机系统中必不可少的一个抽象层,它是对硬件的抽象,软件通过它所规定的指令系统规范来使用硬件。以下有关ISA的叙述中,错误的是()。选项:A、ISA规定了所有指令的集合,包括指令格式和操作类型B、ISA规定了执行每条指令时所包含的控制信号C、ISA规定了指令获取操作数的方式,即寻址方式D、ISA规定了指令的操作数类型、寄存器结构、存储空间大小、编址方式和大端/小端方式正确答案:【ISA规定了执行每条指令时所包含的控制信号】5、问题:以下选项中,不属于指令集体系结构名称的是()。选项:A、UNIXB、IA-32C、ARMD、MIPS正确答案:【UNIX】6、问题:以下Intel微处理器中,不兼容IA-32指令集体系结构的是()。选项:A、80386和80486B、Pentium(II、III、4)C、Core(i3、i5、i7)D、Itanium和Itanium2正确答案:【Itanium和Itanium2】7、问题:以下关于IA-32指令格式的叙述中,错误的是()。选项:A、采用变长指令字格式,指令长度从一个字节到十几个字节不等B、采用变长操作码,操作码位数可能是5位到十几位不等C、指令中指出的位移量和立即数的长度可以是0、1、2或4个字节D、指令中给出的操作数所在的通用寄存器的宽度总是32位正确答案:【指令中给出的操作数所在的通用寄存器的宽度总是32位】8、问题:以下关于IA-32指令寻址方式的叙述中,错误的是()。选项:A、操作数可以是指令中的立即数、也可以是通用寄存器或存储单元中的内容B、对于寄存器操作数,必须在指令中给出通用寄存器的3位编号C、存储器操作数中最复杂的寻址方式是“基址加比例变址加位移”D、相对寻址的目标地址为“PC内容加位移”,PC内容指当前正在执行指令的地址正确答案:【相对寻址的目标地址为“PC内容加位移”,PC内容指当前正在执行指令的地址】9、问题:以下关于IA-32中整数运算指令所支持的操作数的叙述中,错误的是()。选项:A、对于加减运算指令,操作数不区分是无符号整数还是带符号整数B、对于乘除运算指令,操作数一定区分是无符号整数还是带符号整数C、除乘法指令外,其他运算指令的源操作数和目的操作数的位数相等D、参加运算的操作数可以是一个字节(8b)、一个字(16b)或双字(32b)正确答案:【除乘法指令外,其他运算指令的源操作数和目的操作数的位数相等】10、问题:以下关于IA-32的定点寄存器组织的叙述中,错误的是()。选项:A、每个通用寄存器都可作为32位、16位或8位寄存器使用B、寄存器EAX/AX/AL称为累加器,ECX/CX/CL称为计数寄存器C、寄存器ESP/SP称为栈指针寄存器,EBP/BP称为基址指针寄存器D、EIP/IP为指令指针寄存器,即PC;EFLAGS/FLAGS为标志寄存器正确答案:【每个通用寄存器都可作为32位、16位或8位寄存器使用】第六周小测验1、问题:某C语言程序中对数组变量b的声明为“intb[10][5];”,有一条for语句如下:for(i=0;i10,i++)for(j=0;j5;j++)sum+=b[i][j];假设执行到“sum+=b[i][j];”时,sum的值在EAX中,b[i][0]所在的地址在EDX中,j在ESI中,则“sum+=b[i][j];”所对应的指令(ATT格式)可以是()。选项:A、addl0(%edx,%esi,4),%eaxB、addl0(%esi,%edx,4),%eaxC、addl0(%edx,%esi,2),%eaxD、addl0(%esi,%edx,2),%eax正确答案:【addl0(%edx,%esi,4),%eax】2、问题:IA-32中指令“popl%ebp”的功能是()。选项:A、R[esp]←R[esp]-4,R[ebp]←M[R[esp]]B、R[esp]←R[esp]+4,R[ebp]←M[R[esp]]C、R[ebp]←M[R[esp]],R[esp]←R[esp]-4D、R[ebp]←M[R[esp]],R[esp]←R[esp]+4正确答案:【R[ebp]←M[R[esp]],R[esp]←R[esp]+4】3、问题:IA-32中指令“movl8(%edx,%esi,4),%edx”的功能是()。选项:A、M[R[edx]+R[esi]*4+8]←R[edx]B、M[R[esi]+R[edx]*4+8]←R[edx]C、R[edx]←M[R[edx]+R[esi]*4+8]D、R[edx]←M[R[esi]+R[edx]*4+8]正确答案:【R[edx]←M[R[edx]+R[esi]*4+8]】4、问题:设SignExt[x]表示对x符号扩展,ZeroExt[x]表示对x零扩展。IA-32中指令“movswl%cx,-20(%ebp)”的功能是()。选项:A、M[R[ebp]-20]←SignExt[R[cx]]B、R[cx]←SignExt[M[R[ebp]-20]]C、M[R[ebp]-20]←ZeroExt[R[cx]]D、R[cx]←ZeroExt[M[R[ebp]-20]]正确答案:【M[R[ebp]-20]←SignExt[R[cx]]】5、问题:假设R[ax]=FFE8H,R[bx]=7FE6H,执行指令“subw%bx,%ax”后,寄存器的内容和各标志的变化为()。选项:A、R[ax]=8002H,OF=0,SF=1,CF=0,ZF=0B、R[bx]=8002H,OF=0,SF=1,CF=0,ZF=0C、R[ax]=8002H,OF=1,SF=1,CF=0,ZF=0D、R[bx]=8002H,OF=1,SF=1,CF=0,ZF=0正确答案:【R[ax]=8002H,OF=0,SF=1,CF=0,ZF=0】6、问题:假设R[eax]=0000B160H,R[ebx]=00FF0110H,执行指令“imulw%bx”后,通用寄存器的内容变化为(?)。选项:A、R[eax]=00007600H,R[dx]=FFACHB、R[eax]=FFAC7600H,其余不变C、R[eax]=00BC7600,其余不变D、R[eax]=00007600H,R[dx]=00BCH正确答案:【R[eax]=00007600H,R[dx]=FFACH】7、问题:假设short型变量x被分配在寄存器AX中,若R[ax]=FF70H,则执行指令“salw$2,%ax”后,变量x的机器数和真值分别是()。选项:A、FDC0H,-576B、FFDCH,-36C、FDC3H,-573D、3FDC,16348正确答案:【FDC0H,-576】8、问题:程序P中有两个变量i和j,被分别分配在寄存器EAX和EDX中,P中语句“if(ij){…}”对应的指令序列如下(左边为指令地址,中间为机器代码,右边为汇编指令):804846a39c2cmpl%eax,%edx804846c7e0djlexxxxxxxx若执行到804846a处的cmpl指令时,i=105,j=100,则jle指令执行后将会转到()处的指令执行。选项:A、8048461B、804846eC、8048479D、804847b正确答案:【804847b】9、问题:以下关于x87FPU浮点处理指令系统的叙述中,错误的是()。选项:A、提供8个80位浮点寄存器ST(0)~ST(7),采用栈结构,栈顶为ST(0)B、float、double和longdouble三种类型数据都按80位格式存放在浮点寄存器中C、float、double和longdouble型数据存入主存时,分别占32位、64位和96位D、float和double型数据从主存装入浮点寄存器时有可能发生舍入,造成精度损失正确答案:【float和double型数据从主存装入浮点寄存器时有可能发生舍入,造成精度损失】10、问题:以下关于MMX/SSE指令集的叙述中,错误的是()。选项:A、同一个微处理器同时支持IA-32指令集与MMX/SSE指令集B、MMX/SSE指令集和IA-32指令集共用同一套通用寄存器C、SSE指令是一种采用SIMD(单指令多数据)技术的数据级并行指令D、目前SSE支持128位整数运算或同时并行处理两个64位双精度浮点数正确答案:【MMX/SSE指令集和IA-32指令集共用同一套通用寄存器】第七周小测验1、问题:假设P为调用过程,Q为被调用过程,程序在IA-32处理器上执行,以下有关过程调用的叙述中,错误的是()。选项:A、C语言程序中的函数调用就是过程调用B、从P传到Q的实参无需重新分配空间存放C、从P跳转到Q执行应使用CALL指令D、从Q跳回到Q执行应使用RET指令正确答案:【从P传到Q的实参无需重新分配空间存放】2、问题:以下是有关IA-32的过程调用方式的叙述,错误的是()。选项:A、入口参数使用栈(stack)传递,即所传递的实参被分配在栈中B、返回地址是CALL指令下一条指令的地址,被保存在栈中C、EAX、ECX和EDX都是调用者保存寄存器D、EBX、ESI、EDI、EBP和ESP都是被调用者保存寄存器正确答案:【EBX、ESI、EDI、EBP和ESP都是被调用者保存寄存器】3、问题:以下是有关IA-32的过程调用所使用的栈和栈帧的叙述,错误的是()。选项:A、每进行一次过程调用,用户栈从高地址向低地址增长出一个栈帧B、从被调用过程返回调用过程之前,被调用过程会释放自己的栈帧C、只能通过将栈指针ESP作为基址寄存器来访问用户栈中的数据D、过程嵌套调用深度越深,栈中栈帧个数越多,严重时会发生栈溢出正确答案:【只能通过将栈指针ESP作为基址寄存器来访问用户栈中的数据】4、问题:以下是有关C语言程序的变量的作用域和生存期的叙述,错误的是()。选项:A、静态(static型)变量和非静态局部(auto型)变量都分配在对应栈帧中B、因为非静态局部变量被分配在栈中,所以其作用域仅在过程体内C、非静态局部变量可以和全局变量同名,是因为它们被分配在不同存储区D、不同过程中的非静态局部变量可以同名,是因为它们被分配在不同栈帧中正确答案:【静态(static型)变量和非静态局部(auto型)变量都分配在对应栈帧中】5、问题:以下是一个C语言程序代码:intadd(intx,inty){returnx+y;}intcaller(){intt1=100;intt2=200;intsum=add(t1,t2);returnsum;}以下关于上述程序代码在IA-32上执行的叙述中,错误的是()。选项:A、变量t1和t2被分配在caller函数的栈帧中B、传递参数时t1和t2的值从高地址到低地址依次存入栈中C、add函数返回时返回值存放在EAX寄存器中D、变量sum被分配在caller函数的栈帧中正确答案:【传递参数时t1和t2的值从高地址到低地址依次存入栈中】6、问题:第5题中的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函数没有使用被调用者保存寄存器正确答案:【第3条指令将栈指针ESP向高地址方向移动,以生成当前栈帧】7、问题:对于第5题的caller函数以及第6题给出的对应机器级代码,以下叙述中错误的是()。选项:A、变量t1和t2的有效地址分别为R[ebp]-12和R[ebp]-8B、变量t1所在的地址高(或大)于变量t2所在的地址C、参数t1和t2的有效地址分别为R[esp]和R[esp]+4D、参数t1所在的地址低(或小)于参数t2所在的地址正确答案:【变量t1所在的地址高(或大)于变量t2所在的地址】8、问题:以下有关递归过程调用的叙述中,错误的是()。选项:A、可能需要执行递归过程很多次,因而时间开销大B、每次递归调用都会生成一个新的栈帧,因而空间开销大C、每次递归调用在栈帧中保存的返回地址都不相同D、递归过程第一个参数的有效地址为R[ebp]+8正确答案:【每次递归调用在栈帧中保存的返回地址都不相同】9、问题:以下关于if(cond_expr)then_statementelseelse_statement选择结构对应的机器级代码表示的叙述中,错误的是()。选项:A、一定包含一条无条件转移指令B、一定包含一条条件转移指令(分支指令)C、计算cond_expr的代码段一定在条件转移指令之前D、对应then_statement的代码一定在对应else_statement的代码之前正确答案:【对应then_statement的代码一定在对应else_statement的代码之前】10、问题:以下关于循环结构语句的机器级代码表示的叙述中,错误的是()。选项:A、一定至少包含一条条件转移指令B、不一定包含无条件转移指令C、循环结束条件通常用一条比较指令CMP来实现D、循环体内执行的指令不包含条件转移指令正确答案:【循环体内执行的指令不包含条件转移指令】第八周小测验1、问题:假定全局short型数组a的起始地址为0x804908c,则a[2]的地址是()。选项:A、0x804908eB、0x8049090C、0x8049092D、0x8049094正确答案:【0x8049090】2、问题:假定全局数组a的声明为char*a[8],a的首地址为0x80498c0,i在ECX中,现要将a[i]取到EAX相应宽度的寄存器中,则所用的汇编指令是()。选项:A、mov0x80498c0(,%ecx),%ahB、mov(0x80498c0,%ecx),%ahC、mov0x80498c0(,%ecx,4),%eaxD、mov(0x80498c0,%ecx,4),%eax正确答案:【mov0x80498c0(,%ecx,4),%eax】3、问题:假定全局数组a的声明为double*a[8],a的首地址为0x80498c0,i在ECX中,现要将a[i]取到EAX相应宽度的寄存器中,则所用的汇编指令是()。选项:A、mov0x80498c0(,%ecx,4),%eax?B、mov(0x80498c0,%ecx,4),%eaxC、mov0x80498c0(,%ecx,8),%eaxD、mov(0x80498c0,%ecx,8),%eax正确答案:【mov0x80498c0(,%ecx,4),%eax?】4、问题:假定局部数组a的声明为inta[4]={0,-1,300,20},a的首地址为R[ebp]-16,则将a的首地址取到EDX的汇编指令是()。选项:A、movl-16(%ebp),%edxB、movl-16(%ebp,4),%edxC、leal-16(%ebp),%edxD、leal-16(%ebp,4),%edx正确答案:【leal-16(%ebp),%edx】5、问题:某C语言程序中有以下两个变量声明:inta[10];int*ptr=a[0];则ptr+i的值为()。选项:A、a[0]+iB、a[0]+2′iC、a[0]+4′iD、a[0]+8′i正确答案:【a[0]+4′i】6、问题:假定静态short型二维数组b的声明如下:staticshortb[2][4]={{2,9,-1,5},{3,8,2,-6}};若b的首地址为0x8049820,则按行优先存储方式下,数组元素“8”的地址是()。选项:A、0x8049825B、0x804982aC、0x8049824D、0x8049828正确答案:【0x804982a】7、问题:假定静态short型二维数组b和指针数组pb的声明如下:staticshortb[2][4]={{2,9,-1,5},{3,1,-6,2}};staticshort*pb[2]={b[0],b[1]};若b的首地址为0x8049820,则pb[1]的值是()。选项:A、0x8049820B、0x8049822C、0x8049824D、0x8049828正确答案:【0x8049828】8、问题:假定静态short型二维数组b和指针数组pb的声明如下:staticshortb[2][4]={{2,9,-1,5},{3,1,-6,2}};staticshort*pb[2]={b[0],b[1]};若b的首地址为0x8049820,则pb[1]的值是()。选项:A、0x8049830B、0x8049832C、0x8049834D、0x8049838正确答案:【0x8049834】9、问题:假定结构体类型cont_info的声明如下:structcont_info{charid[8];charname[16];unsignedpost;charaddress[100];charphone[20];};若结构体变量x初始化定义为structcont_infox={“00000010”,“ZhangS”,210022,“273longstreet,HighBuilding#3015”,“12345678”},x的首地址在EDX中,则“unsignedxpost=x.post;”对应汇编指令为()。?选项:A、movl0x24(%edx),%eaxB、movl0x18(%edx),%eaxC、leal0x24(%edx),%eaxD、leal0x18(%edx),%eax正确答案:【movl0x18(%edx),%eax】10、问题:以下是关于IA-32处理器对齐方式的叙述,其中错误的是()。选项:A、不同操作系统采用的对齐策略可能不同B、可以用编译指导语句(如C、pragmapack)设置对齐方式D、总是按其数据宽度进行对齐,例如,double型变量的地址总是8的倍数E、对于同一个struct型变量,在不同对齐方式下可能会占用不同大小的存储区正确答案:【总是按其数据宽度进行对齐,例如,double型变量的地址总是8的倍数】第九周小测验1、问题:以下有关IA-32和x86-64之间比较的叙述中,错误的是()。选项:A、IA-32的字长为32位,x86-64的字长为64位并兼容IA-32B、IA-32的通用寄存器有8个,而x86-64的通用寄存器有16个C、IA-32的通用寄存器为8/16/32位,而x86-64的通用寄存器为8/16/32/64位D、(unsigned)long型变量在IA-32和x86-64中的长度都是64位(四字)正确答案:【(unsigned)long型变量在IA-32和x86-64中的长度都是64位(四字)】2、问题:以下有关x86-64寄存器的叙述中,错误的是()。选项:A、用来存放将要执行的指令的地址的指令指针寄存器为64位的RIPB、基址寄存器和编址寄存器都可以是任意一个64位的通用寄存器C、任何浮点操作数都被分配在浮点寄存器栈(ST(0)~ST(7))中D、128位的XMM寄存器从原来IA-32中的8个增加到16个正确答案:【任何浮点操作数都被分配在浮点寄存器栈(ST(0)~ST(7))中】3、问题:以下有关x86-64对齐方式的叙述中,错误的是()。选项:A、short型数据必须按2字节边界对齐B、int、float型数据必须按4字节边界对齐C、long、double、指针型数据必须按8字节边界对齐D、longdouble型数据在内存占12字节空间(96位)正确答案:【longdouble型数据在内存占12字节空间(96位)】4、问题:以下有关x86-64传送指令的叙述中,错误的是()。选项:A、相比IA-32,增加了movq指令,可传送64位数据B、movl相当于movzlq,能将目的寄存器高32位清0C、pushq和popq分别对ESP寄存器减8和加8D、movzbq的功能是将8位寄存器内容零扩展为64位正确答案:【pushq和popq分别对ESP寄存器减8和加8】5、问题:假定变量x的类型为int,对于变量y的初始化声明“longy=(long)x;”,其对应的汇编指令是()。选项:A、movslq%edx,%raxB、movzlq%edx,%raxC、movq%rdx,%raxD、movl%edx,%eax正确答案:【movslq%edx,%rax】6、问题:假定变量x的类型为long,对于变量y的初始化声明“inty=(int)x;”,其对应的汇编指令不可能是()。选项:A、movl%edx,%eaxB、movzlq%edx,%raxC、movslq%edx,%raxD、movsql%rdx,%eax正确答案:【movsql%rdx,%eax】7、问题:以下是C语言赋值语句“x=a*b+c;”对应的x86-64汇编代码:movslq%edx,%rdxmovsbl%sil,%esiimull%edi,%esimovslq%esi,%rsileaq(%rdx,%rsi),%rax已知x、a、b和c分别在RAX、RDI、RSI和RDX对应宽度的寄存器中,根据上述汇编指令序列,推测x、a、b和c的数据类型分别为()。?选项:A、x—long,a—long,b—char,c—intB、x—long,a—int,b—char,c—intC、x—long,a—long,b—char,c—longD、x—long,a—int,b—char,c—long正确答案:【x—long,a—int,b—char,c—int】8、问题:假定long型变量t、int型变量x和short型变量y分别在RAX、RDI和RSI对应宽度寄存器中,C语言赋值语句“t=(long)(x+y);”对应的x86-64汇编指令序列不可能是()。选项:A、movswl%si,%edxaddl%edi,%edxmovslq%edx,%rax?B、movswq%si,%raxmovslq%edi,%rdxaddq%rdx,%raxC、movswq%si,%rdxleaq(%rdx,%rdi),%raxD、movswq%si,%rsimovslq%edi,%rdileaq(%rsi,%rdi),%rax正确答案:【movswq%si,%rdxleaq(%rdx,%rdi),%rax】9、问题:以下关于x86-64过程调用的叙述中,错误的是()。选项:A、前6个参数采用通用寄存器传递,其余参数通过栈传递B、在通用寄存器中传递的参数,都存放在64位寄存器中C、在栈中的参数若是基本类型,则被分配8个字节空间D、返回参数存放在RAX相应宽度的寄存器中正确答案:【在通用寄存器中传递的参数,都存放在64位寄存器中】10、问题:以下关于IA-32和x86-64指令系统比较的叙述中,错误的是()。选项:A、对于64位数据,x86-64可用一条指令处理,而IA-32需多条指令处理B、对于入口参数,x86-64可用通用寄存器传递,而IA-32需用栈来传递C、对于浮点操作数,x86-64存于128位的XMM中,而IA-32存于80位的ST(i)中D、对于返回地址,x86-64使用通用寄存器保存,而IA-32使用栈来保存正确答案:【对于返回地址,x86-64使用通用寄存器保存,而IA-32使用栈来保存】第十周小测验1、问题:以下是有关使用GCC生成C语言程序的可执行文件的叙述,其中错误的是()。选项:A、第一步预处理,对B、include、C、define、D、ifdef等预处理命令进行处理E、第二步编译,将预处理结果编译转换为二进制形式的汇编语言程序代码F、第三步汇编,将汇编语言代码汇编转换为机器指令表示的机器语言代码G、第四步链接,将多个模块的机器语言代码链接生成可执行目标程序文件正确答案:【第二步编译,将预处理结果编译转换为二进制形式的汇编语言程序代码】2、问题:以下是有关使用GCC生成C语言程序的可执行文件的叙述,其中错误的是()。选项:A、预处理的结果还是一个C语言源程序文件,属于可读的文本文件B、经过预处理、编译和汇编处理的结果是一个可重定位目标文件C、每个C语言源程序文件生成一个对应的可重定位目标文件D、只要在链接命令中指定所有的相关可重定位目标文件就能生成可执行文件正确答案:【只要在链接命令中指定所有的相关可重定位目标文件就能生成可执行文件】3、问题:以下是有关链接所带来的好处和不足的叙述,错误的是()。选项:A、使得程序员可以分模块开发程序,有利于提高大规模程序的开发效率B、使得公共函数库可以为所有程序共享使用,有利于代码重用和提高效率C、使得程序员仅需重新编译修改过的源程序模块,从而节省程序开发时间D、使得所生成的可执行目标代码中包含了更多公共库函数代码,所占空间大正确答案:【使得所生成的可执行目标代码中包含了更多公共库函数代码,所占空间大】4、问题:以下关于ELF目标文件格式的叙述中,错误的是()。选项:A、可重定位目标文件是ELF格式的链接视图,由不同的节组成B、可执行目标文件是ELF格式的执行视图,由不同的段组成C、可重定位和可执行两种目标文件中的数据都是二进制表示的补码形式D、可重定位和可执行两种目标文件中的代码都是二进制表示的指令形式正确答案:【可重定位和可执行两种目标文件中的数据都是二进制表示的补码形式】5、问题:以下关于链接器基本功能的叙述中,错误的是()。选项:A、将每个符号引用与唯一的一个符号定义进行关联B、将每个.o文件中的.data节、.text节和.bss节合并C、确定每个符号(包括全局变量和局部变量)的首地址D、根据所定义符号的首地址对符号的引用进行重定位正确答案:【确定每个符号(包括全局变量和局部变量)的首地址】6、问题:以下关于可重定位目标文件的叙述中,错误的是()。选项:A、在.text节中包含相应模块内所有机器代码B、在.data节中包含相应模块内所有变量的初始值C、在.rodata节中包含相应模块内所有只读数据D、在.rel.text节和.rel.data节中包含相应模块内所有可重定位信息正确答案:【在.data节中包含相应模块内所有变量的初始值】7、问题:以下关于ELF目标文件的ELF头的叙述中,错误的是()。选项:A、包含了ELF头本身的长度和目标文件的长度B、包含了操作系统版本和机器结构类型等信息C、包含了节头表和程序头表各自的起始位置和长度D、数据结构在可重定位和可执行两种目标文件中完全一样正确答案:【包含了ELF头本身的长度和目标文件的长度】8、问题:以下关于ELF目标文件的节头表的叙述中,错误的是()。选项:A、每个表项用来记录某个节的内容以及相关描述信息B、通过节头表可获得节的名称、类型、起始地址和长度C、描述了每个可装入节的起始虚拟地址、对齐和存取方式D、数据结构在可重定位和可执行两种目标文件中完全一样正确答案:【每个表项用来记录某个节的内容以及相关描述信息】9、问题:以下关于ELF可重定位和可执行两种目标文件格式比较的叙述中,错误的是()。选项:A、可重定位目标文件中有可重定位节.rel.text和.rel.data,而在可执行目标文件中则没有B、可重定位目标文件中有初始化程序段.init节,而在可执行目标文件中则没有C、可执行目标文件中有程序头表(段头表),而在可重定位目标文件中则没有D、可执行目标文件的ELF头中有具体程序入口地址,而在可重定位目标文件中则为0正确答案:【可重定位目标文件中有初始化程序段.init节,而在可执行目标文件中则没有】10、问题:以下关于ELF可执行目标文件的程序头表(段头表)的叙述中,错误的是()。选项:A、用于描述可执行文件中的节与主存中的存储段之间的映射关系B、通过段头表可获得可装入段或特殊段的类型、在文件中的偏移位置及长度C、描述了每个可装入段的起始虚拟地址、存储长度、存取方式和对齐方式D、.text节和.rodata节都包含在只读代码段,而.data节和.bss节都包含在读写数据段正确答案:【用于描述可执行文件中的节与主存中的存储段之间的映射关系】第十一周小测验1、问题:以下是链接过程中对符号定义的判断,其中错误的是()。选项:A、全局变量声明“intx,y;”中,x和y都是符号的定义B、全局变量声明“int*xp=x;”中,xp和x都是符号的定义C、静态局部变量声明“staticintx=*xp;”中,x是符号的定义D、函数内的局部变量声明“shortx=200;”中,x不是符号的定义正确答案:【全局变量声明“int*xp=x;”中,xp和x都是符号的定义】2、问题:若x为局部变量,xp、y和z是全局变量,则以下判断中错误的是()。选项:A、赋值语句“inty=x+z;”中,y和z都是符号的引用B、赋值语句“y=x+z;”中,y和z都是符号的引用C、静态局部变量声明“staticintx=*xp;”中,xp是符号的引用D、赋值语句“y=x+*xp;”中,y和xp都是符号的引用正确答案:【赋值语句“inty=x+z;”中,y和z都是符号的引用】3、问题:以下有关ELF目标文件的符号表的叙述中,错误的是()。选项:A、可重定位和可执行两种目标文件中都有符号表且数据结构一样B、符号表定义在.symtab节中,每个表项描述某个符号的相应信息C、通过符号表可获得符号的名称、所在节及在节中偏移地址和长度D、符号表中包含了所有定义符号的描述信息,包括局部变量的相关信息正确答案:【符号表中包含了所有定义符号的描述信息,包括局部变量的相关信息】4、问题:以下是有关链接过程中符号解析(符号绑定)的叙述,其中错误的是()。选项:A、符号解析的目的是将符号引用与某目标模块中定义的符号建立关联B、同一个符号名可能在多个模块中有定义,每个定义处的符号都须分配空间C、本地符号的解析比较简单,只要与本模块内定义的符号关联即可D、全局符号(包括外部全局符号)需将模块内的引用与模块外的定义符号绑定正确答案:【同一个符号名可能在多个模块中有定义,每个定义处的符号都须分配空间】5、问题:以下有关强符号和弱符号的符号解析的叙述中,错误的是()。选项:A、一个符号名只能有一个强符号,否则符号解析失败B、一个符号名可以有多个弱符号,任选一个为其定义C、一个符号名可以有一个强符号和多个弱符号,强符号为其定义D、一个符号名可以仅出现在引用处或仅出现在定义处正确答案:【一个符号名可以仅出现在引用处或仅出现在定义处】6、问题:以下是两个源程序文件:/*m1.c*//*m2.c*/intp1(viod);staticintmain=1;intmain()intp1(){{intp1=p1();main++;returnp1;returnmain;}}对于上述两个源程序文件链接时的符号解析,错误的是()。选项:A、在m1中,定义了一个强符号main和一个弱符号p1B、在m2中,定义了一个强符号p1和一个局部符号mainC、在m1中,对m2中定义的强符号p1的引用只有一处D、因为出现了两个强符号main,所以会发生链接错误正确答案:【因为出现了两个强符号main,所以会发生链接错误】7、问题:以下是两个源程序文件:/*m1.c*//*m2.c*/intp1;intmain=1;intmain()intp1(){{intp1=p1();intp1=main++;returnp1;returnmain;}}对于上述两个源程序文件链接时的符号解析,错误的是()。选项:A、在m1中,定义了一个强符号main和一个弱符号p1B、在m2中,定义了一个强符号p1和一个强符号mainC、在模块m1的所有语句中,对符号p1的引用一共有三处D、因为出现了两个强符号main,所以会发生链接错误正确答案:【在模块m1的所有语句中,对符号p1的引用一共有三处】8、问题:以下是两个源程序文件:/*m1.c*//*m2.c*/intx=100;floatx;intp1(viod);staticmain=1;intmain()intp1(){{x=p1();intp1=main+(int)x;returnx;returnp1;}}对于上述两个源程序文件链接时的符号解析,错误的是()。选项:A、m1中对x的两处引用都与m1中对x的定义绑定B、m2中对x的引用与m2中对x的定义绑定C、m2中的变量p1与函数p1被分配在不同存储区D、虽然x、main和p1都出现了多次定义,但不会发生链接错误正确答案:【m2中对x的引用与m2中对x的定义绑定】9、问题:以下是两个源程序文件:/*m1.c*//*m2.c*/#includestdio.hintx=100;doublex;shorty=1,z=2;intmain()voidp1(){{p1();x=-1.0;printf(“x=%d,z=%d\n”,x,z);}}上述程序执行的结果是()。提示:1074790400=2^30+2^20,16400=2^14+2^4。选项:A、x=100,z=2B、x=-1,z=2C、x=-1074790400,z=0D、x=0,z=-16400正确答案:【x=0,z=-16400】10、问题:假设调用关系如下:func.o→libx.a和liby.a中的函数,libx.a→libz.a中的函数,libx.a和liby.a之间、liby.a和libz.a相互独立,则以下几个命令行中,静态链接发生错误的命令是()。选项:A、gcc-static–omyfuncfunc.olibx.aliby.alibz.aB、gcc-static–omyfuncfunc.oliby.alibz.alibx.aC、gcc-static–omyfuncfunc.olibx.alibz.aliby.aD、gcc-static–omyfuncfunc.oliby.alibx.alibz.a正确答案:【gcc-static–omyfuncfunc.oliby.alibz.alibx.a】第十二周小测验1、问题:以下有关重定位功能的叙述中,错误的是()。选项:A、重定位的最终目标是重新确定各模块合并后每个引用所指向的目标地址B、重定位的第一步应先将相同的节合并,且将具有相同存取属性的节合并成段C、重定位的第二步是确定每个段的起始地址,并确定段内每个定义处符号的地址D、重定位的最后一步是将引用处的地址修改为与之关联(绑定)的定义处的首地址正确答案:【重定位的最后一步是将引用处的地址修改为与之关联(绑定)的定义处的首地址】2、问题:以下有关重定位信息的叙述中,错误的是()。选项:A、重定位信息是由编译器在生成汇编指令时产生的B、指令中的重定位信息在可重定位目标文件的.rel.text节中C、数据中的重定位信息在可重定位目标文件的.rel.data节中D、重定位信息包含需重定位的位置、绑定的符号和重定位类型正确答案:【重定位信息是由编译器在生成汇编指令时产生的】3、问题:假定“intbuf[2]={10,50};”所定义的buf被分配在静态数据区,其首地址为0x8048930,bufp1为全局变量,被分配在buf随后的存储空间。以下关于“int*bufp1=buf[1];”的重定位的描述中,错误的是()。选项:A、bufp1的地址为0x8048938,重定位前的内容为04H、00H、00H、00HB、在可重定位目标文件的.rel.data节中,有一个引用buf的重定位条目C、在相应的重定位条目中,对bufp1和buf的引用均采用绝对地址方式D、在可执行目标文件中,地址0x8048938开始的4个字节为34H、89H、04H、08H正确答案:【在相应的重定位条目中,对bufp1和buf的引用均采用绝对地址方式】4、问题:假定“intbuf[2]={10,50};”所定义的buf被分配在静态数据区,其首地址为0x8048930,bufp1为全局变量,也被分配在静态数据区。以下关于“bufp1=buf[1];”的重定位的描述中,错误的是()。选项:A、在可重定位目标文件的.rel.data节中,有一个与bufp1相关的重定位条目B、在可重定位目标文件的.rel.text节中,有一个与buf相关的重定位条目C、在相应的重定位条目中,对bufp1和buf的引用均采用绝对地址方式D、可用一条mov指令实现该赋值语句,该mov指令中有两处需要重定位正确答案:【在可重定位目标文件的.rel.data节中,有一个与bufp1相关的重定位条目】5、问题:以下是有关在Linux系统中启动可执行目标文件执行的叙述,其中错误的是()。选项:A、可在CUI(命令行用户界面)中双击可执行目标文件对应的图标来启动其执行B、可在CUI(命令行用户界面)中的命令行提示符后输入对应的命令来启动其执行C、可以通过在一个程序中调用execve()系统调用函数来启动可执行文件执行D、不管是哪种启动执行方式,最终都是通过调用execve()系统调用函数实现的正确答案:【可在CUI(命令行用户界面)中双击可执行目标文件对应的图标来启动其执行】6、问题:以下是有关在Linux系统中加载可执行目标文件的叙述,其中错误的是()。选项:A、可执行目标文件的加载通过execve()函数调用的加载器来完成B、加载器通过可执行目标文件中的程序头表对可装入段进行加载C、在可执行目标文件的加载过程中,其中的指令和数据被读入主存D、任何可执行目标文件中的可装入段被映射到一个统一的虚拟地址空间正确答案:【在可执行目标文件的加载过程中,其中的指令和数据被读入主存】7、问题:以下是在Linux系统中启动并加载可执行目标文件过程中shell命令行解释程序所做的部分操作:①构造构造argv和envp②调用fork()系统调用函数③调用execve()系统调用函数④读入命令(可执行文件名)及参数启动并加载可执行目标文件的正确步骤是()。选项:A、①→②→③→④B、②→④→①→③C、④→①→②→③D、④→①→③→②正确答案:【④→①→②→③】8、问题:以下是有关动态链接及其所链接的共享库以及动态链接生成的可执行目标文件的叙述,其中错误的是()。选项:A、共享库在Linux下称为动态共享对象(.so),在Windows下称为动态链接库(.dll)B、生成的可执行目标文件是部分链接的,也即,其中还有部分引用没有进行重定位C、可执行目标文件由动态链接器对可重定位目标文件和共享库中部分信息进行链接而成D、可执行目标文件在加载或执行时,系统将会调出动态链接器利用共享库对其进行动态链接正确答案:【可执行目标文件由动态链接器对可重定位目标文件和共享库中部分信息进行链接而成】9、问题:以下是有关静态链接和动态链接比较的叙述,其中错误的是()。选项:A、静态库函数代码包含在进程代码段中,而共享库函数代码不包含在进程代码段中B、静态库函数代码包含在可执行目标文件中,而共享库函数代码不包含在可执行目标文件中C、静态库函数更新后需对程序重新编译和链接,而共享库函数更新后程序无需重新编译和链接D、静态链接情况下静态库函数在加载时被链接,动态链接情况下共享库函数可在加载或运行时被链接正确答案:【静态链接情况下静态库函数在加载时被链接,动态链接情况下共享库函数可在加载或运行时被链接】10、问题:一个共享库文件(.so文件)由多个模块(.o文件)生成。在生成共享库文件的过程中,需要对.o文件进行处理,以生成位置无关代码。以下有关位置无关代码(PIC)生成的叙述中,错误的是()。选项:A、模块内函数之间的调用可用PC相对地址实现,无需动态链接器进行重定位B、模块内数据的引用无需动态链接器进行重定位,因为引用与定义间相对位置固定C、模块外数据的引用需要动态链接器进行重定位,重定位时在GOT中填入外部数据的地址D、模块间函数调用需要动态链接器进行重定位,重定位时在GOT和PLT中填入相应内容正确答案:【模块间函数调用需要动态链接器进行重定位,重定位时在GOT和PLT中填入相应内容】期末考试1、问题:以下有关指令集体系结构的叙述中,错误的是()。选项:A、指令集体系结构是一种规定B、指令集体系结构是对软件的一种抽象C、指令集体系结构位于软件和硬件的交界面D、指令集体系结构在计算机系统层次中必不可少正确答案:【指令集体系结构是对软件的一种抽象】2、问题:以下有关冯?诺依曼结构思想的叙述中,错误的是()。选项:A、计算机由运算器、存储器、控制器和I/O设备组成B、程序由指令构成,计算机能自动执行程序中一条一条指令C、指令和数据都放在存储器中,两者在形式上有差别D、计算机内部以二进制形式表示指令和数据正确答案:【指令和数据都放在存储器中,两者在形式上有差别】3、问题:以下有关机器指令和汇编指令的叙述中,错误的是()。选项:A、机器指令和汇编指令一一对应,功能相同B、机器指令和汇编指令都能被计算机直接执行C、汇编指令中用符号表示操作码和地址码D、汇编指令中用十进制或十六进制表示立即数正确答案:【机器指令和汇编指令都能被计算机直接执行】4、问题:下列数中最小的数为()。选项:A、1010110BB、73OC、66DD、3FH正确答案:【73O】5、问题:考虑以下C语言代码:unsignedshortusi=65530;shortsi=usi;执行上述程序段后,si的值是()。选项:A、65530B、–65530C、–5D、–6正确答案:【–6】6、问题:在ISOC90标准下执行以下关系表达式,结果为“真”的是()。选项:A、–10UB、2147483647–2147483648C、(unsigned)–1–2D、2147483647(int)2147483648U正确答案:【(unsigned)–1–2】7、问题:已知IA-32采用小端方式,有一个IA-32机器中的可执行文件反汇编后得到的机器级表示如下,其中左边冒号前为指令地址,中间为机器指令,右边为汇编指令。……80483d2:81ec10010000sub$0x110,%esp……80483de:8b8501ffffffmov0xffffff01(%ebp),%eax上述划线部分表示的立即数的值分别是()。选项:A、268435456,33554432B、272,–255C、268435456,–255D、272,33554432正确答案:【272,–255】8、问题:–1.0625采用IEEE754单精度浮点数格式表示的结果(十六进制形式)是()。选项:A、3F880000HB、BF880000HC、40080000HD、C0080000H正确答案:【BF880000H】9、问题:假定某数采用IEEE754单精度浮点数格式表示为C8200000H,则该数的值是()。选项:A、–1.01×2^17B、–1.01×2^144C、–1.25×2^17D、–1.25×2^144正确答案:【–1.25×2^17】10、问题:假定某数采用IEEE754单精度浮点数格式表示为00000001H,则该数的值是()。选项:A、1.0×2^(-149)B、1.0×2^(-150)C、1.00…01×2^(-127)D、NaN(非数)正确答案:【1.0×2^(-149)】11、问题:若int型变量x的最高有效字节全变0,其余各位不变,则对应C语言表达式为()。选项:A、(x8)8B、(x8)8C、((unsigned)x8)8D、((unsigned)x8)8正确答案:【((unsigned)x8)8】12、问题:假定整数加法指令、整数减法指令和移位指令所需时钟周期都为1,整数乘法指令所需时钟周期为8。若x为整型变量,为了使计算36*x所用时钟周期数最少,编译器应选用的最佳指令序列为()。选项:A、1条乘法指令B、两条左移指令和1条加法指令C、4条左移指令和3条减法指令D、3条左移指令和两条加法指令正确答案:【两条左移指令和1条加法指令】13、问题:某C语言程序中对数组变量b的声明为“shortb[10][5];”,sum为int型,有一条for语句如下:for(i=0;i10,i++)for(j=0;j5;j++)sum+=b[i][j];假设执行到“sum+=b[i][j];”时,sum的值在EAX中,b[i][0]所在的地址在ECX中,j在EDI中,则“sum+=b[i][j];”所对应的指令或指令序列(ATT格式)可以是()。选项:A、addl0(%edi,%ecx,2),%eaxB、addl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论