微机原理与接口技术(第二版)课后习题答案
第1章作业答案
1.1微处理器、微型计算机和微型计算机系统三者之间有什么不同?
解:把CPU(运算器和控制器)用大规模集成电路技术做在一个芯片上,即
为微处理器。微处理器加上一定数量的存储器和外部设备(或外部设备
的接口)构成了微型计算机。微型计算机与管理、维护计算机硬件以及
支持应用的软件相结合就形
成了微型计算机系统。
1.2CPU在内部结构上由哪几部分组成CPU应该具备哪些主要功能?
解:CPU主要由起运算器作用的算术逻辑单元、起控制器作用的指令寄
存器、指令译码器、可编程逻辑阵列和标志寄存器等一些寄存器组成。
其主要功能是进行算
术和逻辑运算以及控制计算机按照程序的规定自动运行。
1.3微型计算机采用总线结构有什么优点
解:采用总线结构,扩大了数据传送的灵活性、减少了连线。而且总线
可以标准化,易于兼容和工业化生产。
1.4数据总线和地址总线在结构上有什么不同之处如果一个系统的数
据和地址合用
一套总线或者合用部分总线,那么要靠什么来区分地址和数据?
解:数据总线是双向的(数据既可以读也可以写),而地址总线是单向的。
8086CPU为了减少芯片的引脚数量,采用数据与地址线复用,既作数据总
线也作为地址总线。它们主要靠信号的时序来区分。通常在读写数据时,
总是先输出地址
1.8在给定的模型中,写出用累加器的办法实现15X15的程序。
解:LDA,0
LDH,15
LOOP:ADDA,15
DECH
JPNZ,LOOP
HALT
第2章作业答案
2.1IA-32结构微处理器直至PentiHm4,有哪几种?
解:
80386、30486、Pentium、PentiumPro、PeruiumII、PentiumllL
Pentium4o
2.6IA-32结构微处理器有哪几种操作模式?
IA-32结构支持3种操作模式:保护模式、实地址模式和系统管理模
式。操
作模式确定哪些指令和结构特性是可以访问的。
2.8IA-32结构微处理器的地址空间如何形成?
由段寄存器确定的段基地址与各种寻址方式确定的有效地址相加形
成了线性地址。若末启用分页机制,线性地址即为物理地址;若启用分
页机制,则它把线性地址转为物理地址。
2.158086微处理器的总线接口部件由哪几部分组成?
8086微处理器中的总线接口单元(BIU)负责CPU与存储器之间的信
息传送。具体地说,BIU既负责从内存的指定部分取出指令,送至指令队
列中排队(8086的指令队列有6个字节,而8088的指令队列只有4个字节);
也负责传送执行指令时所需的操作数。执行单元(EU)负责执行指令规定
的操作。
2.16段寄存器CS=1200H,指令指针寄存器IP=FF00H,此时,指令的物理
地址为
多少?
解:指令的物理地址=12000H+FF00H=21F00H
第3章作业答案
3.1分别指出下列指令中的源操作数和目的操作数的寻址方式。
(l)MOVSI,300
⑵MOVCX,DATA[DI]
(3)ADDAX,[BX][SI]
(4)ANDAX,CX
(5)MOV[BP],AX
(6)PUSHF
(1)源操作数为立即寻址,目的操作数为寄存器寻址。
(2)源操作数为变址寄存器加位移量寻址,目的操作数为寄存器寻
址。
(3)源操作数为基址加变址寻址,目的操作数为寄存器寻址。
(4)源操作数和目的操作数都为寄存器寻址。
(5)源操作数为寄存器寻址,目的操作数为寄存器间接寻址。
(6)为堆栈操作。
3.2试述指令MOVAX,2000H和MOVAX,DSz[2000H]的区别。
解:前一条指令是立即寻址,即把立即数2000H传送至寄存器AX。后
一条指令是直接寻址,是把数据(DS)段中的地址为2000H单元的内容
传送至寄存器AX。
3.3写出以下指令中内存操作数的所在地址。
(l)MOVAL,[BX+1O]
(2)MOV[BP+1O],AX
(3)INCBYTEPTRESI+5]
(4)MOVDL,ES:[BX+SI]
(5)MOVBX,[BP+DI+2]
(1)数据段BX+1O单元。
(2)堆栈段BP+1O单元。
(3)数据段SI+5字节单元。
(4)附加段(ES段)BX+SI单元。
(5)堆栈段BP+DI+2单元。
3.4判断下列指令书写是否正确。
(l)MOVAL,BX
⑵MOVAL,CL
(3)INC[BX]
(4)MOV5,AL
(5)MOV[BX]1,[SI]
(6)MOVBL,OF5H
(7)MOVDX,2000H
(8)POPCS
(9)PUSHCS
(1)不正确,AL与BX数据宽度不同。
(2)正确。
(3)不正确,因为不明确是增量字节还是字。
(4)不正确,立即数不能作为目的操作数。
(5)不正确,因为不明确要传送的是字节还是字。
(6)正确。
(7)正确。
(8)不正确,CS不能作为:pop指令的操作数。
(9)不正确,CS不能作为PUSH指令的操作数。
3.5设堆钱指针SP的初值为1000H,AX=2000H,BX=3000H,试问:
(1)执行指令PUSHAX后SP的值是多少?
(2)再执行PUSHBX及POPAX后,SP、AX和BX的值各是多少?
(1)SP=0FFEHo
(2)SP=OFFEH;AX=3000H,BX=3000Ho
3.6要想完成把[3000田送[2000田中,用指令:
MOM[2000H],[3000H]
是否正确如果不正确,应该用什么方法实现
解:不正确。
正确的方法是:
MOVAL,[3000H]
MOV[2000H],AL
3.7假如想从200中减去AL中的内容,用SUB200,AL是否正确如果不正
确,应该
用什么方法?
MOVBL,200
SUBBL,AL
3.8试用两种方法写出从80H端口读入信息的指令。再用两种方法写出
从40H口输出100H的指令。
(DINAL,80H
(2)MOVDX,80H
INAL,DX
(3)MOV,AL,100H
OUT40H,AL
4)MOVAL,100H
MOVDX,40H
OUTDX,AL
3.9假如:AL=20H,BL=10H,当执行CMPAL,BL后,问:
(l)AL、BL中的内容是两个无符号数,比较结果如何影响哪儿个标志
位?
(2)AL、BL中的内容是两个有符号数,结果又如何,影响哪几个标志
(l)AL=20H,BL=10H,0=0,S=0,Z=0,A=0,P=0,C=0。
(2)因为两个都是符号正数,其结果与(1)相同。
3.10若要使ALx10,有哪几种方法,试编写出各自的程序段
(1)使用乘法指令:
MOVBL,10
MULBI,
(2)使用移位指令:
SHLAL,1
MOVBL,AL
SHLAL,2
ADDAL,BL
(3)使用加法指令:
ADDAL,AL
3.118086汇编语言指令的寻址方式有哪几类哪种寻址方式的指令执行
速度最快?
解:寻址方式分为:立即数寻址方式、寄存器操作数寻址方式和存储
器操作数寻
址方式。其中,寄存器操作数寻址方式的指令执行速度最快。
3.12在直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址
如何确定如果要用某个段寄存器指出段地址,指令中应该如何表
示?
默认的数据访问,操作数在DS段;堆栈操作在SS段;串操作源操作数
(SI)在DS段,目的操作数(DI)在ES段;用BP作为指针在SS段。如果要显
式地指定段地址,则在操作数中规定段寄存器。例如:
MOVAX,ES:(BX+1OH)
3.13在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那
么如何确定段地址?
在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,
段地址是
隐含约定的,也就是隐含地选择段寄存器。如操作类型为指令,则指
定代码段寄
存器CS,如操作类型为堆栈操作,则指定堆找段寄存器SS,…,如表
3T中所示。
当需要超越约定时,通常用段替代前缀加冒号”:〃来表示段超越,它
允许程序设计者偏离任何约定的段。
例如:
MOVES:[BX],AX
表3-1段寄存器的约定
操作类型约定段寄存器可修改的段寄存器逻辑地址
指令CS无IP
堆栈操作SS无,SP
源串地址.DSCS.ES.SSSI
目的串地址ES无DI
BP用作基止寄存器SSCS.DS.ES有效地址
通用数据读写DSCS.ES.SS有效地址
这时数据将从寄存器EAX传送至附加段中由EBX寻址的存储单元,而不是
传送
到数据段中。
3.14采用寄存器间接寻址方式时,BX、BP、SI、DI分别针对什么情况来
使用?这4个寄存器组合间接寻址时,地址是怎样计算的请举例说
明。
解:在寄存器间接寻址方式下,BX和BP作为间址寄存器使用,而SI、DI
作为
变址寄存器使用。除BP间址默认的段为堆栈段,其他的都默认为数据
段。它们
都可以单独使用,或加上偏移量或组合使用。如:
[BX+n]
LBP+n]
[SI+n]
[DI+n]
[BX+SI+n]
[BX+DI+n]
[BP+SI+n]
[BP+DI+n]
3.15设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所
进行
的具体操作:
MOVBYTEPTR[BP],200
MOVWORDPTR[BX],2000
解:前一条指令是把立即数(应是字节)200,传送至堆栈段(BP的默
认段〉偏移
量由BP规定的字节单元,地址为:52000H+6200H=58200H
第二条指令是把立即数.2000,传送至数据段(BX的默认段)偏移量
由BX规定的
字单元,地址为:21000H+l400H=22400Ho
3.16使用堆钱操作指令时要注意什么问题传送指令和交换指令在涉
及内存操作数时应该分别要注意什么问题?
解:使用堆栈指令可以把内存单元作为一个操作数(从内存到内
存)。但堆栈固定在堆栈段且只能由SP指向。且堆栈操作要修改堆
核指针。MOV指令不能实现内存单元间的数据传送。XCHG指令是交
换,有一个操作数必须是寄存器。
3.17下面这些指令中哪些是正确的?哪些是错误的?若是错误的,请说明
原因。
(l)XCHGCS,AX
(2)MOV[BXL[1OOO]
(3)XCHGBX,IP
(4)PUSHCS
(5)POPCS
(6)INBX,DX
(7)MOVBYTE[BX],1000
(8)MOVCS,[1000]
(1)错误,CS不能交换。
(2)错误,MOV指令不能在内存间传送。
(3)错误,IP不能交换。
(4)错误,CS可以作为PUSH指令的操作数。
(5)错误,CS可以作为POP指令的操作数。
(6)错误,IN指令的目的操作数是累加器。
(7)错误,目的操作数是字节单元。
(8>错误,CS不能作为MOV指令的目的操作数。
3.18以下是格雷码的编码表,
00000
10001
20011
30010
40110
50111
60101
70100
81100
请用换码指令和其他指令设计一个程序段,以实现由格雷码向ASCII码
的转换。
MOVBX,TABLE
MOVSI,ASCII_TAB
MOVAL,0
MOVCX,10
TRAN:XLATTABLE
MOVDL,AL
ADDDL,30H
MOV[SI],DL
INCAL
LOOPTRAN
3.19使用乘法指令时,特别要注意先判断是用有符号数乘法指令还是
用无符号数乘法指令,这是为什么?
解:因为有符号数和无符号数,其数的乘法是一样的。但结果的符
号取决于两
个操作数的符号。
3.20字节扩展指令和字扩展指令一般用在什么场合举例说明。
解:主要用于字节相除和字相除之前,把被除数扩展为两倍宽度的
操作数。
3.21什么叫BCD码什么叫组合的BCD码什么叫非组合的BCD码8086
汇编语言在对BCD码进行加、减、乘、除运算时,采用什么方法
解:BCD码为十进制编码的二进制数。组合的BCD数是把两位BCD加
在一个字节中,高位的在高4位。非组合的BCD码是把一位BCD数放在
一个字节的低4位,高4位为0。8086在BCD加、减和乘法运算以后用BCD
调整指令把结果调整为正确的BCD数。在BCD除法之前先用BCD调整指
令再做除法.
3.22用普通运算指令执行BCD码运算时,为什么要进行十进制调整具
体地讲,在进行BCD码的加、减、乘、除运算时,程序段的什么位
置必须加上十进制调整指令?
解:因为8086指令把操作数作为二进制数进行二进制运算,要得到正
确的BCD结果,需要进行调整。在加、减、乘法指令之后加上BCD
调整指令,而在除法指令之前先用BCD调整指令再用除法指令。
第4章作业答案
4.1在下列程序运行后,给相应的寄存器及存储单元填入运行的结果:
MOVAL,10H
MOVCX,1000H
MOVBX,2000H
MOV[CX],AL
XCHGCX,BX
MOVDH,[BX]
MOVDL,01H
MOV[BX],DL
HLT
解:寄存器及存储单元的内容如下:
AL=10H
BL=00H
BH=2OH
CL=00H
CH=10H
DH=10H
(1000H)=1OH
(2000H)=O1H
2.要求同题4.1,程序如下:
MOVAL,50H
MOVBP,1000H
MOV[BP],AL
MOVDH,20H
MOV[BXLDH
MOVDL,O1H
MOVDL,[BX]
MOVCX,3000H
解:寄存器及存储单元的内容如下:
AL=50H
BH=20H
CH=30H
DL=20H
DH=20H
BP=1000H
(1OOOH)=50H
(2000H)=20H
4.3自1OOOH单元开始有一个100个数的数据块,若要把它传送到自
2000H开始的存
储区中去,可以采用以下3种方法实现,试分别编制程序以实现数据块的
传送。
(1)不用数据块传送指令
(2)用单个传送的数据块传送指令
(3)用数据块成组传送指令。
(1)LEASI,1000H
LEADI,2000H
MOVCX,100
LI:MOVAX,[SI]
MOV[DI],AX
LOOPLI
(2)LEASI,1OOOH
CLD
LI:MOVSB
(3)LEASI,1000H
REPMOVSB
4.4利用变址寄存器,编写一个程序,把自1000H单元开始的100个数传
送到自1070H
开始的存储区中去。
LEASI,1000H
LEADI,1070H
4.5要求同题4.4,源地址为2050比目的地址为2000H,数据块长度为50.
LEASI,2050H
MOVCX,50
4.6编写一个程序,把自1000H单元开始的100个数传送'至1050H开始的
存储区中
(注意:数据区有重叠)。
LEADI,1050H
ADDSI,63H
ADDDI,63H
STD
4.7在自0500H单元开始,存有100个数。要求把它传送至IJ1000H开始的存
储区中,
但在传送过程中要检查数的值,遇到第一个零就停止传送。
LEASI,0500H
LEADI,1000H
Nl:MOVAL,[SI]
CMPAL,0
JZN2
MOV[DI],AL
INCSI
INCDI
LOOPN1
N2:HLT
4.14若在0500H单元中有一个数
(1)利用加法指令把它乘2,且送回原存储单元(假定XX2后仍为一个
字节);
(2)XX4;
(3)XX10(假定XX10^255).
(1)LEABX,0500H
MOVAL,[BX]
MOV[BX],AL
⑵LEABX,0500H
(3)LEABX,0500H
ADDAL,DL
第5章作业答案
5.1总线周期的含义是什么?8086/8088CPU的基本总线周期由几个时
钟组成如果一个CPU的时钟频率为8MHz,那么,它的一个时钟周期是多
少?一个基本总线周期是多少?如果主频为5MHz呢?
解:CPLI访问总线(从内存储器或I/O端口读/写字节或字)所需的时
间称为总线周期。8086/8088CPU的基本总线周期由4个时钟组成。若CPU
的时钟频率为8(5)MHz,时钟周期为l/8MHz=125(l/5MHz=20)ns,基本总
线周期为4x125(200)ns=500(800)ns
5.2在总线周期的TI、T2、T3、T4状态,CPU分别执行什么动作?什么情
况下需要插入
等待状态TwTw在哪儿插入?怎样插入?
解:下面以存储器读为例进行说明。
在T1周期:输出地址信号、地址锁存允许信号、内存或I/O端口访问控制
信号;
在T2周期:CPIJ开始执行数据传送操作,此时,8086CPU内部的多路开关
进行切换,将地址/数据线AD15~AD0上的地址撤销,切换为数
据总线,为读写数据作准备。8288总线控制器发出数据总线允
许信号和数据发送/接收控制信号DT/R允许数据收发器工作,
使数据总线与8086CPU的数据线接通,并控制数据传送的方
向。同样,把地址/状态线A19/S6~A16/S3切换成与总线周期有
关的状态信息,指示若干与周期有关的情况。
在T3周期:开始的时钟下降沿上,8086CPU采样READY线。如果READY信号
有效(高电平),则在T3状态结束后进人TA状态。在T4状态开始
的时钟下降沿,把数据总线上的数据读入CPU或写到地址选中
的单元。
在T4状态:结束总线周期。如果访问的是慢速存储器或是外设接口,则应
该在T1状态输出的地址,经过译码选中某个单元或设备后,立
即驱动READY信号到低电平。8086CPU在T3状态采样到READY信
号无效,就会插入等待周期Tw,在Tw状态CPU继续采样READY信
号;直至其变为有效后再进人T4状态,完成数据传送,结束总
线周期。在T4状态,8086CPU完成数据传送,状态信号可睨。
变为无操作的过渡状态。在此期间,8086CPU结束总线周期,恢
复各信号线的初态,准备执行下一个总线周期。
第6章作业答案
6.1若有一单板机,具有用8片2114构成的4KBRAM,连线如图创所示。
图6-1单板机与用8片2114芯片构成4KBRAM的连线图
若以每1KBRAM作为一组,贝!|此4组RAM的基本地址是什么?地址有没有重
叠区?每一组的地址范围为多少?
解:RAM的基本地址为:
第一组OOOOH~03FFH
第二组4000H~43FFH
第三组8000H~83FFH
第四组COOOH~C3FFH
地址有重叠区。每一组的地址范围为OOOH~3FFH(1024个字节)。
6.4若要扩充1KBRAM(用2114片子),规定地址为8000H~83FFH,地址线应
该如何
连接?
解:扩充1KBRAM至规定地址8000H~83FFH,其地址线的低10位接芯片,
高6位地址(A15~A10=100000)产生组选择信号。
第7章作业答案
7.1外部设备为什么要通过接口电路和主机系统相连
解:因为外部设备种类繁多,输入信息可能是数字量、模拟量或开
关量,而且输入速度、电平、功率与CPU差距很大。所以,通常要通
过接口电路与主机系统相连。
7.4CPU和输入输出设备之间传送的信息有哪几类?
解:CPU和输入输出设备之间传送的信息主要有3类。
(1)数据
在微型计算机中,数据通常为8位、16位或32位。
(2)状态信息
在输入时,有输入设备的信息是否准备好;在输出时有输出设备是
否有空,若输出设备正在输出信息,则以忙指示等。
(3)控制信息
例如,控制输入输出设备启动或停止等。
7.9设一个接口的输入端口地址为0100H,状态端口地址为0104H,状态
端口中第5位为1表示输入缓冲区中有一个字节准备好,可以输入。设计
具体程序以实现查询式
输入。
解:查询输入的程序段为:
POLI:INAL,0104H
ANDAL,20H
JZPOLI
INAL,0100H
第8章作业答案
8.1在中断响应过程中,8086CPU向8259A发出的两个RT互信号分别起什
么作用?
解:CPU发出的第一个标脉冲告诉外部电路,其提出的中断请求
已被响应,
应准备将类型号发给CPU,8259A接到了这个标脉冲时,把中断的
最高优先级
请求置入中断状态寄存器(ISR)中,同时把IRR(中断请求寄存器)
中的相应位复
位。CPU发出的第二个病脉冲告诉外部电路将中断的类型号放在
数据总线上。
8.28086CPU最多可以有多少个中断类型按照产生中断的方法分为哪两
大类?
解:8086CPU最多可以有256个中断类型。按照产生中断的方法,可以
分为内
部中断(软件中断)和外部(硬件中断)中断两大类。
8.9在编写中断处理子程序时,为什么要在子程序中保护许多寄存器?
解:因为在用户程序运行时,会在寄存器中有中间结果,当在中断服
务程序中要
使用这些寄存器前要把这些寄存器的内容推至堆栈保存(称为保护
现场)。在从中断服务程序返回至用户程序时把这些内容从堆找恢
复至寄存器中(称为恢复现场)O
8.12若在一个系统中有5个中断源,其优先权排列为:1、2、3、4、5,它
们的中断服务程序的入口地址分别为:3000H、3020H、3050H、3080H、
30A0Ho编写一个程序,当有中断请求CPU响应时,能用查询方式转至申请
中断的优先权最高的源的中断服
务程序。
解:若5个中断源的中断请求放在一中断状态寄存器中,按优先权分别
放在状态的7位(优先权最高)至位3中。查询方法的程序段为:
INAL,STATUS
CMPAL,80H
JNEN1
JMP3000H
N1:INAL,STATUS
CMPAL,40H
JNEN2
JMP3020H
N2:INAL,STATUS
CMPAL,20H
JNEN3
JMP3050H
N3:INAL,STATUS
CMPAL,10H
JNEN4
JMP3080H
N4:INAL,STATUS
CMPAL,08H
JNEN5
JMP30A0H
N5:RET
第9章作业答案
9.3在某一应用系统中,计数器/定时器8253地址为3401r343H,定时用
作分频器(N为分频系数),定时器2用作外部事件计数器,如何编制初始
化程序?
定时器0用作分频器,工作方式2,其初始化程序为:
MOVAL,34H
OUT343H,AL
MOVAL,N1
OUT342H,AL
MOVAL,N2
定时器2用作外部事件计数器,工作在方式0,其初始程序:
MOVAL,OBOH
9.4若已有一频率发生器,其频率为1MHZ,若要示求通过计数器/定时
器8253,着重产生每秒一次的信号,8253应如何连接?编写出初始
化程序。
1MHZ的信号要变为每秒一次,则需经过106分频。一个通道的计
数为16位最大为65536。故需要需两个通道级连,则每个通道计数为