[微型计算机技术及接口]部分习题参考答案
《微型计算机技术及接口》部分习题参考答案
习 题 1 部分答案
1.3 假设四种CPU 主存地址分别为16根、20根、24根以及32根,试问每种CPU 可寻址内存多少字节?
解:64K 字节,1M 字节,16M 字节,4G 字节
1.4 设字长为16位,将下列十进制数转换成二进制数,十六进制数以及BCD 数。 ① 65 ② 129 ③ 257 ④ 513
解: ①[**************]1B ,0041H ,(0000 0000 0110 0101)BCD
②[**************]1B ,0081H ,(0000 0001 0010 1001)BCD ③[**************]1B ,0101H ,(0000 0010 0101 0111)BCD ④[**************]1B ,0201H ,(0000 0101 0001 0011)BCD
1.5 设字长为8位,写出x 、y 的原码、反码和补码,并且用补码计算x+y,问是否有溢出?
① x=-78 y=35 ② x=-64 y=-66
解:①[X ]原=11001110,[X ]反=10110001,[X ]补=10110010
[Y ]原=00100011,[Y ]反=00100011,[Y ]补=00100011 因为:[X ]补=10110010 [Y ]补=00100011
那末:[X ]补+[Y ]补=11010101=[X+Y]补 X+Y=-00101011 没有溢出 ②[X ]原=11000000,[X ]反=10111111,[X ]补=11000000 [Y ]原=11000010,[Y ]反=10111101,[Y ]补=10111110 因为:[X ]补=11000000 [Y ]补=10111110 那末:[X ]补+[Y ]补
,有溢出
1.6 试用8位二进制写出以下数、字母以及控制命令的ASC Ⅱ码,还要写成奇校验、偶校验、标记校验及空格校验的ASC Ⅱ码。
①B ②8 ③CR ④NUL
解:解答如下表中。
1.7 设两个BCD 数X=1000 1001,Y=0111 0101,试用列竖式的方法计算X+Y。
解:
1.8若规格化32位浮点数N 的二进制存储格式为41360000H ,求其对应的十进制数值。 解:N=41360000H=0 10000010 [***********]00000B
S=0 E=10000010
M=[***********]00000 N=(-1)S ×(1.M )×2E-127
结果为:(101100100)BCD
=1.011011×210000010-01111111
011
=1.011011×2 =1011.011
习题2 习题解答
2.1哪两部分组成?它们的主要功能各是什么?
解:8086CPU 由总线接口部件BIU (Bus Interface Unit)和执行部件EU (Execution Unit) 两大部分组成。总线接口部件的主要功能是形成物理地址、预取指令、指令队列排队、读/写操作数和总线控制。执行部件的主要功能是进行指令译码并执行指令。
2.2 8086CPU 中有哪些寄存器?各有什么用途?标志寄存器FLAGS 有哪些标志位?在什么情况下置位?
解:8086CPU 中的寄存器如教材图2-2所示:
其用途可参考教材。
标志寄存器(FLAGS)用于反映指令执行结果的状态,常用作后续条件转移指令的转移控制条件。标志寄存器为16位,实际使用了其中的9位,所用各位的含义如教材中图2-3所示。
2.3 什么是逻辑地址?什么是物理地址?如何将逻辑地址转换为物理地址?
解:逻辑地址是指在程序和指令中使用的一种地址,它包括两部分:段基地址和偏移地址。段基地址说明每段在主存中的起始位置,它来自于段寄存器(CS、DS 、ES 、SS) 。偏移地址说明主存单元距离段起始位置的偏移量。它是一个16位的偏移地址,根据指令的不同,它可以来自于8086CPU 中不同的16位寄存器 IP 、SP 、BP 、SI 、DI 、BX 等。
物理地址是指CPU 对存储器进行访问时实际寻址所使用的地址,物理地址是由段寄存器与偏移地址共同确定的。在实际工作时,从段寄存器中取出段基址,将其左移4位,再与16位偏移地址相加,就得到了物理地址,此地址在CPU 总线接口部件BIU 的20位地址加法器中形成。物理地址的计算方法为:物理地址=段基地址×16+偏移地址。
2.4 设X=35H,Y=76H,进行X+Y和X-Y 运算后,标志寄存器FLAGS 的状态标志位各是什么?
解:X +Y =0ABH , 各标志位分别为:OF =1,SF =1,ZF =0,AF =0,PF =0,
CF =0
X -Y =0BFH , 各标志位分别为:OF =0,SF =1,ZF =0,AF =1,PF =0,CF =1
2.5 8086有哪4个逻辑段?各种逻辑段分别是什么用途?
解:在8086的程序设计中,一个程序可以有代码段CS 、数据段SS 、堆栈段SS 和附加段ES 。
代码段CS 用于存放程序;
数据段SS 和附加段ES 用于存放数据;
堆栈段SS 用于存放数据(包括暂存数据和保护现场的数据)。
在形成物理地址时,CS 、DS 、ES 和SS 四个段寄存器的作用如下:当取指令时,CPU 以CS 寄存器的值作段基址,再加上IP 中的16位偏移地址,得到指令的物理地址;当进行堆栈操作时,段基地址CPU 以SS 为堆栈段的基地址,偏移地址由SP 或BP 来指定,当访问存储器的数据段时,数据段寄存器DS 或附加段寄存器ES ,再加上16位偏移地址,得到操作数的物理地址。
2.6 请将如下逻辑地址用物理地址表示:
(1)FFFFH:0 (2)45H:18H (3) 2000H :4600H (4)B821H:3456H 解:用PA 表示物理地址,PA =段基地址×16+偏移地址
(1) PA =FFFFH ×16+0000H=FFFF0H (2)PA =45H ×16+18H=468H (3)PA =2000H ×16+4600H=24600H (4)PA =B821H ×16+3456H=BB666H
2.7若8086CPU 工作于最小模式,试指出当CPU 将AH 的内容送到物理地址为 91001H 的存储单元时,以下哪些信号应为低电平:M/IO 、RD 、WR 、BHE /S7、DT/R 。若CPU 完成的是将物理地址91000H 单元的内容读入AL 中时,则上述哪些信号应为低电平。
解:当CPU 将AH 的内容送到物理地址为 91001H 的存储单元时,CPU 完成的是写存储器操作,且完成的是访问存储器的奇地址,因此,WR =0,BHE /S7=0;
若CPU 完成的是将物理地址91000H 单元的内容读AL 中时,CPU 完成的是读存储器操作,且完成的是访问存储器的偶地址,因此,RD =0,DT/R =0。
2.8什么是引脚的分时复用?请说出8086CPU 有哪些引脚是分时复用引脚?如何分时复用?
解:8086的数据线和地址线是利用复用的,所以常把8086的总线称为多路总线,即某一时刻总线上出现的是地址,另一时刻,总线上出现的是数据。正是这种引脚的分时使用方法才能使8086用40条引脚实现20位地址、16位数据及众多的控制信号和状态信号的传输。 8086CPU 的分时复用的引脚有:地址/数据复用引脚是:AD 15~AD 0,在总线周期的T 1状态,传送地址信息,在其它状态则传送数据信息;
地址/状态复用引脚是:A 19/S6~A 16/S3,这些引脚在总线周期的T 1状态输出地址的高4位,在总线的T 2、T 3、T W 和T 4状态时,用来输出状态信息。
2.9试说明8086CPU 工作在最大和最小模式下系统基本配置的差异。
解:8086CPU 可以工作在两种工作模式,即最小工作模式和最大工作模式。最小工作
模式用于单机系统,系统中所有总线控制信号全部由8086直接提供,因此系统中的总线控制电路可减到最少;最大工作模式用于多处理机系统,8086作为主处理器,其它的处理器为协处理器,协助主处理器工作。在最大工作模式下,系统所需要的控制信号均由总线控制器8288提供。
8086具体工作在最大模式还是最小模式,完全由硬件连接决定。当将CPU 的第33号引脚MN/MX 接+5V 时,8086工作在最小模式,当MN/MX 接地时,8086工作在最大模式。
2.10分析8086CPU 两个中断输入引脚的区别,以及各自的使用场合。
解:INTA 是中断响应信号,输出,三态,低电平有效。该信号是CPU 响应中断请求后,向中断源发出的中断响应信号,用以通知中断控制器,以便由中断控制器提供中断类型号。在每个中断响应周期,CPU 在INTA 引脚上发出两个连续的负脉冲。
⑿NMI 是非屏蔽中断请求信号,输入,正跳变有效。这类中断不受中断允许标志IF 的影响,也不能用软件进行屏蔽。当NMI 引脚收到一个正沿触发信号时,CPU 就会在结束当前指令后引起中断,执行中断类型号2的非屏蔽中断处理程序。
习 题 3 部分答案
3.1 Pentium 在实地址模式和V86模式下,可访问存储器空间的大小分别为多少字节? 解:①在实模式下,可以访问1MB 存储器。
②在V86模式下,禁止分页情况下,只能访问1MB 存储器。 允许分页情况下,可以访问4GB 存储器。
3.2 Pentium 工作在只分段不分页、只分页不分段以及既分段又分页三种情况下,分别可访问存储空间的大小为多少字节?
解: ①只分段不分页,可以访问虚拟存储空间64TB
②只分页不分段,可以访问虚拟存储空间4GB ③分页分段,可以访问虚拟存储空间64TB 3.3 下面哪些指令不能在实模式下运行?为什么? (1)MOV AL ,DS :[ESI] (2)ADD AX ,FS :[EDI] (3)MOV AL ,DS :[SI] (4)ADC EAX ,FS :[DI]
解:(1)、(2)两条指令不能在实模式下运行,因为在实模式下不允许ESI ,EDI 作
偏移地址。
3.4 在虚拟8086模式下,在从虚地址转换到物理地址的过程中,可用到几个页目录项
和几个页表项?
解:可用到第1个页目录项,272个页表项。
3.5 在段选择符中,TI=0和TI=1,分别在LDT 还是GDT 中访问描述符? 解:TI=0访问GDT ,TI=1访问LDT 。 3.6 当前的段描述符存放在何处?
解:当前的段描述符存放在微处理器的Cache 中。
3.12 存储器特权级保护的分析。设当前代码段的特权级CPL ,段选择符请求的特权级RPL 以及数据段描述符的特权级DPL 如表3-5 所示,回答4种组合中每一种组合能否将段选择符装入到数据段寄存器中,通过填写下表,回答哪几种能行?哪几种不行?并将理由填入表中。 表3-5 CPL、RPL 、DPL 之间的关系
解:第1行、第2行可以将段选择符装入到数据段寄存器中。
第3行、第4行则不行,原因分别是:
DPL <CPL DPL <CPL 、RPL
3.14 Pentium 超标量流水线共分几段,其中整数段有几段? 解:共分为8段,其中整数段分为5段。
3.15 下列各组指令中,哪些会产生数据相关?数据相关的类型是什么? (1)MOV AX ,BX ADD CX ,SI (2)MOV AX ,DX ADD BX ,AX (3)MOV CX ,BX MOV BX ,DI (4)DIV AX ,SI SUB AX ,DI
解:(1)不会产生数据相关。
(2)会产生数据相关,写后读(RA W )数据相关。 (3)会产生数据相关,读后写(W AR )数据相关。 (4)会产生数据相关,写后写(W A W )数据相关。
习 题 4 部分答案
4.1 分别指出下列指令中源操作数和目的操作数的寻址方式 (1) MOV EAX,12345678H (2) MOV [ESI],AX (3) MOV 2[EDI],BX (4) MOV 2[BX+SI],DX (5) MOV AX,[10]
(6) MOV EAX,2[ESI*4] (7) MOV EAX,2[EBX*8][EDI] (8) MOV EAX,[ESI][EBP+0FFFF0H] (9) MOV EAX,2[EDI*8][EBP+80] 解:
(1) INC [ESI] (2) MOV AX,BL (3) MOV 2,EAX (4) MOV AX,[DX] (5) MOV AX,[BX+BP] (6) MOV AX,[SI+DI] (7) MOV AH,300 (8) MOV [ESI],[EDI] (9) PUSH AL (10) POP DH (11) MOV CS,AX (12) MOV SS,AX (13) SHL AX,3
MOV EAX,[ESI]
MOV [ESI],EAX
解:这两条指令的区别是,指令“MOV EAX,[ESI]”是将内存单元DS:[ESI]中的内容读到CPU 中的寄存器EAX ;而指令“MOV [ESI],EAX”是将CPU 中寄存器EAX 中的内容写入内存单元DS:[ESI]。
4.4 比较下列两条指令, 指出它们的区别
MOV AX,[SI]
LEA AX,[SI]
解:这两条指令的区别是,指令“MOV AX,[SI]” 是将内存单元DS:[SI]中的内容读到CPU 中的寄存器AX ;而指令“LEA AX,[SI]”是将内存单元DS:[SI]的偏移地址送到AX 。 4.5 假定(EAX)=12345678H,不用计算, 写出下面每条指令执行后(EAX)=?
① TEST EAX,1
② XOR EAX,EAX ③ SUB EAX,EAX
④ CMP EAX,87654321H
解: ①(EAX)=12345678H ② 0 ③ 0 ④(AX)=12345678H 4.6 假定(AX)=1234H,(BX)=5678H指出下列指令中
① 哪些指令执行后, 源操作数和目的操作数都不发生变化? ② 哪些指令执行后, 源操作数和目的操作数都发生变化?
③ 哪些指令执行后, 源操作数不发生变化而目的操作数发生变化? 指令:
① TEST AX,1234 ② ③ ④ ⑤
AND AX,BX SUB AX,1234H CMP AX,1234H XCHG AX,BX
解:
① 指令“TEST AX,1234”和指令“CMP AX,1234H”执行后, 源操作数和目的操作数都不发生变化。
② 指令“XCHG AX,BX ”执行后, 源操作数和目的操作数都发生变化。
③ 指令“AND AX,BX”和“SUB AX,1234H”执行后, 源操作数不发生变化而目的操作数发生变化。 4.74.7 阅读下面的程序, 回答问题 1. 【程序一】 DA TA SEGMENT
BUF DB '1234'
N=$-BUF
BCD DB N DUP(?)
BCD →5 6 7
变量 BUF →
1 2 3 4
值 EA 0
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START :MOV AX,DATA
MOV DS,AX
LEA SI,BUF
MOV CX,N
LEA DI,BCD+N-1
LOOP1:MOV AL,[SI]
SUB AL,30H MOV [DI],AL INC SI DEC DI DEC CX JNE LOOP1 MOV AH,4CH INT 21H
CODE ENDS END START
【问题一】画出内存分配图。
【问题二】说明程序功能, 程序执行后, 从BCD 开始的N 个字节单元中的内容是什么? 【问题三】找出一条指令代替指令“SUB AL,30H”, 使程序功能不变。
【问题四】如果将代码段中的指令LEA DI,BCD+N-1改成LEA DI,BCD;DEC DI改成INC DI,其它指令不变, 程序执行后, 从BCD 开始的N 个字节单元中的内容是什么? 【问题五】取消数据段的BCD 存储区, 将处理后的数据放回原处, 应如何修改程序? 2. 【程序二】 .MODEL SMALL .386 .STACK
.DATA
STRING DB 'Assemble Language is powerful' N=$-STRING
NEWSTR DB N DUP(0) .CODE
.STARTUP MOV CX,N
LEA SI,STRING LEA DI,NEWSTR .REPEAT
MOV AL,[SI]
.IF (AL >= 'a') && (AL
.UNTILCXZ .EXIT
END
【问题】写出程序功能,程序执行后,从NEWSTR 开始的N 个字节中的内容是什么? 解: 1.【程序一】
【问题一】内存分配图
【问题二】
程序功能是将从BUF 开始的连续4个字符'1234' 转变为4个对应的数值, 按逆序存放到以变量BCD 为首地址的存储单元中。程序执行后, 从BCD 开始的N 个字节单元中的内容是4 3 2 1。 【问题三】
用指令“AND AL,0FH”代替指令“SUB AL,30H”, 程序功能不变。
【问题四】如果将代码段中的指令LEA DI,BCD+N-1改成LEA DI,BCD;DEC DI改成INC DI,其它指令不变, 程序执行后, 从BCD 开始的N 个字节单元中的内容是1 2 3 4。
【问题五】取消数据段的BCD 存储区, 将经处理后的数据放回原处, 修改程序如下 DA TA SEGMENT
BUF DB '1234'
N=$-BUF
变量 BUF →
BCD → 变量 BUF
→
BCD →
5 6 7
1 2 3 4 EA 5 0 6 7 1 2 3 4
值 EA 0
DA TA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START :MOV AX,DATA
MOV DS,AX
LEA SI,BUF
MOV CX,N
LOOP1:MOV AL,[SI]
SUB AL,30H MOV [SI],AL INC SI DEC CX JNE LOOP1 MOV AH,4CH INT 21H
CODE ENDS END START 2.【程序二】
程序功能是将从STRING 开始的N 个字节中的字符串变成大写存放到从NEWSTR 开始的N 个字节中。程序执行后,从NEWSTR 开始的N 个字节中的内容是"ASSEMBLE LANGUAGE IS POWERFUL"。 4.8 阅读下面的程序,填空。
1.【程序一说明】用减法实现除法。X 是被除数,Y 是除数,处理结束后商存放在RESULT ,余数存放在XYMOD 。 【程序一】 .MODEL SMALL .386 .STACK .DATA
X DW 7 Y DW 2 .DATA?
RESULT DW ? XYMOD DW ? .CODE .STARTUP MOV AX,X MOV BX,Y
MOV CX,0
.WHILE _____①____
SUB AX,BX _____②_____
余数→
被除数 7 5 3 1
除数 2 2 2 2
商 0 1 2 3
←商
图4-15 用减法实现除法示意图
.ENDW
MOV RESULT,CX MOV XYMOD,AX .EXIT END
2.【程序二说明】从BUF 开始的11个单元中存放着11个整数,找出这11个数中正数并且是偶数的个数存入R 中。
【程序二】
DA TA SEGMENT
BUF DB –2,5,-3,6,100,0,-20,-9,8,-110,21 R DW ?
DA TA ENDS
CODE SEGMENT BEGIN :MOV AX,DA TA
③ LEA BX,BUF MOV CX,N CMP [BX],BYTE PTR 0 ⑤
TEST [BX],BYTE PTR 1
LOPA :
NEXT
INC AX : INC BX
DEC CX
MOV R,AX MOV AH,4CH
INT 21H CODE ENDS END
解: 1.【程序一】① AX>=BX ② INC CX 2.【程序二】
① $-BUF
② ASSUME CS:CODE,DS:DATA
③ MOV DS,AX ④ MOV AX,0 ⑤ JLE NEXT ⑥ JNZ NEXT ⑦ JNZ LOPA ⑧ BEGIN
3.【程序三】① DX ② SAR CL,1
4.9 编程题(用完整段模式和简化段模式分别实现) 1.【程序说明】
编写一个在某项比赛中计算每一位选手最终得分的程序。计分方法如下:
① 10名评委, 在0~10的整数范围内给选手打分。
② 10个得分中, 除去一个最高分(如有同样两个以上最高分也只除一个), 除去一个最低分(如有同样两个以上最低分也只除一个), 剩下的8个得分取平均值为该选手的最终得分。
2.【程序说明】设有一个数组存放学生的成绩(0~100), 编程统计0~59、60~69、70~79、80~89、90~100分的人数, 并分别存放到SCOREE 、SCORED 、SCOREC 、SCOREB 、SCOREA 单元中。 解:
1. 【程序】(完整段模式)
DATA SEGMENT
SCORE DB 7,8,9,8,10,10,9,8,7,10 N=$-SCORE AVERAGE DB ? MAX DB ? MIN DB ? DATA ENDS
CODE SEGMENT 'CODE'
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DL,SCORE MOV MAX,DL MOV MIN,DL MOV CX,N-1
MOV BX,1
CYCLE: MOV AL,SCORE[BX]
ADD DL,AL CMP AL,MAX JLE CMPMIN MOV MAX,AL
CMPMIN: CMP AL,MIN
JGE NEXT MOV MIN,AL NEXT:
INC BX LOOP CYCLE SUB DL,MAX SUB DL,MIN MOV CL,3 SAR DL,CL
MOV AVERAGE,DL
MOV AH,4CH
INT 21H
CODE ENDS
END START
1. 【程序】(简化段模式) .MODEL SMALL .386
.STACK
.DATA
SCORE DB 7,8,9,8,10,10,9,8,7,10 N=$-SCORE .DATA?
AVERAGE DB ? MAX DB ? MIN DB ? .CODE .STARTUP MOV DL,SCORE MOV MAX,DL MOV MIN,DL MOV CX,N-1 MOV BX,1 .WHILE CX
.ENDW
MOV AL,SCORE[BX] ADD DL,AL .IF AL > MAX MOV MAX,AL .ENDIF
.IF AL
SUB DL,MAX SUB DL,MIN SAR DL,3 MOV AVERAGE,DL .EXIT END
2. 【程序】(完整段模式) DATA SEGMENT
SCORE DB 90,23,56,67,98,78,10,45,87,100 N=$-SCORE SCOREF DB 0 SCOREE DB 0 SCORED DB 0 SCOREC DB 0 SCOREB DB 0 SCOREA DB 0
DATA ENDS
CODE SEGMENT 'CODE'
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX
LEA SI,SCORE MOV CX,N
MOV DL,10
CLASS: MOV AH,0
MOV AL,[SI] DIV DL SUB AL,5
JG GREAT
INC BYTE PTR SCOREF
JMP NEXT
GREAT: MOV AH,0
MOV BX,AX INC BYTE PTR SCOREF[BX] INC SI
LOOP CLASS MOV AH,4CH
NEXT:
INT 21H
CODE ENDS
END START
2. 【程序】(简化段模式) .MODEL SMALL .386 .STACK .DATA
SCORE DB 90,23,56,67,98,78,10,45,87,100 N=$-SCORE .DATA?
SCOREF DB 0 SCOREE DB 0 SCORED DB 0 SCOREC DB 0 SCOREB DB 0 SCOREA DB 0 .CODE
.STARTUP
LEA SI,SCORE MOV CX,N MOV DL,10
.REPEAT
MOV AH,0 MOV AL,[SI] DIV DL SUB AL,5
.IF(AL
MOV BX,AX
INC BYTE PTR SCOREF[BX]
.ENDIF INC SI .UNTILCXZ
.EXIT END
END
习 题 5 部分答案
5.4 已知某RAM 芯片的存储容量为16KB ,ROM 芯片的存储容量为4K ×8位,问每种存储芯片的地址线和数据线分别为多少?
解: RAM 芯片:地址线14根,数据线8根
ROM 芯片:地址线12根,数据线8根
5.5 分别用8KB 和16K ×8位的RAM 芯片构成48KB 的存储器,各需要多少片? 解: 8KB 芯片:6片 、16K ×8位芯片:3片
5.8 已知Intel 6264 RAM芯片的存储容量为8KB ,要求选用5片6264 RAM芯片接在系统中,地址范围从F0000H 开始,选用74LS138三一八译码器及逻辑门电路,通过全译码方式译码产生片选,试设计出译码电路,并计算出每个片选的地址范围。 解:
5.9 选用1M ×4位DRAM 芯片构成32位机(设存储器数据总线为32位)的存储器,存储容量为16MB ,试问: (1)共计需要多少片?
(2)共计需要分几组?每组多少片? 解:
(1) 16MB/(1M×4位)=32片
(2) 分为4组,每组8片
5.12 设CPU 执行一段程序时,访问Cache 次数Nc=2000,访问主存次数Nm=100,又假设访问Cache 存取周期为50ns ,访问主存存取周期为250ns ,试求命中率h 、平均访问时间t a 以及倍率r 。
解: ①求命中率h h=
N C N C +N M
=
20002000+100
=95.23809%≈95%
②求平均访问时间t a
t a =htc +(1-h)tm
=0.95×50ns+(1-0.95)×250ns =47.5ns+12.5ns =60ns
③求倍率r r=
t m t c
=
250ns 50ns
=5
5.15 32位存储器组织将内存分为4个存储体,地址总线32位,画出每个存储体的地址分配图。
解:在32位数据总线的微处理器中,直接输出A 31~A230位地址,低2位A 1、A 0由内部编码产生4个字节选择信号BE 3~BE 0,以选择不同的字节。由4个字节选择信号把主存储器分为4个存储体,依次存放32位数据中的4个字节,每个体的8位数据依次并行连接到外部数据线D 31~D0上,由BE 3~BE 0选中每个存储体,每个体的地址范围如下图所示。
习 题 6 部分答案
6.5 根据图6-2,编写从端口0输出8位数据的简单程序。
解:MOV DX ,3E0H
MOV AL ,n ;n 为8位二进制数 OUT DX ,AL
6.10分别画出查询式输入与查询式输出的流程图。 解: ①查询式输入程序的流程图如下:
②查询式输出程序的流程图如下:
6.14根据图
6-10, 模拟输入电压从CH 7输入, 采样200次,采集的数据存入数据段内200H 开始的存储空间,利用查询方式编写A/D转换程序段。
编程如下:
MOV SI ,0200H ;存放采集CH 7数据的起始地址传给SI
MOV CX ,00C8H ;采集200次
ABC :MOV DX ,300H ;Y 0通道地址给DX
MOV AL ,07H
OUT DX ,AL ;启动信号为0,选CH 7 MOV AL ,0FH ;启动信号为1,仍选通CH 7 OUT DX ,AL MOV AL ,07H
OUT DX ,AL ;启动A/D转换 MOV DX ,301H ;状态口地址给DX
XYZ :IN AL ,DX
TEST AL ,80H
JZ XYZ ;如果EOC=0,转XYZ MOV DX ,302H ;数据口地址给DX IN AL 、DX ;读数据口 MOV [SI ],AL ;存入内存 INC SI LOOP ABC
习 题 7 部分答案
7.12 某一8086CPU 系统中,采用一片82C59A 进行中断管理。设定82C59A 工作在普通全嵌套方式,发送EOI 命令结束中断,采用边沿触发方式请求中断,IR 0对应的中断向量码为90H 。 另外,82C59A 在系统中的I/O地址是300H(A0=0) 和301H(A0=1) 。请编写82C59A 的初始化程序段。
解: 对82C59A 的初始化程序如下:
MOV AL ,00010011B MOV DX, 300H
OUT DX ,AL MOV AL ,90H INC DX
OUT DX ,AL MOV AL ,00000011B
;设置ICW 1初始化命令字 ;将ICW 1输出到偶地址端口 ;ICW 2中断类型号基值 ;将ICW 2送入奇地址端口 ;ICW 4
OUT DX ,AL ;将ICW 4送入奇地址瑞口 7.13下段程序用于读出82C59A 中哪一个寄存器的内容? MOV AL ,0BH OUT 20H ,AL
NOP
IN AL ,20H 解: OBH 即 00001011B 写入 20H 偶地址端口, 并且 D 4D 3=01 是 OCW3的标志位,D 1Do=11即RR 、RIS =11时, 表示CPU 的下一条IN 指令要读取ISR 寄存器的内容。
习题8习题解答
8.1 8255A的方式0一般使用在什么场合?在方式0时,如果要使用查询方式进行输入输出,应该如果处理?
解:方式0的使用场合有两种,一种是同步传送,另一种是查询式传送。在方式0情况下,没有规定固定的应答信号,所以,这时,将端口A 和端口B 作为数据端口,把端口C 的4个数位(高4位或者是低4位均可)规定为输出口,用来输出一些控制信号,而把端口C 的另外4个数位规定为输入口,用来读入外设的状态,即利用端口C 来配合端口A 和端口B 的输入/输出操作。使用查询方式进行输入输出时,可利用端口C 的某一位作查询,只有当该位为1时,方可以将数据送到输入或输出端口去。
8.2设8255A 的4个端口地址分别为0C0H 、0C1H 、0C2H 和0C3H ,要求用按位置位/复位控制字使PC 6输出方波信号,试编程实现。
解:MOV
MOV OUT
DX ,0C3H AL ,80H DX ,AL AL ,0CH
L1:MOV
OUT NOP NOP
MOV
OUT
NOP
NOP
JMP DX ,AL AL ,0DH DX ,AL L1
8.3 设8255A 接到系统中,端口A 、B 、C 及控制口地址分别为220H 、221H 、222H 及223H ,工作在方式0,试编程将端口B 的数据输入后,从端口C 输出,同时,将其取反后从端口A 输出。
解:MOV
MOV OUT MOV MOV IN MOV OUT DX ,223H AL ,82H DX ,AL DX ,AL AL ,221H AL ,DX DX ,222H DX ,AL
AL
DX ,220H
DX ,AL NOT
MOV OUT
8.4对8255A 的控制口写入B0H ,其端口C 的PC 5引脚是什么作用的信号线?试分析8255A 各端口的工作状态。
解:当控制字为B0H 时,即10110000B
即8255A 的端口A 工作在方式1,作输入,端口C 的上半部作输出,B 端口工作在方式0,作输出,端口C 的低4位作输出。
根据上述分析可得知,当8255A 的端口A 工作在方式1下作输入时,PC 5的引脚作状态信号IBF A ,即输入缓冲器满信号。
8.5并行通信和串行通信各有什么特点?
解:并行通信就是把一个字符的各数位用几条线同时进行传输。
并行接口最基本的特点是在多根数据线上以数据字节为单位与I/O设备或被控对象
传送信息。
∙ 在并行接口中,除了少数场合之外,一般都要求在接口与外设之间设置并行数据线的同时,至少还要设置两根联络信号,以便互锁异步握手方式的通信。
∙ 在并行接口中,每次以8位或16位为单位进行同时传送。因此,当采用并行接口与外设交换数据时,即使是只用到其中的一位,也要一次输入/输出8位或16位。
∙ 并行传送的信息,不要求固定的格式。
并行接口的优点是传输速率高,但由于需要多根数据线,因此不适合远距离数据传输,一般用于近距离传送的场合。
串行通信就是指通信的发送方和接收方之间的数据在单根通信线上逐位顺序传送。 ∙ 计算机和外设之间只使用一根信号线传输信息,数据在一根数据信号线上一位一位地进行传输,每一位数据都占据一个固定的时间长度。
∙
∙ 串行通信在一根线上既要传送数据,还要传送联络信号,因此,串行通信有一定的数据格式的约定,分为异步和同步数据格式。 串行传输的速率需要控制,通信双方要约定相同的波特率实现通信。由于受波特
率上限的约束,串行通信速度慢。
信号的逻辑定义与TTL 电平不相同。
8.6“由于按位置位/复位命令是对C 口进行操作,所以可以写到C 口”,这句话对吗?为什么?
解:不对。这是因为按位置位/复位是一个命令,它就要按命令的定义格式来处理每一位,如果把它写入端口C ,就会按端口C 的数据格式来处理。这两种定义完全不同的格式是不能互换的,所以,它只能写到命令端口中,按命令定义来处理。
8.7什么叫同步通信方式?什么叫异步通信方式?它们各有什么区别?
解:同步通信,即将许多字符组成一个信息组,字符一个接一个地传输,每组信息的开始要加上同步字符,没有信息传输出时,要填上空字符,同步通信不允许有间隙。异步通信,两个字符之间的传输间隔是任意的,每个字符的前后都要用一些数位作为分隔位。比较起来,在传输率相同时,同步通信方式下的传输效率要比异步方式下的高,因为同步方式下的非数据信息比例要较小。但是,在同步方式下,要求进行信息传输双方必须用同一个时间进行协调,在传输数据的同时,还必须传输时钟信号。而在异步方式下,接收方的时钟频率和发送方的时钟频率不必完全一样。
8.8什么叫波特率因子?什么叫波特率?设波特率因子为64,波特率为1200,那么时钟频率为多少?
解:发送时钟与接收时钟的频率与位传输率的比称为波特率因子,而位传输率称为波特率。
发送/接收时钟频率=n ×发送/接收波特率
=64×1200
=76800Hz
=76.8KHz
∴时钟频率为76.8KHz
8.9设异步传输时,一帧信息包括1位起始位、7位信息位、1位奇偶校验位和1位停止位,如果波特率为9600bps ,则每秒能传输多少个字符?
解:即9600/(1+7+1+1)
=9600/10
=960个
∴每秒能传输960个字符
8.10两台PC 机采用异步串行通信方式传送数据。帧格式为:字符数据位7位,停止位1位,用偶校验方式,波特率为2400bps 。选用8250芯片,编写发送数据和接收数据的初始化程序段。
解:
FOREVER :
=字符码
RECEIVE :
MOV DX ,3FBH MOV AL ,80H OUT DX ,AL MOV DX ,3F8H MOV AL ,30H OUT DX ,AL INC DX MOV AL ,AL ,00H OUT DX ,AL MOV DX ,3FBH MOV AL ,1AH OUT DX ,AL MOV DX ,3FCH MOV AL ,03H OUT DX ,AL MOV DX ,3F9H MOV AL ,00H OUT DX ,AL MOV DX,3FDH IN AL,DX TEST AL,1EH JNZ ERROR TEST AL,01H JNZ RECEIVE TEST AL,20H JNZ RECEIVE MOV AH,01H ;读键盘缓冲器内容,若有键按下,则ZF =0,且AL INT 16H JZ FOREVER MOV DX ,3F8H OUT DX ,AL ;读入接收字符 JMP FOREVER MOV DX ,3F8H IN DX ,AL AND AL ,7FH MOV AH ,14H
INT JMP 10H FOREVER
8.11选用8251A 进行同步方式的通信,规定用内同步方式,同步字符为2位,用奇校验,7位数据位,端口地址为166H 和167H ,试对8251A 进行初始化编程。
解:
MOV DX ,167H MOV AL ,18H OUT MOV OUT OUT MOV DX ,AL AL ,16H DX ,AL DX ,AL AL ,0B7H
OUT DX ,AL
8.12选用8251A 进行异步方式的通信,发送100个字符,规定波特率因子为64,7位数据位,1位停止位,用偶校验,端口地址为140H 、141H ,缓冲区首址为2000H :3000H ,试对8251A 编程。
解:发送程序:
START :MOV
DX ,141H AL ,7BH DX ,AL AL ,37H DX ,AL DI ,3000H CX ,100 DX ,141H AL ,DX AL ,01H L1 DX ,140H AL ,[DI ] DX ,AL DI L1 AX ,4C00H
21H
DX ,141H
AL ,7BH
DX ,AL
AL ,14H
DX ,AL
SI ,2000H
CX ,100
MOV OUT MOV OUT MOV MOV L1:MOV IN AND JZ MOV MOV OUT INC LOOP MOV INT 接收程序: BEGIN : MOV MOV OUT MOV OUT MOV MOV
L2:MOV IN TEST JNZ AND MOV IN DX ,141H AL ,DX AL ,38H ERR AL ,02H DX ,140H AL ,DX MOV [SI ],AL INC SI LOOP L2 L3 ERR _OUT (略) JMP ERR :CALL
L3:MOV AX ,4C00H
INT 21H
习 题 9 部分答案
9.11试按如下要求分别编写82C54的初始化程序:己知82C54的计数器0、1、2和控制字I/O地址依次为104H 、105H 、106H 、107H 。
(1) 使计数器1工作在方式0,仅用低8位作二进制计数,计数初值为128;
(2) 使计数器0工作在方式1,按BCD 码计数,计数值为3000;
(3) 使计数器2工作在方式2,按二进制计数,计数值为02F0H 。
解:
(1) MOV DX ,07H ;控制端口地址给DX
MOV AL ,01010000B ;计数器1控制字
OUT DX ,AL
MOV DX ,05H
MOV AL ,80H
OUT DX ,AL
(2)
MOV DX ,07H
MOV AL ,00110011B
OUT DX ,AL
MOV DX ,04H
MOV
OUT
MOV
OUT
(3)
MOV DX ,07H
MOV AL ,10110100B
OUT DX ,AL
DEC
MOV
;计数初值 128 ;计数器0控制字 ; ;先送低8位 ;后送高8位 AL ,00H DX ,AL AL ,30H DX ,AL ;计数器2控制字 DX AL ,0F0H
OUT DX ,AL ;先送低8位
MOV AL ,02H
OUT DX ,AL ;后送高8位
9.12 设82C54计数器0、1、2和控制字的I/O地址依次为F8H 、F9H 、FAH 、FBH ,说明如下程序的作用。
MOV AL,33H
OUT 0FBH,AL
MOV AL,80H
OUT 0F8H,AL
MOV AL,50H
0UT 0F8H,AL
解: 33H 即00110011B 送入控制地址 FBH ,表示计数器0采用16位计数,工作方式1,数据格式为 BCD ,计数初值为:5080。
习 题 10 部分答案
10.5 设10位A/D转换器输入模拟电压的范围是0~5V,试问分辨率是多少?能分辨模拟电压的值是多少?若采用12位A/D转换器,能分辨模拟电压的值又是多少?
解:分辨率为10位,能分辨最小模拟电压为5V/1023=4.8876mV,若采用12位A/D转换器,能分辨最小模拟电压为5V/4095=1.221mV。
10.6 AD574接成单极性模拟输入时,从10Vin 和20Vin 输入模拟电压的最小分辨电压分别是多少?
解:①从10Vin 输入模拟电压的最小分辨率:10V/4095=2.442mV
②从20 Vin 输入模拟电压的最小分辨率:20V/4095=4.884mV
10.7 假设图10-10中译码器输出Y n 的地址范围为300H~301H,根据此图用汇编语言编写PC 机实现A/D转换的程序段。
解:编程如下:
MOV DX ,300H
OUT DX ,AL ;启动作12位A/D转换
CALL DELAY ;调用延时子程序
MOV DX ,300H
IN AL ,DX ;读高8位
MOV AH ;AL ;存入AH 中
MOV DX ,301H
IN AL 、DX ;读低4位,存于AL 高4位
MOV CX ,4;右移4次
ABC :CLC ;CF=0
RCR AH ,1
RCR AL ,1
LOOP ABC
;采集的12位二进制数存入AX 中。
10.9 用图10-15所示的D/A转换电路产生锯齿波,试编写一段程序。
解:编程如下:
MOV DX ,200H ;设y 0端口地址为200H
MOV AL 、00H
OUT DX 、AL
ABC :CALL DELAY ;调用延时子程序
INC AL
OUT DX 、AL
JMP ABC
10.10 如果模/数转换芯片转换结果的输出端不带三态输出结构,该芯片的输出端与CPU 的数据线连接时如何处置?
解: 在该芯片的输出端与CPU 的数据线之间增加一级三态缓冲器,并且用片选信号控制三态缓冲器的控制端。