计算机原理习题答案.docx
《计算机原理习题答案.docx》由会员分享,可在线阅读,更多相关《计算机原理习题答案.docx(20页珍藏版)》请在冰豆网上搜索。
![计算机原理习题答案.docx](https://file1.bdocx.com/fileroot1/2022-12/14/6f484387-1f8e-4081-82d8-b2758bf28927/6f484387-1f8e-4081-82d8-b2758bf289271.gif)
计算机原理习题答案
第四章80x86汇编语言程序设计
习题与答案
1、指出以下数据定义伪指令所分配的字节数(8086系统)。
(1)DATA1DB10,?
,‘A’
(2)DATA2DW10DUP(2,3DUP(?
),1)
(3)DATA3DB‘HELLO,WORLD!
’,‘$’
(4)DATA4DWDATA4
解:
(1)3字节;
(2)100字节;(3)13字节;(4)2字节。
2、指出以下数据定义伪指令所分配的字节数(80386系统)。
(1)DATA1DF12,34,56
(2)DATA2DFDATA2
(3)DATA3DQ0,10DUP(?
)
(4)DATA4DT0,1,2
解:
(1)18字节;(3)6字节;(3)88字节;(4)30字节。
3、指出以下指令中哪些是无效的,并说明原因。
(1)ADDRDB$
(2)DATADBF0H,12H
(3)1_DATADW1234H
(4)@VARDWVAR1;VAR1为一个字节变量
(5)MOVAX,[10-VAR1];VAR1为一个字变量
(6)MOVBX,[VAR2*2+1];VAR2为一个字变量
解:
(1)非法,地址计数器$是32位数;
(2)非法,以字母开头的16进制数应在前面加“0”,即应为“0F0H”;
(3)非法,变量名非法,不能以数字开头;
(4)合法;
(5)非法,地址表达式不能是“常数-地址”;
(6)非法,地址表达式不能出现乘法。
4、假设已定义数据段如下:
DATASEGMENT
ORG100H
DATA1DB10DUP(1,2,3)
DATA2DWDATA1,$
DATAENDS
且段寄存器DS已初始化为该数据段的段基址(假设段基址为1234H)。
请指出以下指令执行后,相应的寄存器中的内容。
(1)MOVAX,WORDPTRDATA1;(AX)=?
(2)MOVBX,DATA2;(BX)=?
(3)MOVCX,DATA2+2;(CX)=?
(4)MOVDX,OFFSETDATA2;(DX)=?
(5)MOVSI,SEGDATA1;(SI)=?
(6)MOVDI,LENGTHDATA1;(DI)=?
(7)MOVSP,TYPEDATA1;(SP)=?
(8)MOVBP,SIZEDATA2;(BP)=?
解:
(1)(AX)=0201H;
(2)(BX)=0100H;(3)(CX)=0120H;(4)(DX)=011EH;
(5)(SI)=1234H;(6)(DI)=000AH;(7)(SP)=0001H;(8)(BP)=0002H。
5、在8086系统下,编写完整程序,实现从键盘上输入8位二进制数,从显示器上显示相应的16进制数,例如从键盘上输入“00010010”,应在显示器上显示“12H”。
解:
参考程序:
DATASEGMENT
MSG1DB'Inputbinarynumber(ESCtoexit):
','$'
MSG2DB0AH,0DH,'Inputerror!
',0AH,0DH,'$'
DATAENDS
OUTPUTMACROASC;定义输出一个字符的宏
MOVDL,ASC
MOVAH,2
INT21H
ENDM
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
AGAIN:
LEADX,MSG1
MOVAH,9
INT21H;提示输入信息
MOVCX,8;输入8位二进制数
MOVBL,0
L:
MOVAH,1
INT21H
SHLBL,1
CMPAL,1BH;ESC键退出
JZDONE
CMPAL,'0';输入“0”
JZNEXT
CMPAL,'1';输入“1”
JNZERROR;输入其他则出错
INCBL
NEXT:
LOOPL
OUTPUT0AH
OUTPUT0DH
PUSHBX
MOVCL,4
SHRBL,CL
CALLTRAN;显示高4位对应的16进制数
POPBX
ANDBL,0FH
CALLTRAN;显示低4位对应的16进制数
OUTPUT'H'
OUTPUT0AH
OUTPUT0DH
JMPAGAIN
ERROR:
LEADX,MSG2
MOVAH,9
INT21H
JMPAGAIN
DONE:
RET
MAINENDP
TRANPROCFAR
CMPBL,0AH
JBBELOW
ADDBL,7
BELOW:
ADDBL,30H
OUTPUTBL
RET
TRANENDP
CODEENDS
ENDMAIN
6、在8086系统下,编写完整程序,实现从键盘上输入两个4位十进制数,从显示器上显示这两个数之和,例如输入“1234”、“5678”,应在显示器上显示“6912”。
解:
参考程序:
DATASEGMENT
MSG1DB'Inputthefirstnumber(ESCtoexit):
','$'
MSG2DB'Inputthesecondnumber(ESCtoexit):
','$'
MSG3DB0AH,0DH,'Inputerror!
Inputagain:
','$'
DATAENDS
OUTPUTMACROASC;定义输出一个字符的宏
MOVDL,ASC
MOVAH,2
INT21H
ENDM
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAIN:
MOVAX,DATA
MOVDS,AX
AGAIN:
LEADX,MSG1
MOVAH,9
INT21H;提示输入第一个数
CALLINPUT;输入过程
PUSHBX
OUTPUT0AH
OUTPUT0DH
LEADX,MSG2
MOVAH,9
INT21H;提示输入第二个数
CALLINPUT;输入过程
OUTPUT0AH
OUTPUT0DH
POPAX;实现两个4位组合BCD码相加
ADDAL,BL;低8位相加
DAA;校正
MOVCL,AL;保存至CL
ADCAH,BH;高8位相加
MOVAL,AH;移至AL
DAA;校正
MOVAH,AL
MOVAL,CL
MOVBX,AX;最后结果放在BX中
JNCNEXT
OUTPUT'1';如果相加结果大于9999,则显示进位“1”
NEXT:
PUSHBX
MOVCL,4
SHRBH,CL
ADDBH,30H
OUTPUTBH;显示千位数
POPBX
PUSHBX
ANDBH,0FH
ADDBH,30H
OUTPUTBH;显示百位数
POPBX
PUSHBX
MOVCL,4
SHRBL,CL
ADDBL,30H
OUTPUTBL;显示十位数
POPBX
ANDBL,0FH
ADDBL,30H
OUTPUTBL;显示个位数
OUTPUT0AH
OUTPUT0DH
JMPAGAIN
INPUTPROCFAR;输入一个4位十进制数的过程
BEGIN:
MOVCX,4
MOVBX,0
L:
SHLBX,1
SHLBX,1
SHLBX,1
SHLBX,1;BX的值乘以16
MOVAH,1
INT21H;输入
CMPAL,1BH;ESC键退出
JZDONE
CMPAL,'0'
JBERROR;非数字,出错
CMPAL,'9'
JAERROR;非数字,出错
SUBAL,30H
XORAH,AH
ADDBX,AX;将输入加到BX中
LOOPL
RET
ERROR:
LEADX,MSG3
MOVAH,9
INT21H
JMPBEGIN
DONE:
MOVAH,4CH
INT21H
INPUTENDP
CODEENDS
ENDMAIN
7、在8086系统下,编写完整程序,实现两个32位带符号数相乘。
假设被乘数存放在以字变量MUL1开始的连续4个字节中,乘数存放在以字变量MUL2开始的连续4个字节中中,相乘结果存放在以字变量RES开始的连续8个字节中。
解:
参考程序:
DATASEGMENT
MUL1DW0FFFFH,0FFFFH;被乘数
MUL2DW5678H,1234H;乘数
RESDW4DUP(0);结果
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVCX,MUL1
MOVBP,MUL1+2
MOVSI,MUL2
MOVDI,MUL2+2
TESTBP,8000H;被乘数是否为负数
JZNEXT1
NOTBP;为负数,则取反加1
NOTCX
ADDCX,1
ADCBP,0
NEXT1:
TESTDI,8000H;乘数是否为负数
JZNEXT2
NOTSI;为负数,则取反加1
NOTDI
ADDSI,1
ADCDI,0
NEXT2:
MOVAX,SI;相乘过程
MULCX
MOVRES,AX
MOVRES+2,DX
MOVAX,SI
MULBP
ADDRES+2,AX
ADCRES+4,DX
MOVAX,DI
MULCX
ADDRES+2,AX
ADCRES+4,DX
MOVAX,DI
MULBP
ADDRES+4,AX
ADCRES+6,DX
MOVAX,MUL1+2
XORAX,MUL2+2;判断被乘数和乘数是否同号
JNSDONE;同号,则结果为正数,无须修改结果
NOTRES;不同号,则结果为负数,须取反加1
NOTRES+2
NOTRES+4
NOTRES+6
ADDRES,1
ADCRES+2,0
ADCRES+4,0
ADCRES+6,0
DONE:
RET
MAINENDP
CODEENDS
ENDMAIN
8、在8086系统下,编写完整程序,找出字节数组ARRAY中的最大值和最小值。
假设ARRAY的长度为100个字节,每个字节为一个无符号数,程序执行后最大值将存放到字节变量MAX中,最小值则存放到字节变量MIN中。
解:
参考程序:
DATASEGMENT
ARRAYDB100DUP(?
);字节数组
MAXDB?
;最大值
MINDB?
;最小值
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
LEASI,ARRAY
CLD
MOVBH,0;存放临时最大值的寄存器
MOVBL,0FFH;存放临时最小值的寄存器
MOVCX,100
AGAIN:
LODSB
CMPAL,BH
JNANEXT1
MOVBH,AL;如果当前数值比临时最大值大,则代替
NEXT1:
CMPAL,BL
JNBNEXT2
MOVBL,AL;如果当前数值比临时最小值小,则代替
NEXT2:
LOOPAGAIN
MOVMAX,BH
MOVMIN,BL
RET
MAINENDP
CODEENDS
ENDMAIN
9、在8086系统下,编写完整程序,将字节数组ARRAY中的所有数据往高地址的方向移动一位,即原来存放在ARRAY中的字节移动到ARRAY+1中,原来存放在ARRAY+1中的字节移动到ARRAY+2中,……,依此类推。
假设ARRAY的长度为100个字节。
解:
可利用MOVSB指令实现移位,但应该注意,必须从串尾开始移动,因为假如直接从串头开始,将串头移到第二个数,那么第二个数将被覆盖。
为使程序能从串尾开始移动,可令方向标志位DF=1。
参考程序:
DATASEGMENT
ARRAYDB100DUP(?
),?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEASI,ARRAY+99;SI指向源串尾
LEADI,ARRAY+100;DI指向新串尾
STD;DF=1,串尾先移动
MOVCX,100
REPMOVSB;循环移动
RET
MAINENDP
CODEENDS
ENDMAIN
10、在8086系统下,编写在长字符串L_STR中查找短字符串S_STR的完整程序,如果找到匹配的字符串,则将字节变量RES置0FFH,否则置0。
例如,在字符串“ABABCD”中可找到字符串“ABC”,则RES=0FFH。
解:
参考程序:
DATASEGMENT
L_STRDB'ABDABABCD';长串
L_LTHDW$-L_STR;长串长度
S_STRDB'ABC';短串
S_LTHDW$-S_STR;短串长度
RESDB?
;存放结果
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEASI,L_STR
LEADI,S_STR
CLD
MOVCX,L_LTH
SUBCX,S_LTH
INCCX;作串比较的次数
AGAIN:
CALLCOMP;进行串比较
INCSI
LOOPAGAIN
MOVRES,0
RET
MAINENDP
COMPPROCFAR
PUSHCX
PUSHSI
PUSHDI
MOVCX,S_LTH
REPZCMPSB
JZYES;如果两个串相同,则说明找到
POPDI
POPSI
POPCX
RET
YES:
MOVRES,0FFH
MOVAH,4CH
INT21H
COMPENDP
CODEENDS
ENDMAIN
11、在80386系统下,编程实现两个64位无符号数相乘。
解:
参考程序:
.386
.MODELSMALL
.DATA
MUL1DD3456789AH,12345678H;被乘数
MUL2DD789ABCDEH,3456789AH;乘数
RESDD4DUP(0);存放128位结果,初始化为0
.CODE
MAIN:
MOVAX,@DATA
MOVDS,AX
MOVEAX,MUL2
MULMUL1
MOVRES,EAX
MOVRES+4,EDX
MOVEAX,MUL2
MULMUL1+4
ADDRES+4,EAX
ADCRES+8,EDX
MOVEAX,MUL2+4
MULMUL1
ADDRES+4,EAX
ADCRES+8,EDX
MOVEAX,MUL2+4
MULMUL1+4
ADDRES+8,EAX
ADCRES+12,EDX
MOVAH,4CH
INT21H
ENDMAIN
《计算机原理及系统结构》复习题
1.若十进制数据为137.5则其八进制数为()。
A.B.C.D.
2.Cache是在()之间设置的高速缓存。
A.CPU与辅存B.CPU与主存C.主存与辅存D.主存与寄存器
3.计算机输入输出系统的设计主要考虑如何在操作系统和输入输出系统之间()。
A.建立高速的数据传送通道
B.进行合理的软、硬件功能分配
C.建立高效的I/O映象及自动生成通道程序
D.进行快速编译
4.CRT的分频率为1024×1024像素,像素的颜色数为256色,则刷新存储器的容量是()。
A.512KBB.1MBC.256KBD.2MB
5.存储器是计算机系统的记忆设备,主要用于()。
A.存放程序B.存放软件C.存放微程序D.存放程序和数据
6.下列数中最大的数是()。
A.(10011001)2B.(227)8C.(98)16D.(152)10
7.为了缩短指令中某个地址段的位数,有效的方法是采取()。
A.立即寻址B.变址寻址C.间接寻址D.寄存器寻址
8.下面叙述中,()是正确的。
A.总线一定要和接口相连B.接口一定要和总线相连
C.通道可以替代接口D.总线始终由CPU控制和管理
9.下面叙述中,()是正确的。
A.总线一定要和接口相连B.接口一定要和总线相连
C.通道可以替代接口D.总线始终由CPU控制和管理
10.CRT的分频率为1024×1024像素,像素的颜色数为256色,则刷新存储器的容量是()。
A.512KBB.1MBC.256KBD.2MB
11.微指令由()直接执行。
A.硬件B.编译程序C.微指令程序D.机器指令
12.若x补=0.1101010,则x原=()。
A.B.C.D.
13.EPROM是指()。
A.读写存储器B.只读存储器
C.可编程的只读存储器D.光擦除可编程的只读存储器
14.透明性是指()。
A.某一事物或属性实际存在,但从某种角度来看好象不存在,或者说看不出来。
B.某一事物或属性不存在,但感觉好象存在,或者说看起来存在。
C.某一事物或属性实际存在,但从任何角度来看好象不存在,或者说看不出来。
D.某一事物或属性不存在,但从某种角度来看好象存在,或者说看起来存在。
15.下列数中最大的数是()。
A.(10011001)2B.(227)8C.(98)16D.(152)10
16.系统总线中地址线的功能是()。
A.用于选择主存单元地址B.用于选择进行信息传输的设备
C.用于选择外存地址D.用于指定主存和I/O设备接口电路的地址
17.存储器是计算机系统的记忆设备,主要用于()。
A.存放程序B.存放软件C.存放微程序D.存放程序和数据
18.计算机输入输出系统的设计主要考虑如何在操作系统和输入输出系统之间()。
A.建立高速的数据传送通道
B.进行合理的软、硬件功能分配
C.建立高效的I/O映象及自动生成通道程序
D.进行快速编译
19.采用DMA方式传送数据时,每传送一个数据要占用()的时间。
A.一个指令周期B.一个机器周期C.一个时钟周期D.一个存储周期
20.原码乘法是()。
A.先取操作数绝对值相乘,符号位单独处理
B.用原码表示操作数,然后直接相乘
C.被乘数用原码表示,乘数取绝对值,然后相乘
D.乘数用原码表示,被乘数取绝对值,然后相乘
21.用某个寄存器中操作数的寻址方式称为()寻址。
A直接B间接C寄存器直接D寄存器间接
22.半导体静态存储器SRAM的存储原理是()。
A.依靠双稳态电路B.依靠定时刷新C.依靠读后再生D.信息不再变化
23.若某数x的真值为-0.1010,在计算机中该数表示为1.0110,则该数所用的编码为()。
24.原码加减交替除法又称为不恢复余数法,因此()。
A.不存在恢复余数的操作
B.当某一步运算不够减时,做恢复余数的操作
C.仅当最后一步余数为负时,做恢复余数的操作
D.当某一步余数为负时,做恢复余数的操作
25.在ROM存储器中必须有(
26.下列有关运算器的描述中,()是正确的。
A.只做算术运算,不做逻辑运算B.只做加法
C.能暂时存放运算结果D.既做算术运算,又做逻辑运算
27.流水CPU是由一系列叫做“段”的处理线路所组成,和具有m个并行部件的CPU相比,一个m段流水CPU()。
28.构成存储层次的主要依据是()。
A.高速存储器件的迅速发展B.多体交叉存储器的采用
C.程序的局部性D.操作系统的功能扩展
29.程序的局部性包括()。
A.时间上的局部性和空间上的局部性
B.静态性能局部性和动态性能局部性
C.Cache中的局部性和主存中的局部性
D.主存中的局部性和辅存中的局部性
30.指令系统是表征一台计算机性能的重要因素,它的______和______不仅影响到机器的硬件结构,而且也影响到______。
31.是否采用通道方式输入输出的确定属于______,通道采用结合型还是独立型属于______。
32.模拟是指用______解释,实现______的方法。
33.主存储器的性能指标主要是__________、__________、存储周期和存储器带宽。
34.微指令设计方法包括__________、__________、垂直型微指令法。
35.运算器的两个主要功能是:
__________,__________。
36.寻址方式在指令中有两种指明方式,一是通过来指明,二是通过来指明。
37.存储器和CPU连接时,要完成__________的连接;__________的连接和__________的连接,方能正常工作。
38.CISC(复杂指令系统的计算机)和RISC(精简指令系统的计算