西亚斯微机原理期中试题及答案_微机原理试题及答案
西亚斯微机原理期中试题及答案由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“微机原理试题及答案”。
一、问答题(每小题1分共10分)
1、下列字符表示成相应的ASCII码是多少?
(1)换行
0AH
(2)字母“Q”
51H
(3)空格
20H
(4)(回车)
0DH2、下列各机器数所表示数的范围是多少?(1)8位二进制无符号整数,0~255(2)8位二进制有符号整数;
-128,+127(3)16位二进制无符号定点整数;
0~65535 用补码表示的16位二进制有符号整数;-32768,+327673、有两个二进制数X=01101010,Y=10001100,试比较它们的大小。(1)X和Y两个数均为无符号数;X
(2)X和Y两个数均为有符号的补码数。X>Y
二、填空题(每小题1分)
1、对于R进制数来说,其基数(能使用的数字符号个数)是
R个,能使用的最小数字符号是
0。
与十进制数67等值的十六进制数是
43H
。二进制数101.011转换成十进制数是
5.375。
4、十六进制数0E12转换成二进制数是
11000010010B。
三、选择题(每小题1分共6分)
1、在计算机内部,一切信息的存取、处理和传送都是以
D
形式进行的。A)EBCDIC码
B)ASCII码
C)十六进制编码
D)二进制编码
2、与十进制数56等值的二进制数是
A。
A)111000
B)111001
C)101111
D)1101103、十进制数59转换成八进制数是
A。
A)73Q
B)37Q
C)59Q
D)112Q4、与十进制数58.75等值的十六进制数是
B
。A)A3.CH
B)3A.CH
C)3A.23H
D)C.3AH5、二进制数1101.01转换成十进制数是
C
。A)17.256
B)13.5
C)13.25
D)17.56、十进制正数38的八位二进制补码是
D。
A)00011001
B)10100110
C)10011001
D)00100110
四、是非判断题(每小题1分共3分)
1、对于种类不同的计算机,其机器指令系统都是相同的。(×)
2、在计算机中,数据单位bit的意思是字节。(×)
3、八进制数的基数为8,因此在八进制数中可以使用的数字符号是0、1、2、3、4、5、6、7、8。(×)
四、简答题(每小题2.5分共47分)
1.微处理器,微型计算机和微型计算机系统三者之间有何区别?
答:微处理器即CPU,它包括运算器、控制器、寄存器阵列和内部总线等部分,用于实现微型计算机的运算和控制功能,是微型计算机的核心;一台微型计算机由微处理器、内存储器、I/O接口电路以及总线构成;微型计算机系统则包括硬件系统和软件系统两大部分,其中硬件系统又包括微型计算机和外围设备;由此可见,微处理器是微型计算机的重要组成部分,而微型计算机系统又主要由微型计算机作为其硬件构成。
2.CPU在内部结构上由哪几部分构成?CPU应具备哪些主要功能?
答:CPU在内部结构上由运算器、控制器、寄存器阵列和内部总线等各部分构成,其主要功能是完成各种算数及逻辑运算,并实现对整个微型计算机控制,为此,其内部又必须具备传递和暂存数据的功能。
3.累加器和其它通用寄存器相比有何不同?
答:累加器是通用寄存器之一,但累加器和其它通用寄存器相比又有其独特之处。累加器除了可用做通用寄存器存放数据外,对某些操作,一般操作前累加器用于存放一个操作数,操作后,累加器用于存放结果。
4.微型计算机的总线有哪几类?总线结构的特点是什么?
答:微型计算机的总线包括地址总线、数据总线和控制总线三类,总线结构的特点是结构简单、可靠性高、易于设计生产和维护,更主要的是便于扩充。5.完成下列各十六进制数的运算:
A39E+28DC,D5AB-7CE5 答:A39E+28DC=CC7A;D5AB-7CE5=58C6;6.分别列出下述10进制数的16进制数、压缩的BCD数、ASCII数字串(用16进制形式写出):10, 64, 78, 81, 92, 100, 125, 255 答:上述各数的16进制数依次为:AH,40H,4EH,51H,5CH,64H,7DH,FFH;上述各数的压缩的BCD数依次为:10H,64H,78H,81H,92H,0100H,0125H,0255H;上述各数的ASCII数字串依次为:3130H,3634H,3738H,3831H,3932H,313030H,313235H, 323535H;7.8086从功能上分成了EU和BIU两部分。这样设计的优点是什么? 答:传统计算机在执行程序时,CPU总是相继地完成取指令和执行指令的动作,即,指令的提取和执行是串行进行的。而8086CPU 在功能上分成了EU和BIU两部分,BIU负责取指令,EU负责指令的执行,它们之间既互相独立又互相配合,使得8086可以在执行指令的同时进行取指令的操作,即实现了取指令和执行指令的并行工作,大大提高了CPU和总线的利用率,从而提高了指令的处理速度。
8.8086 CPU中地址加法器的重要性体现在哪里? 答:地址加法器是8086 CPU的总线接口单元中的一个器件,在8086存储器分段组织方式中它是实现存储器寻址的一个关键器件,地址加法器将两个16位寄存器中的逻辑地址移位相加,得到一个20位的实际地址,把存储器寻址空间从64K扩大到1M,极大地扩大了微型计算机的程序存储空间,从而大大提高了程序运行效率。9.8086 CPU中有哪些寄存器?分组说明用途。哪些寄存器用来指示存储器单元的偏移地址? 答:8086 CPU中有8个通用寄存器AX、BX、CX、DX、SP、BP、SI、DI;两个控制寄存器IP、FL;四个段寄存器CS、DS、SS、ES。8个通用寄存器都可以用来暂存参加运算的数据或中间结果,但又有各自的专门用途。例如,AX专用做累加器,某些指令指定用它存放操作数和运算结果;CX为计数寄存器,在某些指令中做计数器使用;DX为数据寄存器;BX为基址寄存器,BP为基址指针,SI为源变址寄存器,DI为目的变址寄存器,这4个寄存器在数据寻址中用来存放段内偏移地址(有效地址)或段内偏移地址的一部分;SP为堆栈指示器,用来存放栈顶有效地址。两个控制寄存器用来存放有关的状态信息和控制信息。例如,标志寄存器FL用来存放状态标志和控制标志;而指令指针用来存放下一条要取指令的有效地址。四个段寄存器用来存放段地址。例如,CS寄存器用来存放代码段的段地址;DS寄存器用来存放数据段的段地址;SS寄存器用来存放堆栈段的段地址;ES寄存器用来存放扩展段的段地址。
10.8086系统中存储器的逻辑地址由哪两部分组成?物理地址由何器件生成?如何生成?每个段的逻辑地址与寄存器之间有何对应关系?
答:8086系统中存储器的逻辑地址由段地址(段首址)和段内偏移地址(有效地址)两部分组成;存储单元的物理地址由地址加法器生成,寻址时,CPU首先将段地址和段内偏移地址送入地址加法器,地址加法器将段地址左移4位并与段内偏移地址相加,得到一个20位的物理地址。数据段的段地址在DS寄存器中,段内偏移地址可能在BX、BP、SI或DI寄存器中。代码段的段地址在CS寄存器中,段内偏移地址在IP寄存器中。堆栈段的段地址在SS寄存器中,段内偏移地址在SP寄存器中。扩展段的段地址在ES寄存器中,段内偏移地址可能在BX、BP、SI或DI寄存器中。
11.设 AX=2875H、BX=34DFH、SS=1307H、SP=8H,依此执行 PUSH AX、PUSH BX、POP AX、POP CX后栈顶指针变为多少?AX=? BX=? CX=?
答:当前栈顶指针=SS*10H+SP=13070H+8H=13078H,依此执行PUSH AX、PUSH BX、POP AX、POP CX后栈顶指针仍为13078H。但AX=34DFH,BX=34DFH,CX=2875H。
12.写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。要求使用以下几种寻址方式:
(1)寄存器间接寻址(2)寄存器相对寻址(3)基址变址寻址 答:(1)使用寄存器间接寻址,把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令为:
MOV BX,OFFSET BLOCK
ADD BX,12
MOV DX,[BX](2)使用寄存器相对寻址,把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令为:
LEA BX,BLOCK
MOV DX,[BX+12](3)使用基址变址寻址,把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令为:
LEA BX,BLOCK
MOV SI,12
MOV DX,[BX+SI] 13.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器的内容。
(1)MOV AX,1200;
(AX)=
(2)MOV AX,BX;
(AX)=
(3)MOV AX,[1200H];
(AX)=
(4)MOV AX,[BX];
(AX)=
(5)MOV AX,[BX+1100];
(AX)=
(6)MOV AX,[BX+SI];
(AX)=
(7)MOV AX,[BX+SI+1100];
(AX)=
答:(1)指令MOV AX,1200H执行完后AX寄存器的内容为1200H;(2)指令MOV AX,BX执行完后AX寄存器的内容为0100H;
(3)指令MOV AX,[1200H]是将从物理地址=(DS)*10H+1200H=21200H开始的两个单元内容送AX,执行完后AX寄存器的内容为4C2AH;(4)指令MOV AX,[BX]是将从物理地址=(DS)*10H+(BX)=20100H开始的两个单元内容送AX,故执行完后AX寄存器的内容为3412H;
(5)指令MOV AX,[BX+1100]是将从物理地址=(DS)*10H+(BX)+1100H=21200H开始的两个单元内容送AX,故执行完后AX寄存器的内容为4C2AH;
(6)指令MOV AX,[BX+SI]是将从物理地址=(DS)*10H+(BX)+(SI)=20102H开始的两个单元内容送AX,故执行完后AX寄存器的内容为7856H;(7)指令MOV AX,[BX+SI+1100]是将从物理地址=(DS)*10H+(BX)+(SI)+1100H=21202H开始的两个单元内容送AX,故执行完后AX寄存器的内容为65B7H;
14.假设已知(DS)=2900H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)= 0100H,(BP)=0010H,数据段中变量名VAL的偏移地址值为0050H,试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?
(1)MOV AX,0ABH
(2)MOV AX,BX(3)MOV AX,[100H]
(4)MOV AX,VAL(5)MOV AX,[BX]
(6)MOV AX,ES:[BX](7)MOV AX,[BP]
(8)MOV AX,[SI](9)MOV AX,[BX+10]
(10)MOV AX,VAL[BX](11)MOV AX,[BX][SI]
(12)MOV AX,[BP][SI] 答:(1)在指令 MOV AX,0ABH 中,源操作数字段的寻址方式是立即数寻址,其物理地址值=(CS)*10H+(IP);
(2)在指令 MOV AX,BX 中,源操作数字段的寻址方式是寄存器寻址,操作数在BX中,无物理地址;
(3)在指令 MOV AX,[100H] 中,源操作数字段的寻址方式是直接寻址,其物理地址值=(DS)*10H+100 =29000H+100H=29100;(4)在指令 MOV AX,VAL 中,源操作数字段的寻址方式是直接寻址,其物理地址值=(DS)*10H+50H =29000H+50H=29050H;
(5)在指令 MOV AX,[BX] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(DS)*10H +(BX)=29000H+100H=29100H;
(6)在指令 MOV AX,ES:[BX] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(ES)*10H+(BX)=21000H+100H=21100H;
(7)在指令 MOV AX,[BP] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(SS)*10H +(BP)=15000H+10H=15010H;
(8)在指令 MOV AX,[SI] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(DS)*10H +(SI)=29000H+0A0H=290A0H;
(9)在指令 MOV AX,[BX+10] 中,源操作数字段的寻址方式是寄存器相对寻址,其物理地址值=(DS)*10H+(BX)+0AH= 29000H+100H+0AH =2910AH;
(10)在指令 MOV AX,VAL[BX] 中,源操作数字段的寻址方式是寄存器相对寻址,其物理地址值=(DS)*10H+(BX)+50H= 29000H+100H+50H= 29150H;
(11)在指令 MOV AX,[BX][SI] 中,源操作数字段的寻址方式是基址变址寻址,其物理地址值=(DS)*10H+(BX)+(SI)=29000H+100H+0A0H =291A0H;
(12)在指令 MOV AX,[BP][SI] 中,源操作数字段的寻址方式是基址变址寻址,其物理地址值=(SS)*10H+(BP)+(SI)=15000H+10H+0A0H =150B0H 15.分别指出下列指令中的源操作数和目的操作数的寻址方式。(1)MOV SI,200(2)MOV CX,DATA[SI](3)ADD AX,[BX+DI](4)AND AX,BX(5)MOV [SI],AX 答:(1)目的操作数字段的寻址方式是寄存器寻址,源操作数字段的寻址方式是立即数寻址;(2)目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式是寄存器相对寻址;(3)目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式是基址变址寻址;(4)目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式也是寄存器寻址;(5)目的操作数的寻址方式是寄存器间接寻址,源操作数的寻址方式是寄存器寻址; 16.写出以下指令中内存操作数的所在物理地址。(1)MOV AL,[BX+5](2)MOV [BP+5],AX(3)INC BYTE PTR [SI+3](4)MOV DL,ES:[BX+DI](5)MOV BX,[BX+SI+2] 答:(1)指令MOV AL,[BX+5]中内存操作数的所在地址=(DS)*10H+(BX)+5;
(2)指令MOV [BP+5],AX中内存操作数的所在地址=(SS)*10H+(BP)+5和(SS)*10H+(BP)+6;
(3)指令INC BYTE PTR[SI+3]中内存操作数的所在地址=(DS)+(SI)+3;
(4)指令MOV DL,ES:[BX+DI]中内存操作数的所在地址=(ES)*10H+(BX)+(DI);(5)指令MOV BX,[BX+SI+2]中内存操作数的所在地址=(DS)*10H+(BX)+(SI)+2和(DS)*10H+(BX)+(SI)+3;
17.判断下列指令书写是否正确,如有错误,指出错在何处。(1)MOV AL,BX
(9)MOV ES,3278H(2)MOV AL,SL
(10)PUSH AL(3)INC [BX]
(11)POP [BX](4)MOV 5,AL
(12)MOV [1A8H],23DH(5)MOV [BX],[SI]
(13)PUSH IP
(6)MOV BL,F5H
(14)MOV [AX],23DH(7)MOV DX,2000H
(15)SHL AX,5(8)POP CS
(16)MUL AX,BX 答:(1)MOV AL,BX 错,源操作数为字类型,目的操作数为字节类型,二者不一致。应改为:MOV AX,BX 或
MOV AL,BL ;
(2)MOV AL,SL 错,SI寄存器不能分为高8位和低8位使用,即没有SL寄存器。应改为:MOV AX,SI(3)INC [BX] 错,未指定操作数的类型。应改为:INC BYTE PTR [BX]
(4)MOV 5,AL 错,目的操作数使用了立即数,在指令中一般不允许。应改为:MOV DS:[5],AL
(5)MOV [BX],[SI] 错,源操作数和目的操作数均为内存单元,不允许。应改为:MOV AX,[SI] MOV [BX],AX(6)MOV BL,F5H 错,源操作数错,以A~F开头的数字前应加0。应改为:MOV BL,0F5H(7)MOV DX,2000H 正确。
(8)POP CS 错,不能将栈顶数据弹至CS中。
(9)MOV ES,3278H 错,立即数不能直接送ES寄存器。应改为:MOV AX,3278H MOV ES,AX(10)PUSH AL 错,栈操作不能按字节进行。应改为:PUSH AX(11)POP [BX] 正确。
(12)MOV [1A8H],23DH 错,源操作数是立即数,目的操作数必须使用寄存器指出。应改为:
MOV BX,1A8H
MOV [BX],23DH
(13)PUSH IP 错,不能用IP寄存器做源操作数。
(14)MOV [AX],23DH 错,不能用AX寄存器间接寻址。应改为:MOV BX,AX
MOV [BX],23DH(15)SHL AX,5 错,不能用大于己于1的立即数指出移位位数。应改为: MOV CL,5 SHL AX,CL(16)MUL AX,BX 错,目的操作数AX是隐含的,不能在指令中写出。应改为:MUL BX 18.设堆栈指针SP的初值为2000H,AX=3000H,BX=5000H,试问:(1)执行指令PUSH AX后(SP)=?
(2)再执行PUSH BX及POP AX后(SP)=?(AX)=?(BX)=? 答:(1)执行指令PUSH AX后(SP)=2000H-2=1FFEH;(2)再执行PUSH BX及POP AX后(SP)=1FFEH,(AX)=5000H,(BX)=5000H 19.要想完成把[2000H]送[1000H]中,用指令:MOV [1000H],[2000H]是否正确?如果不正确,应用什么方法? 答:把[2000H]送[1000H]中,用指令 MOV [1000H],[2000H]不正确,应改为:MOV AX,[2000H] MOV [1000H],AX
五、编写程序段(每小题2.5分共15分)分别写出实现如下功能的程序段
(1)双字减法(被减数7B1D2A79H,减数53E2345FH)。(2)使用移位指令实现一个字乘18的运算。(3)使用移位指令实现一个字除以10的运算。
(4)将AX中间8位,BX低四位,DX高四位拼成一个新字。
(5)将数据段中以BX为偏移地址的连续四个单元的内容颠倒过来
(6)将BX中的四位压缩BCD数用非压缩BCD数形式顺序放在AL、BL、CL、DL中。答:(1)双字减法的程序段是:
MOV AX,2A79H
;被减数的低位字送AX SUB AX,345FH
;低位字相减,结果送AX MOV BX,7B1DH
;被减数的高位字送BX SBB BX,53E2H
;高位字相减处并减去低位字相减产生的借位,结果送BX(2)使用移位指令实现一个字乘18的程序段是:
MOV AX,05F7H
;被乘数送AX SHL AX,1
;被乘数乘以2,结果在AX中
MOV BX,AX
;被乘数乘以2的结果暂存到BX MOV CL,3
;设置移位位数3 SHL AX,CL
;被乘数再乘以8(共乘以16),结果在AX中
ADD AX,BX
;被乘数再乘以18,结果在AX中(3)使用移位指令实现一个字除以10的运算,必须将X/10拆分成多项的和,而每一项都应是非的某次幂的倒数。利用等比级数的前N项和公式,可求出A0=X/8,公比Q=-1/4,故X/10=X/8-X/32+X/128-X/512+..., 所求的程序段是:
MOV AX,FE00H
;被除数送AX MOV CL,3
;设置移位位数3 SHR AX,CL
;被乘数除以8,结果在AX中
MOV BX,AX
;被乘数除以8的结果暂存到BX MOV CL,2
;设置移位位数2 SHR AX,CL
;被乘数除以4(累计除32),结果在AX中
SUB BX,AX
;被除数/8-被除数/32,结果在BX中
MOV CL,2
;设置移位位数2 SHR AX,CL
;被乘数除以4(累计除128),结果在AX中
ADD BX,AX
;被除数/8-被除数/32+被除数/128,结果在BX中
MOV CL,2
;设置移位位数2 SHR AX,CL
;被乘数除以4(累计除512),结果在AX中
SUB BX,AX
;被除数/8-被除数/32+被除数/128-被除数/512,结果在BX中(4)将AX中间8位,BX低四位,DX高四位拼成一个新字的程序段是:
AND DX,0F000H
;将DX的低12位清零,高4位不变
AND AX,0FF0H
;将AX的低4位清零,高4位清零,中间8位不变
AND BX,0FH
;将BX的高12位清零,低4位不变
ADD AX,BX ADD AX,DX
;按要求组成一个新字,结果放在AX中。
(5)将数据段中以BX为偏移地址的连续四个单元的内容颠倒过来的程序段是: MOV AL,[BX]
;数据段中BX为偏移地址的字单元内容送AX XCHG AL,[BX+3]
;数据段中BX+3为偏移地址的字单元内容与AX的内容交换
MOV [BX],AL
;数据段中BX+3为偏移地址的字单元内容送BX为偏移地址的字单元 MOV AL,[BX+1]
;数据段中BX+1为偏移地址的字单元内容送AX XCHG AL,[BX+2]
;数据段中BX+2为偏移地址的字单元内容与AX的内容交换
MOV [BX+1],AL
;数据段中BX+2为偏移地址的字单元内容送BX+1为偏移地址的字单元(6)将BX中的四位压缩BCD数用非压缩BCD数形式顺序放在AL、BL、CL、DL中的程序段是: MOV DL,BL
;四位压缩BCD数的低位字节送DL AND DL,0FH
;DL的高4位清零,得四位非压缩BCD数的最低位,放入DL中 MOV CL,4
;设置移位位数4 SHR BX,CL
;BX中的数据逻辑右移4位,使四位压缩BCD数的次低位位于BL的低4位 MOV CH,BL
;将BL的内容暂存到CH中保留
AND CH,0FH
;CH的高4位清零,得四位非压缩BCD数的次低位,放CH中 MOV CL,4
;设置移位位数4 SHR BX,CL
;BX中的数据逻辑右移4位,使四位压缩BCD数的次高位位于BL的低4位 MOV AL,BL
;将BL的内容暂存到AL中保留
AND BL,0FH
;BL的高4位清零,得四位非压缩BCD数的次高位,放BL中 MOV CL,4
;设置移位位数4 SHR AL,CL
;使四位压缩BCD数的最高位位于AL的低4位,得四位非压缩BCD数的次高 ;位,放入BL中
MOV CL,CH
;将四位非压缩BCD数的次低位移入CL中
六、编程题(每小题8分共16分)
1.假设在数据段、附加段和堆栈段中分别定义了字变量X、Y和Z,试编制一完整的程序计算 X+Y+Z,并将结果送X。(X=12EH,Y=4D2H,Z=2CAH)答:所求程序为: X_SEG SEGMENT
X DW 12eH X_SEG ENDS Y_SEG SEGMENT
Y DW 4d2H Y_SEG ENDS Z_SEG SEGMENT STACK ‘STACK’
Z DW 2CAH Z_SEG ENDS Code SEGMENT
ASSUME CS:Code,DS:X_SEG,ES:Y_SEG,SS:Z_SEG
Start: MOV AX, X_SEG
MOV DS, AX MOV AX, Y_SEG MOV ES, AX MOV AX,ES:Y ADD X, AX MOV BP, 0 MOV AX, [BP+Z] ADD X, AX MOV AH, 4CH INT 21H Code ENDS
END Start 2.写一个完整的程序放在代码段中,要求把数据段中的DADD1和附加段中的DADD2相加,并把结果存放在数据段中的SUM中。其中DADD1、DADD2为压缩BCD码,DADD1赋值为9876H,DADD2赋值为0F58AH。答:所求程序为: D_SEG SEGMENT
DADD1 DW 9876H
SUM 3 DUP(?)D_SEG ENDS E_SEG SEGMENT
DADD2 DW 0F58AH E_SEG ENDS C_SEG SEGMENT
ASSUME CS: C_SEG,DS:D_SEG,ES:E_SEG
Start: MOV AX, D_SEG
MOV DS, AX
MOV AX, E_SEG
MOV ES, AX..MOV AH, 4CH
INT 21H C_SEG ENDS
END Start