计算机系统概论答案-中国大学慕课
您已经看过
[清空]
    fa-home|fa-star-o

    image.png

    当前位置:超星尔雅通识课题库答案>中国大学慕课答案查询>计算机系统概论答案-中国大学慕课

    计算机系统概论答案-中国大学慕课

    网课查题公众号

    第一周 计算机系统概述

    第一周小测验

    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、Windows XP
        B、MS Word
        C、金山词霸
        D、RealPlayer



    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、6CH
        B、B4H
        C、5CH
        D、63H



    2、–1029的16位补码用十六进制表示为( )。
        A、0405H
        B、7BFBH
        C、8405H
        D、FBFBH



    3、考虑以下C语言代码: short si=–8196; unsigned short usi=si; 执行上述程序段后,usi的值是( )。
        A、8196
        B、34572
        C、57339
        D、57340



    4、考虑以下C语言代码: short si=–32768; unsigned short usi=si; 执行上述程序段后,usi的值是( )。
        A、–32768
        B、32768
        C、65535
        D、65536



    5、考虑以下C语言代码: unsigned short usi=65535; short si=usi; 执行上述程序段后,si的值是( )。
        A、65535
        B、–65535
        C、–1
        D、1



    6、在ISO C90标准下执行以下关系表达式,结果为“真”的是( )。
        A、–1 < 0U
        B、2147483647 > –2147483648
        C、(unsigned) –1 > –2
        D、2147483647 < (int) 2147483648U



    7、–1028采用IEEE 754单精度浮点数格式表示的结果(十六进制形式)是( )。
        A、44808000H
        B、C4808000H
        C、44C04000H
        D、C4C04000H



    8、假定变量i、f的数据类型分别是int、float。已知i=12345,f=1.2345e3,则在一个32位机器中执行下列表达式时,结果为“假”的是( )。
        A、i==(int)(float)i
        B、i==(int)(double)i
        C、f==(float)(int)f
        D、f==(float)(double)f



    9、假定某计算机按字节编址,采用小端方式,有一个float型变量x的地址为0xffffc000,x=12345678H,则在内存单元0xffffc001中存放的内容是( )。
        A、0001001000110100B
        B、00110100B
        C、01010110B
        D、0101B



    10、下面是关于计算机中存储器容量单位的叙述,其中错误的是( )。
        A、最小的计量单位为位(bit),表示一位“0”或“1”
        B、最基本的计量单位是字节(Byte),一个字节等于8bit
        C、一台计算机的编址单位、指令字长和数据字长都一样,且是字节的整数倍
        D、“主存容量为1KB”的含义是指主存中能存放1024个字节的二进制信息



    第三周 运算电路基础

    第三周小测验

    1、CPU中能进行算术运算和逻辑运算的最基本运算部件是( )。
        A、多路选择器
        B、移位器
        C、加法器
        D、ALU



    2、ALU有一个操作控制端ALUop,ALU在ALUop的控制下执行相应的运算。以下给出的运算中,( )运算不能由ALUop直接控制完成。
        A、加法和减法
        B、乘法和除法
        C、与、或、非等逻辑运算
        D、传送(ALU输入直送为输出)



    3、假设变量x的位数为n(n>=8),x的最低有效字节不变,其余各位全变为0,则对应C语言表达式为( )。
        A、x & 0xFF
        B、x | 0xFF
        C、x ^ 0xFF
        D、x | ~ 0xFF



    4、假设变量x的位数为n(n>=8),x的最高有效字节不变,其余各位全变为0,则对应C语言表达式为( )。
        A、(x<<(n-8))>>(n-8)
        B、((x&0xFF)<<(n-8))>>(n-8)
        C、(x>>(n-8))<<(n-8)
        D、((x&0xFF)>>(n-8))<<(n-8)



    5、考虑以下C语言代码: short si = –8196; int i = si; 执行上述程序段后,i的机器数表示为( )。
        A、0000 DFFCH
        B、FFFF 9FFCH
        C、FFFF DFFCH
        D、0000 9FFCH



    6、若在一个8位整数加/减运算器中完成x–y的运算,已知带符号整数x=–69,y=–38,则加法器的两个输入端和输入的低位进位分别为( )。
        A、1011 1011、1101 1010、0
        B、1011 1011、1101 1010、1
        C、1011 1011、0010 0101、1
        D、1011 1011、0010 0110、1



    7、若在一个8位整数加/减运算器中完成x+y的运算,已知无符号整数x=69,y=38,则加法器的两个输入端和输入的低位进位分别为( )。
        A、0100 0101、0010 0110、0
        B、0100 0101、0010 0110、1
        C、0100 0101、1101 1010、0
        D、0100 0101、1101 1010、1



    8、若在一个8位整数加/减运算器中完成x+y的运算,已知x=63,y= –31,则x+y的机器数及相应的溢出标志OF分别是( )。
        A、1FH、0
        B、20H、0
        C、1FH、1
        D、20H、1



    9、若在一个8位整数加/减运算器中完成x+y的运算,假定变量x和y的机器数用补码表示为[x]补=F5H,[y]补=7EH,则x+y的值及相应的溢出标志OF分别是( )。
        A、115、0
        B、119、0
        C、115、1
        D、119、1



    10、若在一个8位整数加/减运算器中完成x–y的运算,假定变量x和y的机器数用补码表示为[x]补=F5H,[y]补=7EH,则x–y的值及相应的溢出标志OF分别是( )。
        A、115、0
        B、119、0
        C、115、1
        D、119、1



    第四周 乘除运算及浮点数运算

    第四周小测验

    1、若在一个8位计算机中完成x+2y的运算,假定变量x和y的机器数用补码表示为[x]补=44H,[y]补= DCH,则x+2y的机器数及相应的溢出标志OF分别是( )。
        A、32H、0
        B、32H、1
        C、FCH、0
        D、FCH、1



    2、若在一个8位计算机中完成x–2y,假定变量x和y的机器数用补码表示为[x]补=44H,[y]补= DCH,则x–2y的机器数及相应的溢出标志OF分别是( )。
        A、68H、0
        B、68H、1
        C、8CH、0
        D、8CH、1



    3、若在一个8位计算机中完成x/2+2y,假定变量x和y的机器数用补码表示为[x]补=44H,[y]补= DCH,则x/2+2y的机器数及相应的溢出标志OF分别是( )。
        A、CAH、0
        B、CAH、1
        C、DAH、0
        D、DAH、1



    4、假定变量r1 和r2的机器数用8位补码表示为[r1]补=F5H,[r2]补=EEH。若将运算结果存放在一个8位寄存器中,则下列运算中会发生溢出的是( )。
        A、r1+ r2
        B、r1– r2
        C、r1× r2
        D、r1/r2



    5、假定整数加法指令、整数减法指令和移位指令所需时钟周期(CPI)都为1,整数乘法指令所需时钟周期为10。若x为整型变量,为了使计算64*x所用时钟周期数最少,编译器应选用的最佳指令序列为( )。
        A、1条乘法指令
        B、1条左移指令
        C、1条左移指令和1条加法指令
        D、两条左移指令和两条加法指令



    6、假定整数加法指令、整数减法指令和移位指令所需时钟周期(CPI)都为1,整数乘法指令所需时钟周期为10。若x为整型变量,为了使计算54*x所用时钟周期数最少,编译器应选用的最佳指令序列为( )。
        A、1条乘法指令
        B、4条左移指令和3条加法指令
        C、3条左移指令和两条减法指令
        D、两条左移指令和两条减法指令



    7、假定整数加法指令、逻辑运算指令和移位指令所需时钟周期(CPI)都为1,整数除法指令所需时钟周期为32。若x为整型变量,为了使计算x/64所用时钟周期数最少,编译器应选用的最佳指令序列为( )。
        A、1条除法指令
        B、1条右移指令
        C、1条加法指令、1条右移指令
        D、两条右移指令、1条与操作指令、1条加法指令



    8、已知float型变量用IEEE 754单精度浮点格式表示,float型变量x和y的机器数分别表示为x=40E8 0000H,y=C204 0000H,则在计算x+y时,第一步对阶操作的结果[Ex-Ey]补为( )。
        A、0000 0111
        B、0000 0011
        C、1111 1011
        D、1111 1101



    9、对于IEEE 754单精度浮点数加减运算,只要对阶时得到的两个阶之差的绝对值|ΔE|大于等于( ),就无需继续进行后续处理,此时,运算结果直接取阶大的那个数。
        A、23
        B、25
        C、127
        D、128



    10、变量dx、dy和dz的声明和初始化如下: double dx = (double) x; double dy = (double) y; double dz = (double) z; 若float和double分别采用IEEE 754单精度和双精度浮点数格式,sizeof(int)=4,则对于任意int型变量x、y和z,以下哪个关系表达式是永真的?
        A、dx*dx >= 0
        B、(double)(float) x == dx
        C、dx+dy == (double) (x+y)
        D、(dx+dy)+dz == dx+(dy+dz)
        E、dx*dy*dz == dz*dy*dx
        F、dx/dx == dy/dy



    第六周 IA-32指令类型

    第六周小测验

    1、某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格式)可以是( )。
        A、addl 0(%edx, %esi, 4), %eax
        B、addl 0(%esi, %edx, 4), %eax
        C、addl 0(%edx, %esi, 2), %eax
        D、addl 0(%esi, %edx, 2), %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]-4
        D、R[ebp]←M[R[esp]],R[esp]←R[esp]+4



    3、IA-32中指令“movl 8(%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]



    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]]



    5、假设 R[ax]=FFE8H,R[bx]=7FE6H,执行指令“subw %bx, %ax”后,寄存器的内容和各标志的变化为( )。
        A、R[ax]=8002H,OF=0,SF=1,CF=0,ZF=0
        B、R[bx]=8002H,OF=0,SF=1,CF=0,ZF=0
        C、R[ax]=8002H,OF=1,SF=1,CF=0,ZF=0
        D、R[bx]=8002H,OF=1,SF=1,CF=0,ZF=0



    6、假设R[eax]=0000B160H,R[ebx]=00FF0110H,执行指令“imulw %bx”后,通用寄存器的内容变化为( )。
        A、R[eax]=00007600H,R[dx]=FFACH
        B、R[eax]=FFAC7600H,其余不变
        C、R[eax]=00BC7600,其余不变
        D、R[eax]=00007600H,R[dx]=00BCH



    7、假设short型变量x被分配在寄存器AX中,若R[ax]=FF70H,则执行指令“salw $2, %ax”后,变量x的机器数和真值分别是( )。
        A、FDC0H,-576
        B、FFDCH,-36
        C、FDC3H,-573
        D、3FDC,16348



    8、程序P中有两个变量i和j,被分别分配在寄存器EAX和EDX中,P中语句“if (i<j) { …}”对应的指令序列如下(左边为指令地址,中间为机器代码,右边为汇编指令): 804846a 39 c2 cmpl %eax, %edx 804846c 7e 0d jle xxxxxxxx 若执行到804846a处的cmpl指令时,i=105,j=100,则jle指令执行后将会转到( )处的指令执行。
        A、8048461
        B、804846e
        C、8048479
        D、804847b



    9、以下关于x87 FPU浮点处理指令系统的叙述中,错误的是( )。
        A、提供8个80位浮点寄存器ST(0)~ST(7),采用栈结构,栈顶为ST(0)
        B、float、double和long double三种类型数据都按80位格式存放在浮点寄存器中
        C、float、double和long double型数据存入主存时,分别占32位、64位和96位
        D、float和double型数据从主存装入浮点寄存器时有可能发生舍入,造成精度损失



    10、以下关于MMX/SSE指令集的叙述中,错误的是( )。
        A、同一个微处理器同时支持IA-32指令集与MMX/SSE指令集
        B、MMX/SSE指令集和IA-32指令集共用同一套通用寄存器
        C、SSE指令是一种采用SIMD(单指令多数据)技术的数据级并行指令
        D、目前SSE支持128位整数运算或同时并行处理两个64位双精度浮点数



    第五周 IA-32指令系统概述

    第五周小测验

    1、以下有关指令的叙述中,错误的是( )。
        A、机器指令是用二进制表示的一个0/1序列,CPU能直接执行
        B、汇编指令是机器指令的符号表示,CPU能直接执行
        C、伪指令是由若干条机器指令构成的一个指令序列,属于软件范畴
        D、微指令是一条机器指令所包含的控制信号的组合,CPU能直接执行



    2、一条机器指令通常由多个字段构成。以下选项中,通常( )不显式地包含在机器指令中。
        A、操作码
        B、寻址方式
        C、下条指令地址
        D、寄存器编号



    3、对于运算类指令或传送类指令,需要在指令中指出操作数或操作数所在的位置。通常,指令中指出的操作数不可能出现在( )中。
        A、指令
        B、通用寄存器
        C、存储单元
        D、程序计数器



    4、令集体系结构(ISA)是计算机系统中必不可少的一个抽象层,它是对硬件的抽象,软件通过它所规定的指令系统规范来使用硬件。以下有关ISA的叙述中,错误的是( )。
        A、ISA规定了所有指令的集合,包括指令格式和操作类型
        B、ISA规定了执行每条指令时所包含的控制信号
        C、ISA规定了指令获取操作数的方式,即寻址方式
        D、ISA规定了指令的操作数类型、寄存器结构、存储空间大小、编址方式和大端/小端方式



    5、以下选项中,不属于指令集体系结构名称的是( )。
        A、UNIX
        B、IA-32
        C、ARM
        D、MIPS



    6、以下Intel微处理器中,不兼容IA-32指令集体系结构的是( )。
        A、80386和80486
        B、Pentium (II、III、4)
        C、Core(i3、i5、i7)
        D、Itanium和Itanium 2



    7、以下关于IA-32指令格式的叙述中,错误的是( )。
        A、采用变长指令字格式,指令长度从一个字节到十几个字节不等
        B、采用变长操作码,操作码位数可能是5位到十几位不等
        C、指令中指出的位移量和立即数的长度可以是0、1、2或4个字节
        D、指令中给出的操作数所在的通用寄存器的宽度总是32位



    8、以下关于IA-32指令寻址方式的叙述中,错误的是( )。
        A、操作数可以是指令中的立即数、也可以是通用寄存器或存储单元中的内容
        B、对于寄存器操作数,必须在指令中给出通用寄存器的3位编号
        C、存储器操作数中最复杂的寻址方式是“基址加比例变址加位移”
        D、相对寻址的目标地址为“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为标志寄存器



    第八周 复杂数据类型的机器级表示

    第八周小测验

    1、假定全局short型数组a的起始地址为0x804908c,则a[2]的地址是( )。
        A、0x804908e
        B、0x8049090
        C、0x8049092
        D、0x8049094



    2、假定全局数组a的声明为char *a[8],a的首地址为0x80498c0,i 在ECX中,现要将a[i]取到EAX相应宽度的寄存器中,则所用的汇编指令是( )。
        A、mov 0x80498c0( , %ecx), %ah
        B、mov (0x80498c0, %ecx), %ah
        C、mov 0x80498c0( , %ecx, 4), %eax
        D、mov (0x80498c0, %ecx, 4), %eax



    3、假定全局数组a的声明为double *a[8],a的首地址为0x80498c0,i 在ECX中,现要将a[i]取到EAX相应宽度的寄存器中,则所用的汇编指令是( )。
        A、mov 0x80498c0( , %ecx, 4), %eax
        B、mov (0x80498c0, %ecx, 4), %eax
        C、mov 0x80498c0( , %ecx, 8), %eax
        D、mov (0x80498c0, %ecx, 8), %eax



    4、假定局部数组a的声明为int a[4]={0, -1, 300, 20},a的首地址为R[ebp]-16,则将a的首地址取到EDX的汇编指令是( )。
        A、movl -16(%ebp ), %edx
        B、movl -16(%ebp, 4), %edx
        C、leal -16(%ebp), %edx
        D、leal -16(%ebp, 4), %edx



    5、某C语言程序中有以下两个变量声明: int a[10]; int *ptr=&a[0]; 则ptr+i的值为( )。
        A、&a[0]+i
        B、&a[0]+2´i
        C、&a[0]+4´i
        D、&a[0]+8´i



    6、假定静态short型二维数组b的声明如下: static short b[2][4]={ {2, 9, -1, 5}, {3, 8, 2, -6}};若b的首地址为0x8049820,则按行优先存储方式下,数组元素“8”的地址是( )。
        A、0x8049825
        B、0x804982a
        C、0x8049824
        D、0x8049828



    7、假定静态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]的值是( )。
        A、0x8049820
        B、0x8049822
        C、0x8049824
        D、0x8049828



    8、假定静态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]的值是( )。
        A、0x8049830
        B、0x8049832
        C、0x8049834
        D、0x8049838



    9、假定结构体类型cont_info的声明如下: struct cont_info { char id[8]; char name [16]; unsigned post; char address[100]; char phone[20]; } ; 若结构体变量x初始化定义为struct cont_info x={“00000010”, “ZhangS”, 210022, “273 long street, High Building #3015”, “12345678”},x的首地址在EDX中,则“unsigned xpost=x.post;”对应汇编指令为( )。
        A、movl 0x24(%edx), %eax
        B、movl 0x18(%edx), %eax
        C、leal 0x24(%edx), %eax
        D、leal 0x18(%edx), %eax



    10、以下是关于IA-32处理器对齐方式的叙述,其中错误的是( )。
        A、不同操作系统采用的对齐策略可能不同
        B、可以用编译指导语句(如#pragma pack)设置对齐方式
        C、总是按其数据宽度进行对齐,例如,double型变量的地址总是8的倍数
        D、对于同一个struct型变量,在不同对齐方式下可能会占用不同大小的存储区



    第七周 C语言语句的机器级表示

    第七周小测验

    1、假设P为调用过程,Q为被调用过程,程序在IA-32处理器上执行,以下有关过程调用的叙述中,错误的是( )。
        A、C语言程序中的函数调用就是过程调用
        B、从P传到Q的实参无需重新分配空间存放
        C、从P跳转到Q执行应使用CALL指令
        D、从Q跳回到Q执行应使用RET指令



    2、以下是有关IA-32的过程调用方式的叙述,错误的是( )。
        A、入口参数使用栈(stack)传递,即所传递的实参被分配在栈中
        B、返回地址是CALL指令下一条指令的地址,被保存在栈中
        C、EAX、ECX和EDX都是调用者保存寄存器
        D、EBX、ESI、EDI、EBP和ESP都是被调用者保存寄存器



    3、以下是有关IA-32的过程调用所使用的栈和栈帧的叙述,错误的是( )。
        A、每进行一次过程调用,用户栈从高地址向低地址增长出一个栈帧
        B、从被调用过程返回调用过程之前,被调用过程会释放自己的栈帧
        C、只能通过将栈指针ESP作为基址寄存器来访问用户栈中的数据
        D、过程嵌套调用深度越深,栈中栈帧个数越多,严重时会发生栈溢出



    4、以下是有关C语言程序的变量的作用域和生存期的叙述,错误的是( )。
        A、静态(static型)变量和非静态局部(auto型)变量都分配在对应栈帧中
        B、因为非静态局部变量被分配在栈中,所以其作用域仅在过程体内
        C、非静态局部变量可以和全局变量同名,是因为它们被分配在不同存储区
        D、不同过程中的非静态局部变量可以同名,是因为它们被分配在不同栈帧中



    5、以下是一个C语言程序代码: int add(int x, int y) { return x+y; } int caller( ) { int t1=100 ; int t2=200; int sum=add(t1, t2); return sum; } 以下关于上述程序代码在IA-32上执行的叙述中,错误的是( )。
        A、变量t1和t2被分配在caller函数的栈帧中
        B、传递参数时t1和t2的值从高地址到低地址依次存入栈中
        C、add函数返回时返回值存放在EAX寄存器中
        D、变量sum被分配在caller函数的栈帧中



    6、第5题中的caller函数对应的机器级代码如下: 1 pushl %ebp 2 movl %esp, %ebp 3 subl $24, %esp 4 movl $100, -12(%ebp) 5 movl $200, -8(%ebp) 6 movl -8(%ebp), %eax 7 movl %eax, 4(%esp) 8 movl -12(%ebp), %eax 9 movl %eax, (%esp) 10 call add 11 movl %eax, -4(%ebp) 12 movl -4(%ebp), %eax 13 leave 14 ret 假定caller的调用过程为P,对于上述指令序列,以下叙述中错误的是( )。
        A、第1条指令将过程P的EBP内容压入caller栈帧
        B、第2条指令使BEP内容指向caller栈帧的底部
        C、第3条指令将栈指针ESP向高地址方向移动,以生成当前栈帧
        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、每次递归调用都会生成一个新的栈帧,因而空间开销大
        C、每次递归调用在栈帧中保存的返回地址都不相同
        D、递归过程第一个参数的有效地址为R[ebp]+8



    9、以下关于if (cond_expr) then_statement else else_statement选择结构对应的机器级代码表示的叙述中,错误的是( )。
        A、一定包含一条无条件转移指令
        B、一定包含一条条件转移指令(分支指令)
        C、计算cond_expr的代码段一定在条件转移指令之前
        D、对应then_statement的代码一定在对应else_statement的代码之前



    10、以下关于循环结构语句的机器级代码表示的叙述中,错误的是( )。
        A、一定至少包含一条条件转移指令
        B、不一定包含无条件转移指令
        C、循环结束条件通常用一条比较指令CMP来实现
        D、循环体内执行的指令不包含条件转移指令



    第十周 链接概述和目标文件格式

    第十周小测验

    1、以下是有关使用GCC生成C语言程序的可执行文件的叙述,其中错误的是( )。
        A、第一步预处理,对#include、#define、#ifdef等预处理命令进行处理
        B、第二步编译,将预处理结果编译转换为二进制形式的汇编语言程序代码
        C、第三步汇编,将汇编语言代码汇编转换为机器指令表示的机器语言代码
        D、第四步链接,将多个模块的机器语言代码链接生成可执行目标程序文件



    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节中包含相应模块内所有可重定位信息



    7、以下关于ELF目标文件的ELF头的叙述中,错误的是( )。
        A、包含了ELF头本身的长度和目标文件的长度
        B、包含了操作系统版本和机器结构类型等信息
        C、包含了节头表和程序头表各自的起始位置和长度
        D、数据结构在可重定位和可执行两种目标文件中完全一样



    8、以下关于ELF目标文件的节头表的叙述中,错误的是( )。
        A、每个表项用来记录某个节的内容以及相关描述信息
        B、通过节头表可获得节的名称、类型、起始地址和长度
        C、描述了每个可装入节的起始虚拟地址、对齐和存取方式
        D、数据结构在可重定位和可执行两种目标文件中完全一样



    9、以下关于ELF可重定位和可执行两种目标文件格式比较的叙述中,错误的是( )。
        A、可重定位目标文件中有可重定位节.rel.text和.rel.data,而在可执行目标文件中则没有
        B、可重定位目标文件中有初始化程序段.init节,而在可执行目标文件中则没有
        C、可执行目标文件中有程序头表(段头表),而在可重定位目标文件中则没有
        D、可执行目标文件的ELF头中有具体程序入口地址,而在可重定位目标文件中则为0



    10、以下关于ELF可执行目标文件的程序头表(段头表)的叙述中,错误的是( )。
        A、用于描述可执行文件中的节与主存中的存储段之间的映射关系
        B、通过段头表可获得可装入段或特殊段的类型、在文件中的偏移位置及长度
        C、描述了每个可装入段的起始虚拟地址、存储长度、存取方式和对齐方式
        D、.text节和.rodata节都包含在只读代码段,而.data节和.bss节都包含在读写数据段



    第九周 x86-64指令系统

    第九周小测验

    1、以下有关IA-32和x86-64之间比较的叙述中,错误的是( )。
        A、IA-32的字长为32位,x86-64的字长为64位并兼容IA-32
        B、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位(四字)



    2、以下有关x86-64寄存器的叙述中,错误的是( )。
        A、用来存放将要执行的指令的地址的指令指针寄存器为64位的RIP
        B、基址寄存器和编址寄存器都可以是任意一个64位的通用寄存器
        C、任何浮点操作数都被分配在浮点寄存器栈(ST(0)~ST(7))中
        D、128位的XMM寄存器从原来IA-32中的8个增加到16个



    3、以下有关x86-64对齐方式的叙述中,错误的是( )。
        A、short型数据必须按2字节边界对齐
        B、int、float型数据必须按4字节边界对齐
        C、long、double、指针型数据必须按8字节边界对齐
        D、long double型数据在内存占12字节空间(96位)



    4、以下有关x86-64传送指令的叙述中,错误的是( )。
        A、相比IA-32,增加了movq指令,可传送64位数据
        B、movl相当于movzlq,能将目的寄存器高32位清0
        C、pushq和popq分别对ESP寄存器减8和加8
        D、movzbq的功能是将8位寄存器内容零扩展为64位



    5、假定变量x的类型为int,对于变量y的初始化声明“long y=(long) x;”,其对应的汇编指令是( )。
        A、movslq %edx, %rax
        B、movzlq %edx, %rax
        C、movq %rdx, %rax
        D、movl %edx, %eax



    6、假定变量x的类型为long,对于变量y的初始化声明“int y=(int) x;”,其对应的汇编指令不可能是( )。
        A、movl %edx, %eax
        B、movzlq %edx, %rax
        C、movslq %edx, %rax
        D、movsql %rdx, %eax



    7、以下是C语言赋值语句“x=a*b+c;”对应的x86-64汇编代码: movslq %edx, %rdx movsbl %sil, %esi imull %edi, %esi movslq %esi, %rsi leaq (%rdx, %rsi), %rax 已知x、a、b和c分别在RAX、RDI、RSI和RDX对应宽度的寄存器中,根据上述汇编指令序列,推测x、a、b和c的数据类型分别为( )。
        A、x—long, a—long, b—char, c—int
        B、x—long, a—int, b—char, c—int
        C、x—long, a—long, b—char, c—long
        D、x—long, a—int, b—char, c—long



    8、假定long型变量t、int型变量x和short型变量y分别在RAX、RDI和RSI对应宽度寄存器中,C语言赋值语句“t=(long)(x+y);”对应的x86-64汇编指令序列不可能是( )。
        A、movswl %si, %edx addl %edi, %edx movslq %edx, %rax
        B、movswq %si, %rax movslq %edi, %rdx addq %rdx, %rax
        C、movswq %si, %rdx leaq (%rdx, %rdi), %rax
        D、movswq %si, %rsi movslq %edi, %rdi leaq (%rsi, %rdi), %rax



    9、以下关于x86-64过程调用的叙述中,错误的是( )。
        A、前6个参数采用通用寄存器传递,其余参数通过栈传递
        B、在通用寄存器中传递的参数,都存放在64位寄存器中
        C、在栈中的参数若是基本类型,则被分配8个字节空间
        D、返回参数存放在RAX相应宽度的寄存器中



    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使用栈来保存



    第十一周 符号及符号解析

    第十一周小测验

    1、以下是链接过程中对符号定义的判断,其中错误的是( )。
        A、全局变量声明“int x, y;”中,x和y都是符号的定义
        B、全局变量声明“int *xp=&x;”中,xp和x都是符号的定义
        C、静态局部变量声明“static int x=*xp;”中,x是符号的定义
        D、函数内的局部变量声明“short x=200;”中,x不是符号的定义



    2、若x为局部变量,xp、y和z是全局变量,则以下判断中错误的是( )。
        A、赋值语句“int y=x+z;”中,y和z都是符号的引用
        B、赋值语句“y=x+z;”中,y和z都是符号的引用
        C、静态局部变量声明“static int x=*xp;”中,xp是符号的引用
        D、赋值语句“y=x+*xp;”中,y和xp都是符号的引用



    3、以下有关ELF目标文件的符号表的叙述中,错误的是( )。
        A、可重定位和可执行两种目标文件中都有符号表且数据结构一样
        B、符号表定义在.symtab节中,每个表项描述某个符号的相应信息
        C、通过符号表可获得符号的名称、所在节及在节中偏移地址和长度
        D、符号表中包含了所有定义符号的描述信息,包括局部变量的相关信息



    4、以下是有关链接过程中符号解析(符号绑定)的叙述,其中错误的是( )。
        A、符号解析的目的是将符号引用与某目标模块中定义的符号建立关联
        B、同一个符号名可能在多个模块中有定义,每个定义处的符号都须分配空间
        C、本地符号的解析比较简单,只要与本模块内定义的符号关联即可
        D、全局符号(包括外部全局符号)需将模块内的引用与模块外的定义符号绑定



    5、以下有关强符号和弱符号的符号解析的叙述中,错误的是( )。
        A、一个符号名只能有一个强符号,否则符号解析失败
        B、一个符号名可以有多个弱符号,任选一个为其定义
        C、一个符号名可以有一个强符号和多个弱符号,强符号为其定义
        D、一个符号名可以仅出现在引用处或仅出现在定义处



    6、以下是两个源程序文件: /* m1.c */ /* m2.c */ int p1(viod); static int main=1; int main() int p1() { { int p1= p1(); main++; return p1; return main; } } 对于上述两个源程序文件链接时的符号解析,错误的是( )。
        A、在m1中,定义了一个强符号main和一个弱符号p1
        B、在m2中,定义了一个强符号p1和一个局部符号main
        C、在m1中,对m2中定义的强符号p1的引用只有一处
        D、因为出现了两个强符号main,所以会发生链接错误



    7、以下是两个源程序文件: /* m1.c */ /* m2.c */ int p1; int main=1; int main() int p1() { { int p1= p1(); int p1=main++; return p1; return main; } } 对于上述两个源程序文件链接时的符号解析,错误的是( )。
        A、在m1中,定义了一个强符号main和一个弱符号p1
        B、在m2中,定义了一个强符号p1和一个强符号main
        C、在模块m1的所有语句中,对符号p1的引用一共有三处
        D、因为出现了两个强符号main,所以会发生链接错误



    8、以下是两个源程序文件: /* m1.c */ /* m2.c */ int x=100; float x; int p1(viod); static main=1; int main() int p1() { { x= p1(); int p1=main + (int) x; return x; return p1; } } 对于上述两个源程序文件链接时的符号解析,错误的是( )。
        A、m1中对x的两处引用都与m1中对x的定义绑定
        B、m2中对x的引用与m2中对x的定义绑定
        C、m2中的变量p1与函数p1被分配在不同存储区
        D、虽然x、main和p1都出现了多次定义,但不会发生链接错误



    9、以下是两个源程序文件: /* m1.c */ /* m2.c */ #include <stdio.h> int x=100; double x; short y=1, z=2; int main() void p1() { { 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=2
        B、x=-1, z=2
        C、x=-1074790400, z=0
        D、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 –o myfunc func.o libx.a liby.a libz.a
        B、gcc -static –o myfunc func.o liby.a libz.a libx.a
        C、gcc -static –o myfunc func.o libx.a libz.a liby.a
        D、gcc -static –o myfunc func.o liby.a libx.a libz.a



    计算机系统概论答案-中国大学慕课》由《超星尔雅通识课题库答案》整理呈现,请在转载分享时带上本文链接,谢谢!

    支持Ctrl+Enter提交
    超星尔雅通识课题库答案 © All Rights Reserved.  Copyright Your WebSite.Some Rights Reserved.
    联系我们QQ 59982118|