1、以下有关指令系统的说法中,正确的是()
A、指令系统是一台机器硬件能执行的指令全体
B、任何程序运行前都要先转化为机器语言程序
C、指令系统是计算机软/硬件的界面
D、指令系统和机器语言是无关的
解析:选D
指令系统:一台机器硬件能执行的指令全体,是计算机软/硬件的界面。
机器语言:机器能直接识别的程序语言或指令代码,无需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。
指令系统和机器语言一个是硬件的语言系统,一个是计算机内部的语言系统,两者之间互不干扰。
2、在CPU执行指令的过程中,指令的地址由()给出
A、程序计数器(PC)
B、指令的地址码字段
C、操作系统
D、程序员
解析:选A
PC保存的是当前欲执行的指令的地址
地址码字段指出的是操作数所在的地址
程序员可以修改指令执行的顺序,但不能给出指令的地址。
操作系统编译为CPU指令,在CPU架构上执行,并不是决定指令的地址的。
3、下列指令中不属于程序控制指令的是()
A、无条件转移指令
B、条件转移指令
C、中断隐指令
D、循环指令
解析:选C
中断隐指令指 CPU 响应中断之后,经过某些操作,转去执行中断服务程序的一种操作。 中断隐指令并不是指令系统中的一条真正的指令,它没有操作码 ,所以中断隐指令是一种不允许、也不可能为用户使用的特殊指令。
程序控制指令包括:无条件转移指令、条件转移指令、子程序调用和返回指令、循环指令等。
4、设机器字长为32位,一个容量为16MB的存储器,CPU按半字寻址,其寻址单元数是()
A、224
B、223
C、222
D、221
解析:选B
机器字长为32位,即4B,因为按半字寻址,因此是寻址单元长度为2B,存储容量为:16MB,故寻址单元数为16MB/2B =8M =223
5、一个计算机系统采用32位单字长指令,地址码为12位,若定义了250条二地址指令,则还可以有()条单地址指令。
A、4K
B、8K
C、16K
D、24K
解析:选D
二地址指令种操作码有8位,共28=256个,但只用了250个,因此还剩6个,给单地址指令用
单地址指令操作码位数为8+12=24位,其中前8位只有6个操作码,后12位全部可以用,因此是6*212=24K
6、某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令29条、二地址指令107条,每个地址字段为6位,则指令子长至少应该是()
A、24位
B、26位
C、28位
D、32位
解析:选A
每个地址字段为6位,对于三地址来说,地址码长度应改为63=18位,因为三地址指令有29条,24<=29<=25,因此操作码至少有5位。此时指令字长为18+5=23位,对于二地址指令,地址码长度为26=12,因为三地址指令只有29条,因此还剩32-29=3条,操作码还有6位可以全部用,因此是3*26=192>107,因此23位时,对于三地址指令,二地址指令都满足题目中的要求。注意,指令字长在计算机内都必须是8的整数倍,显然23不是,因此取24位。
1、指令系统中采用不同寻址方式的目的是()
A、提供扩展操作码的可能并降低指令译码难度
B、可缩短指令字长,扩大寻址空间,提高编程的灵活性
C、实现程序控制
D、三者都正确
解析:选B
对于A,采用不同的寻址方式可以扩展操作码,但是并不会降低指令译码难度,反而会增加难度,毕竟都采用立即寻址,译码难度显然要比使用了寄存器寻址等方式的难度低。
对于B,采用不同寻址方式可缩短指令字长(如果使用立即寻址,长度会很长,但是使用寄存器寻址,指令长度就会变短),扩大寻址空间(立即寻址和间接寻址就可以看出来),提高编程的灵活性(可以按照需要采取直接或间接寻址方式)。
实现程序控制是通过转移指令来实现的。
2、简化地址结构的基本方法是尽量采用()
A、寄存器寻址
B、隐地址
C、直接寻址
D、间接寻址
解析:选B
隐地址不给出地址,从而简化了地址结构,如零地址指令。
3、相对寻址方式中,指令所提供的相对地址实质上是一种()
A、立即数
B、内存地址
C、以本条指令在内存中首地址为基准位置的偏移量
D、以下条指令在内存中首地址为基准位置的偏移量
解析:选D
相对寻址中,有效地址EA=(PC)+A,其中PC已经完成PC=PC+1的操作,表示的是下一条指令的地址,因此是以下条指令在内存中首地址为基准位置的偏移量。
4、指令寻址方式中有顺序和跳跃两种,采用跳跃寻址方式可以实现()
A、程序浮动
B、程序的无条件浮动和条件浮动
C、程序的无条件转移和条件转移
D、程序的调用
解析:选C
程序浮动是因为存储单元的存储内容不确定,从而采用相对寻址的方式进行寻址,找到目标操作数。
程序转移是不按照顺序执行。通过跳转指令, call 指令、 jmp 指令等实现,如if else语句。
5、对按字寻址的机器,程序计数器和指令寄存器的位数各取决于()
A、机器字长、存储器的字数
B、存储器的字数、指令字长
C、指令字长、机器字长
D、地址总线宽度、存储器的字数
解析:选B
存储器的字数决定了能存多少条指令,就是PC的值能到多大。
指令寄存器用来存放指令,因此位数取决于要存放的指令的长度。
6、设相对寻址的转移指令3B,第一字节为操作码,第二、三字节为相对位移量(补码表示),而且数据在存储器中采用以低字节为字地址的存放方式。每当CPU 从存储器取出一字节时,即自动完成(PC) +1->PC。若PC的当前值为240(十进制),要求转移到290(十进制),则转移指令的第二、三字节的机器代码是();若PC的当前值为240(十进制),要求转移到200(十进制),则转移指令的第二、三字节的机器代码是()
A、2F、FFH
B、D5、00H
C、D5、FFH
D、2F、00H
解析:选D C
因为每当CPU 从存储器取出一字节时,即自动完成(PC) +1->PC,因此在PC的当前值为240(十进制),等取出该指令后,PC=243,此时要转移到290,相对偏移量为290-243=47>0,47=>0010 1111=>2FH,因为在存储器中采用以低字节为字地址的存放方式,所以在第二字节为2F,第三字节补充0。因此是2F 00H
因为每当CPU 从存储器取出一字节时,即自动完成(PC) +1->PC,因此在PC的当前值为240(十进制),等取出该指令后,PC=243,此时要转移到200,相对偏移量为200-243=-43<0,-42=>1010 1011=>补码为:1101 0101=>D5H,因为在存储器中采用以低字节为字地址的存放方式,所以在第二字节为D5,第三字节补充1。因此是D5 FFH
7、某机器有一个标志寄存器,其中有进位/借位标志CF,零标志ZF,符号标志SF和溢出标志OF,条件转移指令bgt(无符号整数比较大于时转移)的转移条件是()
A、CF+OF=1
B、 S F ‾ \overline{SF} SF+ Z F ‾ \overline{ZF} ZF=1
C、 C F + Z F ‾ \overline{CF+ZF} CF+ZF=1
D、 C F + S F ‾ \overline{CF+SF} CF+SF=1
解析:选C
在比较两个数大小时,采用做差的方法,假设比较的两个数为a和b,通过比较a-b的正负,判断谁大谁小,当结果为正时,a>b,此时零标志一定为0,否则a=b,且没有进位(减法不存在进位)和借位(如果有借位那就ab一定没有溢出,因此不用考虑OF标志,因为题目中是无符号整数,因此不存在符号位,所以不用考虑SF。
8、假设变址寄存器R的内容为1000H,指令中的形式地址为2000H;地址1000H中的内容为2000H,地址2000H中的内容为3000H,地址3000H中的内容为4000H,则变址寻址方式下访问到的操作数是()
A、1000H
B、2000H
C、3000H
D、4000H
解析:选D
变址寻址的有效地址等于形式地址与寄存器的内容之和,EA=(R)+A
在题目中R=1000H,地址1000H中的内容为2000H,因此(R)=2000H。A=2000H,因此EA=2000H+2000H。
9、按字节编址的计算机中,某double型数组A是首地址为2000H,使用变址寻址和循环结构访问数组A,保存数组下标的变址寄存器的初值是0,每次循环取一个数组元素,其偏移地址为变址值乘以sizeof(double),取完后变址寄存器的内容自动加1.若某次循环所取元素的地址为2100H,则进入该次循环时变址寄存器的内容是()
A、25
B、32
C、64
D、100
解析:选B
偏移地址为2100H-2000H=100H=0001 0000 0000(二进制) =256(十进制)
偏移地址=变址值 * sizeof(double) =>256=变址值 * 8 => 变址值=32
10、某计算机采用大端方式,按字节编址。某指令中操作数的机器数为1234 FF00H,该操作数采用基址寻址方式,形式地址(用补码表示)为FF12H,基址寄存器的内容为F000 0000H,则该操作数的LSB(最低有效字节)所在的地址是()
A、F000 FF12H
B、F000 FF15H
C、EFFF FF12H
D、EFFF FF15H
解析:选D
FF12H=1111 1111 0001 0010(补码),补成32位:1111 1111 1111 1111 1111 1111 0001 0010。
对于基址寻址方式,EA=(BR)+A 【有效地址=基址寄存器内容+形式地址】,所以EA=F000 0000H+FFFF FF12H=EFFF FF12H。
因为按字节编址,因此12 34 FF 00H,12对应FF12,34对应FF13,FF对应FF14,00对应FF15,采用大端方式,即正常方式,最低有效字节为00,因此该操作数的LSB(最低有效字节)所在的地址是EFFF FF15H。
11、某计算机采用16位定长指令字格式,操作码位数和寻址方式位数固定,指令系统有48条指令,支持直接、间接、立即、相对4种寻址方式。在单地址指令中,直接寻址方式的可寻址范围是()
A、0~255
B、0~1023
C、-128~127
D、-512~511
解析:选A
支持直接、间接、立即、相对4(22)种寻址方式,因此寻址方式位数为2位
指令系统有48条指令,25<=48<=26,因此操作码位数为6位
故地址码位数为16-2-6=8位,可以寻找28=256个地址数,因为地址都是非负数,因此寻址范围为0-255
1、假设R[ax]=FFE8H,R[bx]=7FE6H,执行指令“addw %bx, %ax”后,寄存器的内容和各标志的变化为()
A、R[ax]=7FCEH,OF=1,SF=0,CF=0,ZF=0
B、R[bx]=7FCEH,OF=1,SF=0,CF=0,ZF=0
C、R[ax]=7FCEH,OF=0,SF=0,CF=1,ZF=0
D、R[bx]=7FCEH,OF=0,SF=0,CF=1,ZF=0
解析:选C
溢出标志OF,符号标志SF,进位/借位标志CF,零标志ZF
由指令“addw %bx, %ax”,可知该指令是AT&T格式(因为指令中带%)。所以addw %bx, %ax相当于R[ax]=R[ax]+R[bx]=1111 1111 1110 1000+0111 1111 1110 0110=(1)0111 1111 1100 1110=7FCEH
因为R[ax]<0,R[bx]>0。所以结果一定不会溢出,因此OF=0,由结果可知,符号位为0,因此SF=0,且有进位 因此OF=1,结果不为0,因此ZF=0。
2、假设R[ax]=7FE6H,R[bx]=FFE8H,执行指令“sub 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
解析:选B
溢出标志OF,符号标志SF,进位/借位标志CF,零标志ZF
由指令“sub bx, ax”,可知该指令是Intel格式(因为指令中不带%)。所以sub bx, ax相当于R[bx]=R[bx] - R[ax]=R[bx] + (-R[ax]补)=(11)111 1111 1110 1000+(11)000 0000 0001 1010=(11)000 0000 0000 0010=8002H
因为结果的符号位为11,两个计算数符号位都是11,因此没有产生溢出,OF=0,符号位看双符号位的高位,因此SF=1,相减的过程中不会有进位,且在相减时并未有借位(不够减的情况,因为一个负数减一个正数,不会不够减),因此CF=0,结果不为零,因此ZF=0。