微型运算机原理及应用技术第二版课后作业解答全集.docx
《微型运算机原理及应用技术第二版课后作业解答全集.docx》由会员分享,可在线阅读,更多相关《微型运算机原理及应用技术第二版课后作业解答全集.docx(32页珍藏版)》请在冰豆网上搜索。
微型运算机原理及应用技术第二版课后作业解答全集
第1章运算机基础知识
3.填空:
(1)(1234)10=()2=()16
(2)(34.6875)10=()2=()16
(3)(271.33)10=()2=()16
(4)(101011001001)2=()10=()16
(5)(1AB.E)16=()10=()2
(6)(10101010.0111)2=()10=()16
【解】
(1)(1234)10=(10011010010)2=(4D2)16
(2)(34.6875)10=(100010.1011)2=(22.B)16
(3)(271.33)10=(100001111.010101)2=(10F.54)16
(4)(101011001001)2=(2761)10=(AC9)16
(5)(1AB.E)16=(427.875)10=(110101011.111)2
(6)(10101010.0111)2=(170.4375)10=(AA.7)16
4.已知X=36,Y=-136,Z=-1250,请写出X、Y、Z的16位原码、反码和补码。
【解】
[X]原=0000000000100100
[Y]原=1000000010001000
[Z]原=1000010011100010
[X]反=0000000000100100
[Y]反=1111111101110111
[Z]反=1111101100011101
[X]补=0000000000100100
[Y]补=1111111101111000
[Z]补=1111101100011110
5.已知[X]补=01010101B,[Y]补=10101010B,[Z]补=1000111111111111B,求X、Y、Z及X+Y、Y-Z的十进制值为多少?
【解】Y-Z运算时Y需要扩展符号位
X=85
Y=-86
Z=-28673
X+Y=01010101B+10101010B=11111111B=-1
Y-Z=1111111110101010B-1000111111111111B
=1111111110101010B+0111000000000001B
=0110111110101011B
=28587
8.将以下8421BCD码表示为十进制数和二进制数:
(1)01111001
(2)001010000101(3)011000000111(4)010110010000
【解】
1.79,1001111B
2.285,100011101B
3.607,1001011111B
4.590,1001001110B
12.微型运算机由哪几部份组成,各部份的功能是什么?
【解】微型运算机由运算器、操纵器、存储器、输入设备、输出设备五大部份组成。
运算器完成算术运算和逻辑运算;操纵器分析命令并指挥和谐各部件统一行动完成命令规定的各类动作或操作;存储器寄存原始数据、中间结果和最终结果和程序;输入设备、输出设备与外界互换信息。
13.CPU在内部结构上由哪几部份组成,CPU应具有什么功能?
【解】微处置器(CPU)由运算器和操纵器组成。
CPU应具有的功能:
对数据进行处置并对处置进程进行操纵。
17.若是某几种CPU的地址总线别离有八、1六、20、32条,它们各自能寻址的存储器的容量是多少?
【解】地址总线8条:
28=256B
地址总线16条:
216=64KB
地址总线20条:
220=1MB
地址总线32条:
232=4GB
18.什么是硬件,什么是软件,硬件和软件的关系如何?
【解】硬件是指组成运算机的各类电子的、机械的、光磁学的物理器件和设备,它们组成了运算机的物理实体。
软件那么是指为了运行、治理和保护运算机而编制的各类程序及其有关的文档资料的总称。
硬件是基础,软件是灵魂,二者既彼此独立,又彼此依存,缺一不可。
硬件和软件合起来才组成一个完整的运算机系统。
19.说明位、字节、字长的概念及它们之间的关系。
【解】
(1)位(bit)。
位是运算机所能表示的最大体最小的数据单位。
它只能有两种状态“0”和“1”,即二进制位。
(2)字(Word)。
运算机中作为一个整体参与运算、处置和传送的一串二进制数,是运算机中信息的大体单位。
(3)字长(WordLength)。
运算机中每一个字所包括的二进制位数称为字长。
它们之间的关系:
字由位组成,字长指每一个字所包括的位的个数。
1.8086CPU由哪两部份组成,它们的要紧功能是什么?
在执行指令期间,EU能直接访问存储器吗,什么缘故?
【解】8086CPU由执行部件(EU)和总线接口部件(BIU)两部份组成。
执行部件由内部寄放器组、算术逻辑运算单元(ALU)与标志寄放器(FR)及内部操纵逻辑等三部份组成。
寄放器用于存储操作数和中间结果;算术逻辑单元完成16位或8位算术逻辑运算,运算结果送上ALU内部数据总线,同时在标志寄放器中成立相应的标志;内部操纵逻辑电路的要紧功能是从指令队列缓冲器中掏出指令,对指令进行译码,并产生各类操纵信号,操纵各部件的协同工作以完成指令的执行进程。
总线接口部件(BIU)负责CPU与存储器、I/O设备之间传送数据、地址、状态及操纵信息。
每当EU部件要执行一条指令时,它就从指令队列头部掏出指令,后续指令自动向前推动。
EU要花几个时钟周期执行指令,指令执行中假设需要访问内存或I/O设备,EU就向BIU申请总线周期,假设BIU总线空闲,那么当即响应,假设BIU正在取一条指令,那么待取指令操作完成后再响应EU的总线请求。
3.8086CPU中有哪些寄放器,各有什么用途?
【解】8086共有8个16位的内部寄放器,分为两组:
①通用数据寄放器。
四个通用数据寄放器AX、BX、CX、DX都可用作16位寄放器也可用作8位寄放器。
用作8位寄放器时别离记为AH、AL、BH、BL、CH、CL、DH、DL。
AX(AH、AL)累加器。
有些指令约定以AX(或AL)为源或目的寄放器。
事实上大多数情形下,8086的所有通用寄放器都可充当累加器。
BX(BH、BL)基址寄放器。
BX可用作间接寻址的地址寄放器和基地址寄放器,BH、BL可用作8位通用数据寄放器。
CX(CH、CL)计数寄放器。
CX在循环和串操作中充当计数器,指令执行后CX内容自动修改,因此称为计数寄放器。
DX(DH、DL)数据寄放器。
除用作通用寄放器外,在I/O指令中可用作端口地址寄放器,乘除指令顶用作辅助累加器。
②指针和变址寄放器。
BP(BasicPointerRegister)基址指针寄放器。
SP(StackPointerRegister)堆栈指针寄放器。
SI(SourceIndexRegister)源变址寄放器。
DI(DestinationIndexRegister)目的变址寄放器。
BP、SP称为指针寄放器,用来指示相关于段起始地址的偏移量。
BP和SP一样用于堆栈段。
SI、DI称为变址寄放器,可用作间接寻址、变址寻址和基址变址寻址的寄放器。
SI一样用于数据段,DI一样用于数据段或附加段。
标志寄放器(FR):
是一个16位寄放器,算术逻辑单元进行算术逻辑运算后,在标志寄放器中成立相应的标志。
段地址寄放器(CS、DS、SS、ES)。
用于寄存段地址,依照其要紧用途,分为代码段寄放器CS、数据段寄放器DS、堆栈段寄放器SS、附加段寄放器ES。
代码段寄放器CS:
代码段是寄存程序代码的存储区域,代码段寄放器用来寄存代码段存储区域的起始地址。
数据段寄放器DS:
数据段是寄存程序中所利用的数据的存储区域,数据段寄放器用来寄存程序的数据存储区的起始地址。
堆栈段寄放器SS:
堆栈段寄放器用来寄存堆栈存储区的起始地址。
由堆栈段寄放器SS与堆栈指针寄放器SP来确信当前堆栈指令的操作地址。
附加段寄放器ES:
附加段是为某些字符串操作指令寄存目的操作数而设置的一个附加的数据段,附加段寄放器用来寄存该附加数据段存储区域的起始地址。
指令指针寄放器(IP)。
又称程序计数器,是16位寄放器。
IP中寄存当前将要执行的指令的有效地址,每掏出一条指令IP自动增量,即指向了下一条指令。
指令队列缓冲器:
是一个与CPU速度相匹配的高速缓冲寄放器。
在EU执行指令的同时,BIU能够从内存中掏出下一条或下几条指令放到指令缓冲器中,EU执行完一条指令后,能够当即从指令缓冲器中执行下一条指令。
4.状态标志与操纵标志有何不同,程序中是如何利用这两类标志的?
标志寄放器有哪些标志位,各在什么情形下置位?
【解】状态标志依照算术逻辑运算结果由硬件自动设定,它们反映运算结果的某些特点或状态,可作为后继操作(如条件转移)的判定依据。
操纵标志由用户通过指令来设定,它们可操纵机械或程序的某些运行进程。
标志寄放器的内容如下:
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
OF
DF
IF
TF
SF
ZF
--
AF
--
PF
--
CF
CF(CarryFlag)进位标志,反映在运算结果的最高位有无进位或借位。
若是运算结果的最高位产生了进位(加法)或借位(减法)那么CF=1,不然CF=0。
PF(ParityFlag)奇偶标志,反映运算结果中“1”的个数的奇偶性,要紧用于判定数据传送进程中是不是犯错。
假设结果的低8位中有偶数个“1”那么PF=1,不然PF=0。
AF(AuxiliaryCarryFlag)辅助进位标志,又称半进位标志。
加减运算时,假设D3向D4产生了进位或借位那么AF=1,不然AF=0。
在BCD码运算时,该标志用于十进制调整。
ZF(ZeroFlag)零标志,反映运算结果是不是为0。
假设结果为零那么ZF=1,不然ZF=0。
SF(SignFlag)符号标志,反映运算结果最高位即符号位的状态。
若是运算结果的最高位为1那么SF=1(对带符号数即为负数),不然SF=0(对带符号数即为正数)。
OF(OverflowFlag)溢出标志,反映运算结果是不是超出了带符号数的表数范围。
假设超出了机械的表数的范围,即为产生溢出,那么OF=1,不然OF=0。
DF(DirectionFlag)方向标志,用于串处置指令中操纵串处置的方向。
当DF=1时,每次操作后变址寄放器SI、DI自动减量,因此处置方向是由高地址向低地址方向进行。
当DF=0,那么SI、DI自动增量,处置方向由低地址向高地址方向进行。
该标志由方向操纵指令STD或CLD设置或清除。
IF(InterruptFlag)中断许诺标志,用于操纵CPU是不是许诺响应可屏蔽中断请求。
IF=1为许诺响应可屏蔽中断请求,IF=0那么禁止响应可屏蔽中断请求。
该标志可由中断操纵指令STI或CLI设置或清除。
TF(TrapFlag)陷阱标志,用于单步操作。
TF=1时,每执行一条用户程序指令后自动产生陷阱,进入系统的单步中断处置程序。
TF=0时,用户程序会持续不断地执行,可不能产生单步中断。
5.求出以下运算后各个标志的状态,并说明进位标志和溢出标志的区别。
(1)1278H+3469H
(2)54E3H-27A0H
(3)3881H+3597H(4)01E3H-01E3H
【解】CF进位标志,反映在运算结果的最高位有无进位或借位。
OF溢出标志,反映运算结果是不是超出了带符号数的表数范围。
机械实际处置时判定是不是溢出的方式是依照最高位的进位(CF)与次高位的进位是不是相同来确信,假设二者不相同那么OF=1(表示有溢出),不然OF=0(表示无溢出)。
(1)
0001001001111000
+0011010001101001
0100011011100001
运算后各个标志的状态:
OF
DF
IF
TF
SF
ZF
--
AF
--
PF
--
CF
0
0
0
1
1
0
(2)
0101010011100011
-0010011110100000
0010110001000011
运算后各个标志的状态:
OF
DF
IF
TF
SF
ZF
--
AF
--
PF
--
CF
0
0
0
0
0
0
(3)
0011100010000001
+0011010110010111
0110111000011000
运算后各个标志的状态:
OF
DF
IF
TF
SF
ZF
--
AF
--
PF
--
CF
0
0
0
0
1
0
(4)
0000000111100011
-0000000111100011
0000000000000000
运算后各个标志的状态:
OF
DF
IF
TF
SF
ZF
--
AF
--
PF
--
CF
0
0
1
0
1
0
6.8086CPU中存储器的逻辑地址和物理地址之间有什么关系,各有多少值?
【解】物理地址为某一个存储单元的实际地址,关于8086它是一个20位的地址。
物理地址从00000H~FFFFFH转变,对应1MB的空间。
逻辑地址,又称偏移地址或有效地址,即对段首的偏移量。
偏移地址从0000H~FFFFH转变,对应64KB的空间。
物理地址的取得方式是:
将段寄放器的内容左移4位(即×16),与逻辑地址相加,取得20位物理地址。
依照寻址方式的不同,偏移地址能够来自程序计数器(IP)或其它寄放器。
7.8086CPU利用的存储器什么缘故要分段,如何分段?
什么缘故要设置段寄放器,有几个段寄放器?
各段寄放器有什么意义?
【解】8086CPU内部数据结构是16位的,即所有的寄放器都是16位的,而外部寻址空间为1MB,即需要20位地址线。
为了能用内部寄放器中的16位地址来寻址1MB空间,8086将1MB空间以16字节为一个内存节,共分成64K个节。
节的起始地址别离为00000H、00010H、00020H、…、FFFF0H,称为段基址。
节的起始地址的后4位二进制数为全0,称为节的段地址。
用于寄存段地址的寄放器称为段寄放器,依照其要紧用途,分为代码段寄放器CS、数据段寄放器DS、堆栈段寄放器SS、附加段寄放器ES。
代码段寄放器CS:
用来寄存代码段存储区域的起始地址。
数据段寄放器DS:
数寄存程序的数据存储区的起始地址。
堆栈段寄放器SS:
用来寄存堆栈存储区的起始地址。
由堆栈段寄放器SS与堆栈指针寄放器SP来确信当前堆栈指令的操作地址。
附加段寄放器ES:
附加段是为某些字符串操作指令寄存目的操作数而设置的一个附加的数据段,附加段寄放器用来寄存该附加数据段存储区域的起始地址。
12.8086的I/O端口寻址范围是多少?
什么是I/O端口与内存别离独立编址?
【解】8086的I/O端口利用16位地址A15~A0,I/O端口地址范围为0000H~FFFFH,可寻址空间为64KB。
I/O端口与内存别离独立编址时,指令访问的是I/O端口仍是内存,由地址信息无法区分,由M/
信号区分是I/O端口的寻址与内存寻址。
14.什么是基地址和位移量,它们之间有何联系?
【解】8086CPU内部数据结构是16位的,而外部寻址空间为1MB。
为了能用内部寄放器中的16位地址来寻址1MB空间,8086将1MB空间以16字节为一个内存节(Paragraph),共分成64K个节。
节的起始地址称为段基址。
偏移地址是存储地址对段首的偏移量。
偏移地址从0000H~FFFFH转变,对应64KB的空间。
它们之间有何联系:
物理地址=基地址×16+位移量。
15.设CS=1200H,IP=0FF00H,现在指令的物理地址是多少?
指向这一物理地址的CS和IP的值是惟一的吗?
【解】指令的物理地址:
12000H+0FF00H=21F00H
指向这一物理地址的CS和IP的值不是惟一的。
16.假设CS=1000H,指出当前代码段可寻址的存储空间的大小和地址范围。
【解】当前代码段可寻址的存储空间的大小:
64KB
当前代码段可寻址的存储空间的地址范围:
10000H~1FFFFH
1.假设DS=3000H,BP=2000H,SI=1000H,[32000H]=00H,[32001H]=40H,SS=3000H,[31000H]=20H,[31001H]=60H,[33000H]=50H,[33001H]=60H,说明以下各条指令执行后,AX中的内容是什么?
并说明各条指令中源操作数的寻址方式。
(1)MOVAX,DS
(2)MOVAX,[2000H]
(3)MOVAX,[SI](4)MOVAX,[BP]
(5)MOVAX,[BP+SI]
【解】
5.AX=3000H寄放器寻址
6.AX=4000H直接寻址
7.AX=6020H寄放器间接寻址
8.AX=4000H寄放器间接寻址
9.AX=6020H基址加变址寻址
2.指出以下指令中的非法指令。
(1)MOVBX,AL
(2)MOVCS,2000H
(3)PUSH4567H(4)XCHGVAR1,VAR2
(5)ADDAL,148H(6)MOVDS,2000H
(7)MOVBH,SI(8)SUB38H,AL
【解】非法指令:
(1)MOVBX,ALBX和AL的长度不一致
(2)MOVCS,2000HCS段寄存器不能作目的操作数
(3)PUSH4567H只能将寄存器或存储单元的内容压入堆栈,不能是立即数
(4)XCHGVAR1,VAR2两个存储单元之间不能直接交换数据
(5)ADDAL,148H运算溢出
(6)MOVDS,2000H立即数不能直接传送给DS段寄存器
(7)MOVBH,SIBH和SI的长度不一致
(8)SUB38H,AL目的操作数不能是立即数
3.假设SP=2000H,AX=3355H,BX=4466H,试指出以下指令或程序段执行后有关寄放器的内容。
(1)PUSHAX
执行后AX=?
,SP=?
(2)PUSHAX
PUSHBX
POPDX
POPCX
执行后AX=?
,CX=?
,DX=?
,SP=?
【解】
(1)执行后AX=3355H,SP=1FFEH
(2)执行后AX=3355H,CX=3355H,DX=4466H,SP=2000H
4.请按下面的要求写出相应的汇编指令或指令序列。
(1)将1234H送入DS中。
(2)将5678H与AX中的数相加,结果放在AX中。
(3)将DATAX和DATAY相加,其和放在DATAY中。
(4)将AX中的高4位变成全0。
(5)将BX中的低2位变成全1。
(6)将CX中的D3~D7位取反。
【解】
(1)MOVAX,1234H
MOVDS,AX
(2)ADDAX,5678H
(3)MOVAX,DATAX
ADDAX,DATAY
MOVDATAY,AX
(4)ANDAX,0FFFH
(5)ORAX,0003H
(6)MOVAX,CX
ANDAX,07H
XORCX,0FFFFH
ANDCX,0FFF8H
ADDCX,AX
5.假设AL=0FFH,BL=03H,指出以下指令执行后标志AF、OF、ZF、SF、PF、CF的状态。
(1)ADDBL,AL
(2)INCBL
(3)SUBBL,AL(4)NEGBL
(5)ANDBL,AL(6)MULBL
(7)CMPBL,AL(8)IMULBL
(9)ORBL,AL(10)XORBL,BL
【解】执行后:
AF
OF
ZF
SF
PF
CF
(1)ADDBL,AL
1
0
0
0
0
1
(2)INCBL
0
0
0
0
0
不影响
(3)SUBBL,AL
1
0
0
0
0
1
(4)NEGBL
1
0
0
1
0
1
(5)ANDBL,AL
任意值
0
0
0
1
0
(6)MULBL
任意值
1
任意值
任意值
任意值
1
(7)CMPBL,AL
1
0
0
0
0
1
(8)IMULBL
任意值
1
任意值
任意值
任意值
1
(9)ORBL,AL
任意值
0
0
1
1
0
(10)XORBL,BL
任意值
0
0
1
1
0
9.执行以下程序段,指出各相关寄放器的内容。
MOVAX,0A0BH
DECAX
SUBAX,0FFH
ANDAX,00FFH
MOVCL,3
SALAL,CL
ADDAL,25H
XCHGAL,AH
PUSHAX
POPBX
INCBL
【解】各相关寄放器的内容:
MOVAX,0A0BH;AX:
0A0BH
DECAX;AX:
0A0AH
SUBAX,0FFH;AX:
090BH
ANDAX,00FFH;AX:
000BH
MOVCL,3;CL:
03H
SALAL,CL;AX:
0058H
ADDAL,25H;AX:
007DH
XCHGAL,AH;AX:
7D00H
PUSHAX;AX:
7D00H
POPBX;BX:
7D00H
INCBL;BX:
7D01H
10.用串操作指令将100H个字符从2100H处搬到1000H处,而且从中检索与AL中所存字符相同的存储单元,并将该单元的内容替换成空格,本程序只替换检索到的第一个相同的单元。
请在以下空格中填入适合的指令,使程序段完成上述功能。
┇
MOVSI,2100H
(1)
MOVCX,100H
CLD
(2)
MOVDI,1000H
MOVCX,100H
(3)
JNZK1
(4)
MOV[DI],20H
K1:
┇
【解】
10.MOVDI,1000H
11.REPMOVSB
12.REPNESCASB
13.DECDI
12.编程求出AX中寄存的16位二进制数中‘1’的个数,将其存入CL中(假设AX=1001010011001