1以下有关冯.诺依曼结构思想的叙述中,错误的是( C )。
A.计算机内部以二进制形式表示指令和数据
B.程序由指令构成,计算机能自动执行程序中一条一条指令
C.指令和数据都放在存储器中,两者在形式上有差别(无差别)
D.计算机由运算器、存储器、控制器和I/O设备组成
2以下有关指令以及指令执行过程的叙述中,错误的是( B )。
A.将要执行的下条指令的地址总是在程序计数器PC中
B.指令中指定的操作数只能是存放在存储器中的数据
C.指令由操作码和操作数或操作数的地址码构成
D.CPU中的控制器对指令操作码进行译码
3以下有关编程语言的叙述中,错误的是( D )。
A.汇编语言和机器语言都与计算机系统结构相关
B.计算机不能直接执行高级语言程序和汇编语言程序
C.用高级编程语言编写程序比用汇编语言更方便
D.不能直接用机器语言(机器指令)编写程序
4以下有关机器指令和汇编指令的叙述中,错误的是( D )。
A.机器指令和汇编指令一一对应,功能相同
B.汇编指令中用十进制或十六进制表示立即数
C.汇编指令中用符号表示操作码和地址码
D.机器指令和汇编指令都能被计算机直接执行
5以下有关使用高级编程语言编写和开发软件的叙述中,错误的是( D )。
A.须有一套工具软件或集成开发环境,即语言处理系统
B.须有程序员与计算机交互的用户接口,即GUI或CUI
C.须有一个翻译或转换程序,即编译器或解释器
D.须程序员在应用程序中直接控制外设进行输入/输出
6一个完整的计算机系统包括硬件和软件。软件又分为( B )。
A.操作系统和高级语言
B.系统软件和应用软件
C.低级语言程序和高级语言程序
D.操作系统和语言处理程序
7以下给出的软件中,属于系统软件的是( D )。
A.MS Word
B.金山词霸
C.RealPlayer
D.Windows XP
8以下有关指令集体系结构的叙述中,错误的是( C )。
A.指令集体系结构的英文缩写是ISA
B.指令集体系结构位于计算机软件和硬件的交界面上
C.通用寄存器的长度、功能与编号不属于指令集体系结构的内容
D.指令集体系结构是指低级语言程序员所看到的概念结构和功能特性
9以下有关计算机系统层次结构的叙述中,错误的是( D )。
A.最上层是提供给最终用户使用的应用程序(软件)层
B.OS是对ISA和硬件的抽象,程序员通过OS使用系统资源
C.ISA是对硬件的抽象,软件通过ISA使用硬件提供的功能
D.应用程序员工作在指令集体系结构层,需要对底层很熟悉 (应是ISA)
10以下术语中,不属于计算机中硬件(即物理上实际存在的部件)的是( B )。
A.算术逻辑部件
B.指令字
C.程序计数器(PC)
D.数据通路
1.108对应的十六进制形式是(C)。
A.5CH 108=6*16+12
B.63H 6=0*16+6
C.6CH 倒取余数,十六进制为6CH
D.B4H
2–1029的16位补码用十六进制表示为(A)。
A.FBFBH -1029=-1024-5=-2^10-2^2-2^0
B.0405H 1029的二进制:0000 0100 0000 0101B
C.7BFBH -1029的二进制(从右向左遇到的第一个1的前面各位取反):
D.8405H 1111 1011 1111 1011B十六进制为FBFBH
3考虑以下C语言代码:
short si=–8196;
unsigned short usi=si;
执行上述程序段后,usi的值是(C)。
A.8196 -8196=-(8192+4)=-10 0000 0000 0100B,因此,si和usi的机
B.34572 器数都为1101 1111 1111 1100,按无符号整数解释,其值为
C.57340 65535-3-8192=65535-8195=57340。
D.57339
4考虑以下C语言代码:
short si=–32768;
unsigned short usi=si;
执行上述程序段后,usi的值是(D)。
A.–32768 -32768=-1000 0000 0000 0000B,因此,si和usi的机器数都为
B.65535 1000 0000 0000 0000,按无符号整数解释,其值为32768
C.65536
D.32768
5.考虑以下C语言代码:
unsigned short usi=65535;
short si=usi;
执行上述程序段后,si的值是(D)。
A.–65535 65535=1111 1111 1111 1111B,因此,usi和si的机器数都为
B.65535 1111 1111 1111 1111,按带符号整数解释,其值为-1
C.1
D.–1
6在ISO C90标准下执行以下关系表达式,结果为“真”的是(D)。
A.2147483647<(int)2147483648U
B.2147483647>–2147483648
C.–1<0U
D.(unsigned)–1>–2
-1的机器数为全1,按无符号整数比较,全1是最大的数,显然比0大,即结果为“假”。
2147483647的机器数为011┅1,在C90中为int型;2147483648的机器数为100┅0,在C90中为unsigned型,强制类型转换为int后,按带符号整数比较,显然011┅1比100┅0大,即结果为“假”。
-1的机器数为全1,-2的机器数为11┅10,按无符号整数比较,显然全1比任何数大,即结果为“真”。
2147483647的机器数为011┅1,在C90中为int型;2147483648的机器数为100┅0,在C90中为unsigned型,-2147483648的机器数通过对100┅0各位取反末位加一得到,因此,机器数还是100┅0。011┅1和100┅0按无符号整数比较,显然011┅1比100┅0小,即结果为“假”。
7.–1028采用IEEE 754单精度浮点数格式表示的结果(十六进制形式)是(B)。
A.44808000H -1028=-1024-4=-2^10-2^2
B.C4808000H -1028二进制为:-0100 0000 0100B =
C.C4C04000H -1.00000001 *10^10 127+10=128+8+1=2^7+2^3+2^0
D.44C04000H 因此8位阶码为:1000 1001 为负数,所以符号位为1
1 10001001 0000 0001 0000 0000 000(格式1+8+23)
四位一组:1100 0100 1000 0000 1000 0000 0000 0000B C 4 8 0 8 0 0 0H
8假定变量i、f的数据类型分别是int、float。已知i=12345,f=1.2345e3,则在一个32位机器中执行下列表达式时,结果为“假”的是(D)。
A.i==(int)(double)i
B.f==(float)(double)f
C.i==(int)(float)i
D.f==(float)(int)f
12345<1024x16=2^14,因此,12345对应的二进制数的有效位数一定小于14,更小于IEEE 754单精度格式的有效位数24,因而转换为float型后,不会发生有效数字丢失,也即能够精确表示为float型,再转换为int型后,数值是一样的。 f=1234.5,转换为int型数后,小数点后面的数字被丢失,因此与原来的f不相等。
double型数的有效位数比float型数大得多,因而f转换为double类型后不会发生有效数字丢失。
任何int型数的有效位数不会超过31位,因此都能精确转换为具有53位有效位数的double型。
9假定某计算机按字节编址,采用小端方式,有一个float型变量x的地址为0xffffc000,x=12345678H,则在内存单元0xffffc001中存放的内容是(B)。
A.0001001000110100B
B.01010110B
C.0101B
D.00110100B
因为按字节编址,所以某一个单元内存放一个8位数字。 01010110B=56H,小端方式下,78H存在0xffffc000单元中,56H存在0xffffc001单元中, 因为按字节编址,所以某一个单元内只能存放8位数字。 00110100B=34H,小端方式下,78H存在0xffffc000单元中,34H存在0xffffc002单元中,
10下面是关于计算机中存储器容量单位的叙述,其中错误的是(C)。
A.“主存容量为1KB”的含义是指主存中能存放1024个字节的二进制信息
B.最小的计量单位为位(bit),表示一位“0”或“1”
C.一台计算机的编址单位、指令字长和数据字长都一样,且是字节的整数倍
D.最基本的计量单位是字节(Byte),一个字节等于8bit
1.CPU中能进行算术运算和逻辑运算的最基本运算部件是( A )。
A.ALU
B.加法器
C.移位器
D.多路选择器
2 ALU有一个操作控制端ALUop,ALU在ALUop的控制下执行相应的运算。以下给出的运算中,( D )运算不能由ALUop直接控制完成。
A.加法和减法
B.与、或、非等逻辑运算
C.传送(ALU输入直送为输出)
D.乘法和除法
ALU通常仅用于进行加、减以及各类逻辑运算和传送操作,乘法和除法运算可以利用ALU分步骤进行加/减和移位来完成,因此,在进行乘或除运算时,每个步骤送到ALUop的控制信号可以控制进行加/减和移位操作,但不能用一个控制信息直接使ALU完成乘或除运算。
3 假设变量x的位数为n(n>=8),x的最低有效字节不变,其余各位全变为0,则对应C语言表达式为( C )。
A.x | ~ 0xFF 任何数与1相与都为其本身
B.x ^ 0xFF
C.x & 0xFF
D.x | 0xFF
4假设变量x的位数为n(n>=8),x的最高有效字节不变,其余各位全变为0,则对应C语言表达式为( A )。
A.(x>>(n-8))<<(n-8) 右移8位,表示只保留最左边的8位,然后再左移8位
B.((x&0xFF)>>(n-8))<<(n-8) 将其移回来,这样高8位就不会发生变化
C.(x<<(n-8))>>(n-8)
D.((x&0xFF)<<(n-8))>>(n-8)
5 考虑以下C语言代码:
short si = –8196;
int i = si;
执行上述程序段后,i的机器数表示为( A )。
A.FFFF DFFCH 带符号整数:符号扩展 无符号整数:0扩展
B.0000 9FFCH -8196=-2^13-2^2=-0010 0000 0000 0100B=1101 1111 1111 1100B
C.FFFF 9FFCH 符号位为1,扩展为:1111 1111 1111 1111 1101 1111 1111 1100B
D.0000 DFFCH 十六进制为:FFFF DFFCH
6若在一个8位整数加/减运算器中完成x–y的运算,已知带符号整数x=–69,y=–38,则加法器的两个输入端和输入的低位进位分别为( D )。
A.1011 1011、0010 0110、1 低位进位就是sub,做减法sub=1,否则sub=0
B.1011 1011、1101 1010、1
C.1011 1011、1101 1010、0
D.1011 1011、0010 0101、1
-69=-64-4-1=-2^6-2^2-2^0=-0100 0101B=1011 1011B(将0100 0101B取反加1)
-38=-32-4-2=-2^5-2^2-2^1=-0010 0110B=1101 1010B
–69和–38的机器数分别是1011 1011、1101 1010,因为是做x-y,所以,整数加/减运算器中的控制端sub为1,即低位进位为1,并控制加法器的第二个输入端各位取反,为0010 0101(将1101 1010B取反)。
7若在一个8位整数加/减运算器中完成x+y的运算,已知无符号整数x=69,y=38,则加法器的两个输入端和输入的低位进位分别为( C )。
A. 0100 0101、1101 1010、0
B.0100 0101、0010 0110、1
C.0100 0101、0010 0110、0
D.0100 0101、1101 1010、1
69和38的机器数分别是0100 0101、0010 0110,因为是做加法,所以,整数加/减运算器中的控制端sub为0,即低位进位为0。
8 若在一个8位整数加/减运算器中完成x+y的运算,已知x=63,y= –31,则x+y的机器数及相应的溢出标志OF分别是( B )。
A.20H、1
B.20H、0
C.1FH、1
D.1FH、0
63=64-1=1000000B-1=0111111B=0011 1111B
31=2^5-1=100000B-1=011111B=0001 1111B
-31=1110 0001B(0001 1111B各位取反加一)
63和–31的机器数分别是0011 1111、1110 0001,因为是做x+y,所以,在加法器中将两个机器数直接相加,得到结果为0010 0000(20H),并生成进位Cout=1,因为两个加数符号位相异,因此,不会发生溢出,即OF=0。
9若在一个8位整数加/减运算器中完成x+y的运算,假定变量x和y的机器数用补码表示为[x]补=F5H,[y]补=7EH,则x+y的值及相应的溢出标志OF分别是( C )。
A.119、1
B.115、1
C.115、0
D.119、0
x和y的机器数是用补码表示的,分别是1111 0101、0111 1110,因为是做x+y,所以,sub=0,即1111 0101 + 0111 1110 +0 = 0111 0011,其真值为127-12=115。因为两个加数符号位相异,所以不会发生溢出,即OF=0。
10 若在一个8位整数加/减运算器中完成x–y的运算,假定变量x和y的机器数用补码表示为[x]补=F5H,[y]补=7EH,则x–y的值及相应的溢出标志OF分别是( B )。
A.119、0
B.119、1
C.115、1
D.115、0
x和y的机器数是用补码表示的,分别是1111 0101、0111 1110,因为是做x-y,所以,sub=1,y对应的机器数各位取反,即1111 0101 + 1000 0001 +1 = 0111 0111,其真值为127-8=119。因为两个加数符号位为1,而结果符号为0,所以发生了溢出,即OF=1。
1若在一个8位计算机中完成x+2y的运算,假定变量x和y的机器数用补码表示为[x]补=44H,[y]补=DCH,则x+2y的机器数及相应的溢出标志OF分别是(C)。
A.32H、0
B.FCH、1
C.FCH、0
D.32H、1
x和y的机器数是用补码表示的,分别是0100 0100、1101 1100,因为是做x+2y,所以,先对y算术左移一位,然后和x相加,此时sub=0,即0100 0100 + 1011 1000+0 = 1111 1100(FCH),因为两个加数符号相异,所以不会发生溢出,即OF=0。
2 若在一个8位计算机中完成x–2y,假定变量x和y的机器数用补码表示为[x]补=44H,[y]补=DCH,则x–2y的机器数及相应的溢出标志OF分别是(A)。
A.8CH、1
B.8CH、0
C.68H、0
D.68H、1
x和y的机器数是用补码表示的,分别是0100 0100、1101 1100,因为是做x–2y,所以,先对y算术左移一位,得1011 1000,然后各位取反,再和x相加,此时sub=1,即0100 0100 + 0100 0111+1 = 1000 1100(8CH),因为两个加数符号都为0,而结果符号为1,所以发生了溢出,即OF=1。
3若在一个8位计算机中完成x/2+2y,假定变量x和y的机器数用补码表示为[x]补=44H,[y]补=DCH,则x/2+2y的机器数及相应的溢出标志OF分别是(B)。
A.CAH、1
B.DAH、0
C.CAH、0
D.DAH、1
x和y的机器数是用补码表示的,分别是0100 0100、1101 1100,因为是做x/2+2y,所以,先对x算术右移一位,得0010 0010;再对y算术左移一位,得1011 1000,两者相加,此时sub=0,即0010 0010 + 1011 1000+0 = 1101 1010(DAH),因为两个加数符号相异,所以不会发生溢出,即OF=0。
4假定变量r1和r2的机器数用8位补码表示为[r1]补=F5H,[r2]补=EEH。若将运算结果存放在一个8位寄存器中,则下列运算中会发生溢出的是(D)。
A.r1+r2
B.r1/r2
C.r1–r2
D.r1×r2
5假定整数加法指令、整数减法指令和移位指令所需时钟周期(CPI)都为1,整数乘法指令所需时钟周期为10。若x为整型变量,为了使计算64*x所用时钟周期数最少,编译器应选用的最佳指令序列为(C)。
A.1条左移指令和1条加法指令
B.两条左移指令和两条加法指令
C.1条左移指令
D.1条乘法指令
因为64*x可以用x左移6位来实现,左移指令比乘法指令快10倍,因此最佳指令序列为1条左移指令,只要一个时钟周期。
6 假定整数加法指令、整数减法指令和移位指令所需时钟周期(CPI)都为1,整数乘法指令所需时钟周期为10。若x为整型变量,为了使计算54*x所用时钟周期数最少,编译器应选用的最佳指令序列为(C)。
A.1条乘法指令
B.4条左移指令和3条加法指令
C.3条左移指令和两条减法指令
D.两条左移指令和两条减法指令
54*x=(64-8-2) *x=64*x -8*x -2*x,可用3条左移指令和两条减法指令来实现,共需5个时钟周期。
一条整数乘法指令需要10个时钟周期。
D.给出的指令序列肯定不能实现54*x。
7 假定整数加法指令、逻辑运算指令和移位指令所需时钟周期(CPI)都为1,整数除法指令所需时钟周期为32。若x为整型变量,为了使计算x/64所用时钟周期数最少,编译器应选用的最佳指令序列为(D)。
A.1条右移指令
B.1条加法指令、1条右移指令
C.1条除法指令
D.两条右移指令、1条与操作指令、1条加法指令
若x为负数且不能被64整除,则x右移6位和x/64的结果不相等。
x/64 = ( x>=0 ? x : (x+63) ) >> 6,因此关键是计算偏移量b,这里,x为正时b=0,x为负时b=63。可从x的符号得到b,x>>31得到32位符号,正数为32位0,负数为32位1,然后通过“与”操作提取低6位,这就是偏移量b。也即:x/64 = ( x+ ( x>>31)&0x3F ) ) >> 6,用2条右移、1条加和1条与指令即可实现,只要4个时钟周期。
若x为负数,则x/64=(x+63)>>6,但该公式不适合正数x,因此无法用一条加和一条右移指令实现。
一条整数乘法指令需要32个时钟周期。
8已知float型变量用IEEE 754单精度浮点格式表示,float型变量x和y的机器数分别表示为x=40E8 0000H,y=C204 0000H,则在计算x+y时,第一步对阶操作的结果[Ex-Ey]补为(B)。
A.0000 0011
B.1111 1101
C.0000 0111
D.1111 1011
因为x=40E8 0000H=0100 0000 1110 1000 0...0,y=C204 0000H=1100 0010 0000 0100 0...0,所以x和y的阶码分别为100 0000 1、100 0010 0,对阶时计算过程为 1000 0001 + 0111 1100 = 1111 1101。
9 对于IEEE 754单精度浮点数加减运算,只要对阶时得到的两个阶之差的绝对值|ΔE|大于等于(C),就无需继续进行后续处理,此时,运算结果直接取阶大的那个数。
A.23
B.127
C.25
D.128
对于IEEE 754单精度浮点格式,当出现“1.bb…b + 0.00…0 01bb…b”情况时会发生“大数吃小数”现象,小数0.00…0 01bb…b中的小数点被左移了25位。
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,以下哪个关系表达式是永真的? (B/C)
A.dx*dy*dz==dz*dy*dx
B.dx*dx>=0
C.(dx+dy)+dz==dx+(dy+dz)
D.dx+dy==(double)(x+y)
当int型数据x的有效位数比float型可表示的最大有效位数24更多时,x强制转换为float型数据时有效位数丢失,而将x转换为double型数据时没有有效位数丢失。
A、非永真。相乘的结果可能产生舍入。
B、永真。double型数据用IEEE 754标准表示,尾数用原码小数表示,符号和数值部分分开运算。不管结果是否溢出都不会影响乘积的符号。
C、永真。因为dx、dy和dz是由32位int型数据转换得到的,而double类型可以精确表示int类型数据,并且对阶时尾数移位位数不会超过52位,因此尾数不会舍入,因而不会发生大数吃小数的情况。但是,如果dx、dy和dz是任意double类型数据,则非永真。
1以下有关指令的叙述中,错误的是( D)。
A.微指令是一条机器指令所包含的控制信号的组合,CPU能直接执行
B.机器指令是用二进制表示的一个0/1序列,CPU能直接执行
C.伪指令是由若干条机器指令构成的一个指令序列,属于软件范畴
D.汇编指令是机器指令的符号表示,CPU能直接执行
2一条机器指令通常由多个字段构成。以下选项中,通常( C )不显式地包含在机器指令中。
A.寻址方式
B.寄存器编号
C.下条指令地址
D.操作码
3对于运算类指令或传送类指令,需要在指令中指出操作数或操作数所在的位置。通常,指令中指出的操作数不可能出现在(C )中。
A.存储单元
B.通用寄存器
C.程序计数器
D.指令
4令集体系结构(ISA)是计算机系统中必不可少的一个抽象层,它是对硬件的抽象,软件通过它所规定的指令系统规范来使用硬件。以下有关ISA的叙述中,错误的是( D )。
A. ISA规定了指令的操作数类型、寄存器结构、存储空间大小、编址方式和大端/小端方式
B. ISA规定了指令获取操作数的方式,即寻址方式
C. ISA规定了所有指令的集合,包括指令格式和操作类型
D. ISA规定了执行每条指令时所包含的控制信号
5以下选项中,不属于指令集体系结构名称的是( B )。
A.MIPS
B.UNIX
C.IA-32
D.ARM
6以下Intel微处理器中,不兼容IA-32指令集体系结构的是( B )。
A.Core(i3、i5、i7)
B.Itanium和Itanium 2
C.Pentium (II、III、4)
D.80386和80486
7以下关于IA-32指令格式的叙述中,错误的是( D )。
A.采用变长操作码,操作码位数可能是5位到十几位不等
B.采用变长指令字格式,指令长度从一个字节到十几个字节不等
C.指令中指出的位移量和立即数的长度可以是0、1、2或4个字节
D.指令中给出的操作数所在的通用寄存器的宽度总是32位
8以下关于IA-32指令寻址方式的叙述中,错误的是( A )。
A.相对寻址的目标地址为“PC内容加位移”,PC内容指当前正在执行指令的地址
B.对于寄存器操作数,必须在指令中给出通用寄存器的3位编号
C.操作数可以是指令中的立即数、也可以是通用寄存器或存储单元中的内容
D.存储器操作数中最复杂的寻址方式是“基址加比例变址加位移”
9以下关于IA-32中整数运算指令所支持的操作数的叙述中,错误的是( A )。
A.除乘法指令外,其他运算指令的源操作数和目的操作数的位数相等
B.对于乘除运算指令,操作数一定区分是无符号整数还是带符号整数
C.参加运算的操作数可以是一个字节(8b)、一个字(16b)或双字(32b)
D.对于加减运算指令,操作数不区分是无符号整数还是带符号整数
10以下关于IA-32的定点寄存器组织的叙述中,错误的是( B )。
A.寄存器EAX/AX/AL称为累加器,ECX/CX/CL称为计数寄存器
B.每个通用寄存器都可作为32位、16位或8位寄存器使用
C.寄存器ESP/SP称为栈指针寄存器,EBP/BP称为基址指针寄存器
D.EIP/IP为指令指针寄存器,即PC;EFLAGS/FLAGS为标志寄存器
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格式)可以是( C )。
A.addl 0(