微机原理课后习题解答Word格式文档下载.docx
《微机原理课后习题解答Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理课后习题解答Word格式文档下载.docx(69页珍藏版)》请在冰豆网上搜索。
(3)M:
1001101(4)P:
1010000
01000011
(2)O:
01001111
11001101(4)P:
11010000
8.请用8位二进制数写出下列字符带偶校验的ASCII码。
(1)+:
0101011
(2)=:
0111101
(3)#:
0100011(4)>
:
0111110
00101011
(2)=:
10111101
10100011(4)>
10111110
9.叙述CPU中PC的作用。
PC是CPU中的程序计数器,其作用是提供要执行指令的地址。
第二章微处理器体系与结构
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中信号和A0信号是通过怎样的组合解决存储器和外设端口的读/写的这种组合决定了8086系统中存储器偶地址体及奇地址体之间应该用什么信号区分怎样区分
若存取一个字节的数据,总是用一个总线周期来完成该操作;
若存取一个字,则依该字是规则字还是不规则字需用一个或两个总线周期来完成。
对规则字,只用一个总线周期来完成16位数据的传送,而对于非规则字则用相邻两个总线周期来完成该字的存储操作,先取其奇地址字节(即数据的低位字节),然后存取偶地址字节。
在组成存储系统时,总是偶地址单元的数据通过AD0~AD7传送,而奇地址单元的数据通过AD8~AD15传送,即通过总线高字节传送。
信号和A0信号控制存储器读写见下表:
操作
A0
使用的数据总线
存取规则字
AD15~AD0
传送偶地址的一个字节
1
AD7~AD0
传送奇地址的一个字节
AD15~AD8
存取非规则字
AD15~AD8(第一个总线周期)
AD7~AD0(第二个总线周期)
为非法码
7.什么叫总线为什么各种微型计算机系统中普遍采用总线结构
答:
总线是模块与模块之间传送信息的一组公用信号线。
总线标准的建立使得各种符合标准的模块可以很方便地挂在总线上,使系统扩展和升级变得高效、简单、易行。
因此微型计算机系统中普遍采用总线结构。
8.微型计算机系统总线从功能上分为哪三类它们各自的功能是什么
微型计算机系统总线从功能上分为地址总线、数据总线和控制总线三类。
地址总线用于指出数据的来源或去向,单向;
数据总线提供了模块间数据传输的路径,双向;
控制总线用来传送各种控制信号或状态信息以便更好协调各功能部件的工作。
9.8086/8088CPU分为哪两个部分如何协调工作
EU是执行部件,主要的功能是执行指令和形成有效地址。
BIU是总线接口部件,与片外存储器及I/O接口电路传输数据,主要功能是形成实际地址、预取指令和存取操作数。
EU经过BIU进行片外操作数的访问,BIU为EU提供将要执行的指令。
EU与BIU可分别独立工作,当EU不需BIU提供服务时,BIU可进行填充指令队列的操作。
10.8086/8088CPU的地址总线有多少位其寻址范围是多少
8086/8088CPU的地址总线共20位,最大可寻址1MB空间。
11.8086/8088CPU使用的存储器为什么要分段怎么分段
8086/8088为16位CPU,其内部的ALU、相关的地址寄存器(如SP、IP以及BX、BP、SI、DI)等都是16位的,因而对存储器地址的处理也只能是16位操作,即8086/8088的直接寻址能力在64KB范围内。
而实际上8086/8088有20条地址线,它的最大寻址空间为1MB。
这就产生了一个矛盾,即如何用16位的地址寄存器去表示一个20位的存储器物理地址
实际使用的解决办法是:
将1MB大小的存储空间分为若干“段”,每段不超过64KB。
这样,一个20位的物理地址就可以用“16位段基址:
16位偏移量”的形式(称为逻辑地址)来表示了,其中段地址存放在8086/8088的段寄存器中。
12.8086/8088CPU中有几个通用寄存器有几个变址寄存器有几个指针寄存器通常哪几个寄存器亦可作为地址寄存器使用
8086/8088CPU中共有:
8个16位的通用寄存器AX、BX、CX、DX、BP、SP、SI、DI;
2个变址寄存器SI、DI;
2个指针寄存器BP、SP;
其中BX、BP、SI、DI亦可作地址寄存器。
13.Intel8086与8088有何区别
8086与8088的区别主要表现在以下几个方面:
第一、8086的指令队列可以容纳6个字节,每个总线周期在存储器中取出2个字节指令代码填入队列。
而8088只能容纳4个字节,且每个总线周期只能取出1个字节指令代码。
第二、8086外部数据总线宽度为16位,8088外部数据总线宽度只有8位。
注意:
8086和8088外部数据总线的宽度不同将导致扩展主存储器及输入/输出接口时系统地址线和数据线连接方式的不同。
第三、其他不同的引脚定义:
(1)AD15~AD0,在8086中为地址/数据复用,而在8088中AD15~AD8改为A15~A8只作地址线用;
(2)34、28号引脚定义不同。
14.8086/8088CPU工作在最小模式时:
当CPU访问存储器时,要利用哪些信号当CPU访问外设接口时,要利用哪些信号
8086/8088CPU工作在最小模式时,若访问存储器,需用到以下信号:
、ALE、
、DEN、READY、
、
、AD0~AD15、A19/S6~A16/S3。
若访问外设,需用到以下信号:
、AD0~AD15。
15.试指出下列运算后的各个状态标志,并说明进位标志和溢出标志的区别:
(1)1278H+3469H
CF=0AF=1ZF=0SF=0OF=0PF=1
(2)54E3H-27A0H
CF=0AF=0ZF=0SF=0OF=0PF=0
(3)3881H+3597H
CF=0AF=0ZF=0SF=0OF=0PF=1
(4)01E3H-01E3H
CF=0AF=0ZF=1SF=0OF=0PF=1
其中,进位标志CF用于判别无符号数运算是否超出数的表示范围,而溢出标志OF用于判别带符号数运算是否超出数的表示范围。
奇偶标志PF只能判断结果低8位中“1”的个数为奇数还是偶数。
16.什么是逻辑地址什么是物理地址它们之间有什么联系各用在何处
逻辑地址由两个16位的部分即段基址和偏移量组成,一般在程序中出现的地址都表示为逻辑地址形式;
物理地址是一个20位的地址,它是唯一能代表存储空间每个字节单元的地址,一般只出现在地址总线上。
由于8086/8088CPU中的寄存器只有16位长,所以程序不能直接存放20位的物理地址,而必须借助逻辑地址,即用两个16位的寄存器来表示物理地址。
他们之间的关系是:
物理地址=段基址*16+偏移量;
另外,一个物理地址可对应多个逻辑地址。
17.设现行数据段位于存储器0B0000H~0BFFFFH单元,DS段寄存器内容为多少
DS段寄存器内容为0B000H。
18.在8086中,逻辑地址、偏移地址、物理地址分别指的是什么
逻辑地址是在程序中对存储器地址的一种表示方法,由段基址和段内偏移地址两部分组成,都是16位的二进制代码,如1234H:
0088H。
偏移地址是指段内某个存储单元相对该段首地址的差值。
物理地址是8086芯片引线送出的20位地址码,物理地址=段基址*16+偏移地址,用来指出一个特定的存储单元。
19.给定一个存放数据的内存单元的偏移地址是20C0H,(DS)=0C0E0H,求出该内存单元的物理地址。
物理地址:
0C2EC0H。
20.8086/8088为什么采用地址/数据引线复用技术
考虑到芯片成本和体积,8086/8088采用40条引线的封装结构。
40条引线引出8086/8088的所有信号是不够用的,采用地址/数据线复用引线方法可以解决这一矛盾,从逻辑角度,地址与数据信号不会同时出现,二者可以分时复用同一组引线。
21.怎样确定8086的最大或最小工作模式
引线
的逻辑状态决定8086的工作模式,
引线接高电平,8086被设定为最小模式,
引线接低电平,8086被设定为最大模式。
22.8086基本总线周期是如何组成的
基本总线周期由4个时钟(CLK)周期组成,按时间顺序定义为T1、T2、T3、T4。
23.在基于8086的微计算机系统中,存储器是如何组织的存储器是如何与处理器总线连接的
信号起什么作用
8086为16位微处理器,可访问1M字节的存储器空间;
1M字节的存储器分为两个512K字节的存储体,分别命名为偶存储体和奇存储体;
偶体的数据线连接D7~D0,“体选”信号接地址线A0;
奇体的数据线连接D15~D8,“体选”信号接
信号;
A0信号有效时允许访问偶体中的低字节存储单元,
信号有效时允许访问奇体中的高字节存储单元,实现8086的低字节访问、高字节访问及字访问。
24.有一个由20个字组成的数据区,其起始地址为610AH:
1CE7H。
试写出该数据区首末单元的实际地址PA。
首单元地址:
610A0H+1CE7H=62D87H
末单元地址:
62D87H+27H=62DAEH
25.有两个16位的字31DAH、5E7FH,它们在8086系统存储器中的地址为00130H和00135H,试画出它们的存储器示意图。
地址
内容
00130H
0DAH
00131H
31H
00132H
00133H
00134H
00135H
7F
00136H
5E
26.试说明8086CPU的控制引脚ALE的作用。
8086的低位地址线与数据线复用,为保证地址线维持足够的时间,需使用ALE信号将低位地址线通过锁存器保存,以形成系统地址总线。
第三章80x86指令系统
1、指出下列指令中操作数的寻址方式(8086系统)。
(1)MOVAX,100
(2)MOVAX,[100]
(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,[100]
直接寻址
(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]
2、指出下列指令中操作数的寻址方式(80386系统)。
(1)MOV[EBX+12H],AX
(2)MOV[EBP+EDI*2],EBX
(3)MOV[EBX*4],BX(4)MOVEDX,[EAX+ESI*8-12H]
(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[0001]
(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、指出以下指令中,哪些指令是非法的,并说明为什么(80386系统)。
(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指令的目的操作数不能是立即数;
(6)非法,ESP只能作为基址寄存器,不能作为变址寄存器;
(7)非法,在386系统中AX不能作为基址寄存器,也不能作为变址寄存器;
(8)合法。
5、假设(AX)=1234H,(BX)=5678H,(SP)=1000H,指出执行下面的程序段后,各相关寄存器及堆栈段中的内容。
PUSHAX;
(AX)=,(BX)=,(SP)=,栈顶字节[SP]=,栈顶第二字节[SP+1]=
PUSHBX;
POPAX;
(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,B
MULC
ADDAL,A
ADCAH,0
MOVYY,AX
(2)MOVAX,AA
ADDAX,BB
MOVBL,C
SUBBL,D
IDIVBL
MOVX,AL
MOVY,AH
(3)MOVAL,A
SUBAL,B
AAS
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,1
MOVBX,AX
SHLAX,1
ADDAX,BX
(2)SALAX,1
RCLDX,1
(3)SARDX,1
RCRAX,1
8、指出以下指令执行后,标志寄存器OF、SF、ZF、AF、PF、CF的状态。
(1)(AL)=0FFH,(BL)=20H,执行指令:
ADDAL,BL
(2)(AL)=01H,(BL)=02H,执行指令:
CMPAL,BL
(3)(AL)=0FFH,执行指令:
INCAL
(4)(AL)=0,执行指令:
DECAL
(5)(AL)=0F0H,(BL)=04H,执行指令:
IMULBL
(6)(AX)=1F0H,(BL)=08H,执行指令:
DIVBL
(7)(AL)=12H,(BL)=34H,执行指令:
TESTAL,BL
(8)(AL)=98H,执行指令:
SALAL,1
OF
SF
ZF
AF
PF
CF
(1)
(2)
(3)
×
(4)
(5)
—
(6)
(7)
(8)
注:
0表示结果为0,1表示结果为1,×
表示结果不变,—表示结果不确定。
9、在8086系统下,编写实现如下功能的程序段:
(1)从地址为80H的端口中读入一个字节;
(2)如果该字节最高位为“1”,则将字节0FFH送到地址为81H的端口中,并退出程序;
(3)如果该字节最高位为“0”,则转向第
(1)步,继续循环扫描。
参考程序段:
AGAIN:
INAL,80H
TESTAL,80H
JZAGAIN
MOVAL,0FFH
OUT81H,AL
10、我们知道,MOV指令并不能直接修改CS、IP的值,但事实上,我们还可以通过其他方法来达到修改CS、IP的目的。
试编写一个程序段,使该程序段运行后,(CS)=0100H,(IP)=0000H。
方法一、利用段间返回指令RETF:
MOVAX,0100H
段基址入栈
MOVAX,0
偏移量入栈
RETF
方法二、利用JMP指令实现段间跳转,假设ADDR为双字变量:
MOVWORDPTRADDR,0;
WORDPTRADDR←偏移量
MO