微机原理汇编语言与接口技术周杰英张萍习题答案汇总.docx
- 文档编号:11256827
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:12
- 大小:21.86KB
微机原理汇编语言与接口技术周杰英张萍习题答案汇总.docx
《微机原理汇编语言与接口技术周杰英张萍习题答案汇总.docx》由会员分享,可在线阅读,更多相关《微机原理汇编语言与接口技术周杰英张萍习题答案汇总.docx(12页珍藏版)》请在冰豆网上搜索。
微机原理汇编语言与接口技术周杰英张萍习题答案汇总
微机原理、汇编语言与接口技术周杰英张萍习题答案汇总
第1章绪论习题与参考答案(部分)
1.把下列二进制数转换成十进制数、十六进制数及BCD码形式。
(1)***-*****B=
(2)***-*****.101B=解:
(1)***-*****B=178D=B2H=(000101111000
(2)***-*****.101B=93.625D=5D.AH=(10010011.011000100101)BCD
2.把下列十进制数转换成二进制数。
(1)100D=
(2)1000D=(3)67.21D=解:
(1)100D=***-*****B
(2)1000D=***-*****00B(3)67.21D=***-*****.0011B
3.把下列十六进制数转换成十进制数、二进制数。
)BCD
(1)
(2)解:
2B5H=4CD.A5H=
(1)2B5H=693D=001010110101B
(2)4CD.A5H=1229.6445D=010011001101.10100101B
4.计算下列各式。
(1)A7H+B8H=
(2)E4H-A6H=解:
(1)A7H+B8H=15FH
(2)E4H-A6H=3EH
5.写出下列十进制数的原码、反码和补码。
(1)+89
(2)-37解:
(1)[+89]原码、反码和补码为:
***-*****B
(2)[-37]原码=***-*****B
[-37]反码=***-*****B
[-37]补码=***-*****B
6.求下列用二进制补码表示的十进制数
(1)(***-*****)补=
(2)(***-*****)补=解:
(1)(***-*****)补=77D
(2)(***-*****)补=-75D
7.请用8位二进制数写出下列字符带奇校验的ASCII码。
(1)C:
***-*****
(2)O:
***-*****(3)M:
***-*****(4)P:
***-*****解:
(1)C:
0***-*****
(2)O:
0***-*****(3)M:
1***-*****(4)P:
1***-*****
8.请用8位二进制数写出下列字符带偶校验的ASCII码。
(1)+:
***-*****
(2)=:
***-*****(3)#:
***-*****(4):
***-*****
解:
(1)+:
0***-*****
(2)=:
1***-*****(3)#:
1***-*****(4):
1***-*****
9.叙述CPU中PC的作用。
解:
PC是CPU中的程序计数器,其作用是提供要执行指令的地址。
第2章微处理器的结构
习题与参考答案
1.8086/8088CPU由哪两大部分组成?
请分别叙述它们的功能。
解:
8086/8088CPU均由两个独立的逻辑单元组成,一个称为总线接口单元BIU(BusInterfaceUnit),另一个称为执行单元EU(ExecutionUnit)。
总线接口单元BIU取指令时,从存储器指定地址取出指令送入指令队列排队;执行指令时,根据EU命令对指定存储器单元或I/O端口存取数据。
执行单元EU任务是执行指令,进行全部算术逻辑运算、完全偏移地址的计算,向总线接口单元BIU提供指令执行结果的数据和偏移地址,并对通用寄存器和标志寄存器进行管理。
2.8086/8088与传统的计算机相比在执行指令方面有什么不同?
这样的设计思想有什么优点?
解:
总线接口部分和执行部分是分开的,每当EU执行一条指令时,造成指令队列空出2个或空出一个指令字节时,BIU马上从内存中取出下面一条或几条指令,以添满他的指令队列。
这样,一般
情况下,CPU在执行完一条指令后,便可马上执行下一条指令,不像以往8位CPU那样,执行完一条指令后,需等待下一条指令。
即EU从指令队列中取指令、执行指令和BIU补充指令队列的工作是同时进行的。
这样大大提高了CPU利用率,降低了系统都对存储器速度的要求。
3.状态标志和控制标志有何不同?
8086/8088的状态标志和控制标志分别有哪些?
解:
8086/8088CPU设立了一个两字节的标志寄存器,共九个标志。
其中标志位O、S、Z、A、P、C是反映前一次涉及ALU操作结果的状态标志,D、I、T是控制CPU操作特征的控制标志。
4.8086/8088CPU寻址存储器时,什么是物理地址?
逻辑地址?
它们之间有何关系?
解:
8086/8088系统中每个存储单元都有一个物理地址,物理地址就是存储单元的实际地址编码。
在CPU与存贮器之间进行任何信息交换时,需利用物理地址来查找所需要的访问的存储单元。
逻辑地址由段地址和偏移地址两部分组成。
逻辑地址的表示格式为:
段地址:
偏移地址。
知道了逻辑地址,可以求出它对应的物理地址:
物理地址=段地址×10H+偏移地址。
5.段寄存器CS=1200H,指令指针寄存器IP=FF00H,此时,指令的
物理地址为多少?
指向这一物理地址的CS值和IP值是唯一的吗?
解:
根据:
物理地址=段地址×10H+偏移地址,指令的物理地址为21F00H。
指向这一物理地址的CS值和IP值不唯一。
6.8086CPU中BHE信号和A0信号是通过怎样的组合解决存储器和外设端口的读/写的?
这种组合决定了8086系统中存储器偶地址体及奇地址体之间应该用什么信号区分?
怎样区分?
解:
若存取一个字节的数据,总是用一个总线周期来完成该操作;若存取一个字,则依该字是规则字还是不规则字需用一个或两个总线周期来完成。
对规则字,只用一个总线周期来完成16位数据的传送,而对于非规则字则用相邻两个总线周期来完成该字的存储操作,先取其奇地址字节(即数据的低位字节),然后存取偶地址字节。
在组成存储系统时,总是偶地址单元的数据通过AD0~AD7传送,而奇地址单元的数据通过AD8~AD15传送,即通过总线高字节传送。
BHE信号和A0信号控制存储器读写见下表:
操作存取规则字BHEA0使用的数据总线00AD15~AD0AD7~AD00传送偶地址的1一个字节传送奇地址的01AD15~AD8一个字节存取非规则字01AD15~AD(第一个总线8周期)10AD7~AD0(第二个总线周期)
第3章80x86指令系统
习题与参考答案
1、指出下列指令中操作数的寻址方式(8086系统)。
(1)MOVAX,100
(2)MOVAX,(3)MOVDL,[BP+SI](4)MOV[BX],CX(5)MOVDX,[SI](6)MOV1234H[BX],DS(7)MOV[DI+5678H],AL(8)MOV12[BP][DI],BH
(9)POPCX(10)MOVAX,[BX+SI+10]解:
(1)MOVAX,100
(2)MOVAX,(3)MOVDL,[BP+SI](4)MOV[BX],CX(5)MOVDX,[SI]目的操作数寄存器寻址寄存器寻址寄存器寻址源操作数立即数寻址直接寻址基址变址寻址11为非法码寄存器间接寻址寄存器寻址寄存器寻址寄存器间接寻址(6)MOV1234H[BX],DS寄存器相对寻址寄存器寻址(7)MOV[DI+5678H],AL寄存器相对寻址寄存器寻址(8)MOV12[BP][DI],BH相对基址变址寻寄存器寻址址(9)POPCX寄存器寻址隐含为堆栈相对基址变址寻址
2、指出下列指令中操作数的寻址方式(*****系统)。
(1)MOV[EBX+12H],AX
(2)[EBP+EDI*2],EBX
(3)MOV[EBX*4],BX(4)MOVEDX[EAX+ESI*8-12H]解:
目的操作数源操作数MOV,
(10)MOVAX,[BX+SI+10]寄存器寻址
(1)寄存器相对寻址寄存器寻址
(2)基址比例变址寻址寄存器寻址(3)比例变址寻址(4)寄存器寻址
3、指出以下指令中,哪些指令是非法的,并说明为什么(8086系统)。
(1)PUSH1234H
(2)MOVCS,AX(3)INAX,300(4)MOVAX,[DX+12](5)MOVBX,[BX](6)MOVDS,1000H(7)XCHGAL,AL(8)MOVAL,100H(9)MOVDX,AL(10)LEABL,[BX+5](11)LEADX,BX(12)MOV[1000H],12H(13)ADDAX,DS(14)SUB[0100H],BYTEPTR
寄存器寻址相对基址比例变址寻址(15)SHLBL,2(16)SHRCL,CL(17)MULAL,BL(18)INT400
解:
(1)非法,8086系统不允许PUSH指令的操作数为立即数;
(2)非法,MOV指令中CS不能作为目的操作数;(3)非法,端口号大于0FFH;(4)非法,DX不能出现在中括号[]内;(5)合法;
(6)非法,不能把立即数赋给段寄存器;(7)合法;
(8)非法,源操作数大于0FFH,不能赋给8位寄存器AL;(9)非法,源操作数是8位寄存器,目的操作数却是16位寄存器,不匹配;
(10)非法,LEA指令得到的是16位偏移量,但目的操作数是8位寄存器;
(11)非法,LEA指令的源操作数只能是存储器操作数;(12)非法,指令存在歧义,无法确定传送的是字节还是字;(13)非法,段寄存器不能参与算术运算;
(14)非法,源和目的寄存器不能同为存储器操作数;(15)非法,在8086系统中,移位次数大于1时需要将移位次数存放到CL中;(16)合法;
(17)非法,在8086系统中MUL指令没有双操作数的用法;
(18)非法,中断类型号大于0FFH。
4、指出以下指令中,哪些指令是非法的,并说明为什么(*****系统)。
(1)MOVAX,12[EBX][SI*16]
(2)RCREAX,10(3)PUSH5678H(4)POP1000H(5)MOV[EAX+EAX],EAX(6)MOVAL,[ESP+ESP*2]
(7)MOVBL,[AX+12](8)IMULAL,BL,12
解:
(1)非法,比例因子只能是1、2、4、8,不能是16;
(2)合法;(3)合法;
(4)非法,POP指令的目的操作数不能是立即数;(5)合法;
(6)非法,ESP只能作为基址寄存器,不能作为变址寄存器;(7)非法,在386系统中AX不能作为基址寄存器,也不能作为变址寄存器;(8)合法。
5、假设(AX)=1234H,(BX)=5678H,(SP)=1000H,指出执行下面的程序段后,各相关寄存器及堆栈段中的内容。
PUSHAX;(AX)=?
,(BX)=?
,(SP)=?
,栈顶字节[SP]=?
,栈顶第二字节[SP+1]=?
PUSHBX;(AX)=?
,(BX)=?
,(SP)=?
,栈顶字节[SP]=?
,栈顶第二字节[SP+1]=?
POPAX;(AX)=?
,(BX)=?
,(SP)=?
,栈顶字节[SP]=?
,栈顶第二字节[SP+1]=?
解:
(AX)=1234H,(BX)=5678H,(SP)=0FFEH,栈顶字节[SP]=34H,栈顶第二字节[SP+1]=12H
(AX)=1234H,(BX)=5678H,(SP)=0FFCH,栈顶字节[SP]=78H,栈顶第二字节[SP+1]=56H
(AX)=5678H,(BX)=5678H,(SP)=0FFEH,栈顶字节[SP]=34H,栈顶第二字节[SP+1]=12H
6、假设A、B、C、D、X、Y为字节变量,AA、BB、YY为字变量,试利用算术运算指令编写程序段,完成以下各算术运算题。
(1)计算YY←A+B*C,其中A、B、C都是无符号数;
(2)计算(AA+BB)/(C-D),商赋给X,余数赋给Y,其中AA、BB、C、D都是带符号数;
(3)计算YY←(A-B)*C,其中A、B、C都是未组合BCD码。
解:
(1)MOVAL,BMULCADDAL,AADCAH,0MOVYY,AX
(2)MOVAX,AAADDAX,BBMOVBL,CSUBBL,DIDIVBLMOVX,AL
MOVY,AH(3)MOVAL,ASUBAL,BAASMULC
AAM
MOVYY,AX
7、利用移位指令编写程序段,实现以下运算。
(1)计算AX←AX*10,其中AX为无符号数;
(2)32位带符号数存放在寄存器DX和AX中,其中DX存放高16
位,AX存放低16位计算(DX,AX)←(DX,AX)*2。
(3)32位带符号数存放在寄存器DX和AX中,其中DX存放高16
位,AX存放低16位计算(DX,AX)←(DX,AX)/2。
解:
(1)SHLAX,1MOVBX,AXSHLAX,1SHLAX,1ADDAX,BX
(2)SALAX,1RCLDX,1(3)SARDX,1
RCRAX,1
8、指出以下指令执行后,标志寄存器OF、SF、ZF、AF、PF、CF的状态。
(1)(AL)=0FFH,(BL)=20H,执行指令:
ADD
(2)(AL)=01H,(BL)=02H,执行指令:
CMP(3)(AL)=0FFH,执行指令:
INCAL(4)(AL)=0,执行指令:
DECAL
(5)(AL)=0F0H,(BL)=04H,执行指令:
IMUL(6)(AX)=1F0H,(BL)=08H,执行指令:
DIV(7)(AL)=12H,(BL)=34H,执行指令:
TEST(8)(AL)=98H,执行指令:
SALAL,1解:
(1)
(2)(3)(4)(5)(6)(7)(8)OF00000―01SF0101――00ZF0010――00AF0111――――AL,BLAL,BLBLBLAL,BL
PF0111――01CF11××0―01注:
0表示结果为0,1表示结果为1,×表示结果不变,―表示结果不确定。
9、在8086系统下,编写实现如下功能的程序段:
(1)从地址为80H的端口中读入一个字节;
(2)如果该字节最高位为“1”,则将字节0FFH送到地址为81H
的端口中,并退出程序;
(3)如果该字节最高位为“0”,则转向第
(1)步,继续循环扫描。
解:
参考程序段:
AGAIN:
INAL,80H
TESTAL,80HJZAGAINMOVAL,0FFHOUT81H,AL
10、我们知道,MOV指令并不能直接修改CS、IP的值,但事实上,
我们还可以通过其他方法来达到修改CS、IP的目的。
试编写一个程序段,使该程序段运行后,(CS)=0100H,(IP)=0000H。
解:
方法一、利用段间返回指令RETF:
MOVAX,0100H
PUSHAX;段基址入栈MOVAX,0
PUSHAX;偏移量入栈RETF
方法二、利用JMP指令实现段间跳转,假设ADDR为双字变量:
MOVWORDPTRADDR,0;WORDPTRADDR←偏移量
MOVWORDPTRADDR+2,0100H;WORDPTRADDR+2←段基址
JMPDWORDPTRADDR
第4章汇编语言程序设计
习题与参考答案
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、指出以下数据定义伪指令所分配的字节数(*****系统)。
(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、假设已定义数据段如下:
DATA*****
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进制数,例如从键盘上输入“***-*****”,应在显示器上显示“12H”。
解:
参考程序:
DATA*****
MSG1DB'Inputbinarynumber(ESCtoexit):
','$'MSG2DB0AH,0DH,'Inputerror!
',0AH,0DH,'$'DATAENDS
OUTPUTMACROASC;定义输出一个字符的宏
MOVDL,ASCMOVAH,2INT21HENDMCODE*****
ASSUMECS:
CODE,DS:
DATAMAINPROCFAR
PUSHDSMOVAX,0PUSHAX
MOVAX,DATAMOVDS,AXAGAIN:
LEADX,MSG1
MOVAH,9
INT21H;提示输入信息MOVCX,8;输入8位二进制数MOVBL,0L:
MOVAH,1
INT21HSHLBL,1
CMPAL,1BH;ESC键退出JZDONE
CMPAL,'0';输入“0”JZNEXT
CMPAL,'1';输入“1”JNZERROR;输入其他则出错INCBLNEXT:
LOOPL
OUTPUT0AHOUTPUT0DHPUSHBXMOVCL,4SHRBL,CL
CALLTRAN;显示高4位对应的16进制数POPBXANDBL,0FH
CALLTRAN;显示低4位对应的16进制数OUTPUT'H'OUTPUT0AHOUTPUT0DH
JMPAGAINERROR:
LEADX,MSG2
MOVAH,9INT21HJMPAGAINDONE:
RETMAINENDPTRANPROCFAR
CMPBL,0AHJBBELOWADDBL,7BELOW:
ADDBL,30H
OUTPUTBLRETTRANENDPCODEENDS
ENDMAIN
6、在8086系统下,编写完整程序,实现从键盘上输入两个4位十进制数,从显示器上显示这两个数之和,例如输入“1234”、“5678”,应在显示器上显示“6912”。
解:
参考程序:
DATA*****
MSG1DB'Inputthefirstnumber(ESCtoexit):
','$'
MSG2DB'Inputthesecondnumber(ESCtoexit):
','$'MSG3DB0AH,0DH,'Inputerror!
Inputagain:
','$'DATAENDS
OUTPUTMACROASC;定义输出一个字符的宏
MOVDL,ASCMOVAH,2INT21HENDMCODE*****
ASSUMECS:
CODE,DS:
DATAMAIN:
MOVAX,DATA
MOVDS,AXAGAIN:
LEADX,MSG1
MOVAH,9
INT21H;提示输入第一个数CALLINPUT;输入过程PUSHBXOUTPUT0AHOUTPUT0DHLEADX,MSG2MOVAH,9
INT21H;提示输入第二个数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 汇编语言 接口 技术 周杰英张萍 习题 答案 汇总