微机原理课后习题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章
学习指导:
1.掌握十六进制、二进制、BCD(十进制数)、ASCII码
2.掌握有符号数(补码、原码)、无符号数计算机的表示方法以及表示范围
3.掌握补码运算
4.了解计算机基本组成及工作原理
5.了解新技术
6.了解计算机主要性能指标
2、完成下列数制之间的转换。

(1)01011100B=92D (3)135D=10000111B (5)10110010B=262Q=B2H
3、组合型BCD码和非组合型BCD码有什么区别?写出十进制数254的组合型BCD数和非组合型数。

答:组合型BCD码用高四位和低四位分别对应十进制数的个位和十位,其表示范围是0~99;非组合型BCD码用一个字节的低四位表示十进制数,高四位则任意取值,表示范围为0~9。

组合型:254=(001001010100)BCD
非组合型:254=(00000010 00000101 00000100)BCD
7、计算机为什么采用补码形式存储数据?当计算机的字长n=16,补码的数据表示范围是多少?
答:在补码运算过程中,符号位参加运算,简化了加减法规则,且能使减法运算转化为加法运算,可以简化机器的运算器电路。

+32767~ -32768。

9、设计算机字长n=8,求下列各式的[X+Y]补和[X-Y]补,并验证计算结果是否正确。

(1)X=18,Y=89 [X+Y]补=00010010+01011001=01101011B=107D 正确
[X-Y]补=10111001B=00010010+10100111=(-71D)补正确
(2)X=-23,Y=-11 [X+Y]补=11101001+11110101=11011110B=(-34D)补正确[X-Y]补=11101001+00001011=11110100B=(-12D)补正确
(3)X=18,Y=-15 [X+Y]补=00010010+11110001=00000011B=(3D)补正确
[X-Y]补=00010010+00001111=00100001B=(33D)补正确
(4)X=-18,Y=120 [X+Y]补=11101110+01111000=01100110B=(102D)补正确[X-Y]补=11101110+10001000=01110110B=(123D)补由于X-Y=-138 超出了机器数范围,因此出错了。

13、微型计算机的主要性能指标有哪些?
答:CPU字长、存储器容量、运算速度、CPU内核和IO工作电压、制造工艺、扩展能力、软件配置。

第二章
学习指导:
1.了解8086微处理器的基本组成及工作原理
2.掌握通用寄存器(AX、BX、DX、CX、SI、DI、SP、BP)段寄存器(CS、SS、DS、ES)标志寄存器(状态标志位和控制标志位含义)作用
3.掌握逻辑地址、物理地址以及它们之间的关系物理地址=段基址x16+偏移地址
4.掌握逻辑地址和物理地址表示形式2000:0100,20100
5.存储器地址的表示图2-5
6.主要引脚RD、WR、M/IO、INTR、INTA、NMI、HOLD、HLDA
2、8086标志寄存器包含哪些标志位?试说明各标志位的作用。

答:进位标志:CF;奇偶校验:PF;辅助进位:AF;零标志:ZF;符号标志:SF;溢出标志:OF。

5、逻辑地址与物理地址有什么区别?如何将逻辑地址转换为物理地址?
答:物理地址是访问存储器的实际地址,一个存储单元对应唯一的一个物理地址。

逻辑地址是对应逻辑段内的一种地址表示形式,它由段基址和段内偏移地址两部分组成,通常表示为段基址:偏移地址。

物理地址=段基址*10H+偏移地址。

6、写出下列逻辑地址的段基址、偏移地址和物理地址。

(1)2314H:0035H (2)1FD0H:000AH
答:(1)段基址:2314H;偏移地址:0035H;物理地址:23175H。

(2)段基址:1FD0H;偏移地址:000AH;物理地址:1FD0AH。

8、设(CS)=2025H,(IP)=0100H,则当前将要执行指令的物理地址是多少?
答:物理地址=(CS)*10H+(IP)=20350H
9、设一个16字的数据区,它的起始地址为70A0H:DDF6H(段基址:偏移地址),求这个数据区的首字单元和末字单元的物理地址。

答:首字:70A0*10H+DDF6H=7E7F6H
末字单元地址=起始地址+(字数-1)*2=7E7F6H+(16-1)*2=7E814H。

13、80486CPU内部由哪些主要部件构成?有哪几种工作模式?
答:(1)总线接口单元、指令预取单元、指令译码单元、控制单元,整数运算单元,浮点运算单元,段预存储器管理单元,高速缓冲单元。

(2)实地址模式、保护虚拟地址模拟、虚拟8086模式
14、80486CPU存储器最大可寻址空间是多少?虚拟存储空间是多少?两者有何区别?
答:最大可寻址空间是4GB,虚拟存储空间是64TB。

前者为实地址,虚拟存储空间为外部存储管理器。

第三章
学习指导:
1.掌握寻址方式
立即寻址:MOV AL,89H;
寄存器寻址:MOV AL,BL;
直接寻址:MOV AX,[2000H];MOV AX,ARAE
寄存器间接寻址:MOV AX,[BX]([BP]、[SI]、[DI])
相对寄存器间接寻址:ADD 10H[SI],AL
基址加变址寻址;ADD [BX][DI],AX
相对基址加变址寻址;ADD 100H[BX][DI],AX
2.掌握指令:传送类指令、算术运算指令、逻辑运算和移位指令、条件转移类
4、指出下列指令中的源操作数和目标操作数的寻址方式。

(1)MOV BX,1000H 源操作数:立即寻址;目标操作数:寄存器寻址
(2)MOV AL,[BX] 源操作数:寄存器间接寻址;目标操作数:寄存器寻址
(5)MOV [DI+1000H],BX 源操作数:寄存器寻址;目标操作数:寄存器相对寻址
(6)MOV [1000H],CX 源操作数:寄存器寻址;目标操作数:直接寻址
5、设(DS)=2000H、(ES)=2100H、(SS)=1500H、(BX)=0100H、(BP)=0040、(SI)=00A0H、
(DI)=0120H,在指令MOV AX,src中,求用下列表示源操作数src的有效地址EA和物理地址PA各是多少?
(1)100H[BX] EA=(100H+0100H)=0200H ;PA=2000*10H+0200H=20200H
(2)ES:[BX+DI] EA=0100H+0120H=0220H ;PA=2100*10H+0220H=21220H
(3)[BP] EA=0040H ;PA=1500*10H+0040H=15040h
(4)ES:[BX+10H] EA=0100H+0010H=0110H ;PA=21000H+0110H=21110H
6、指出下列指令中的错误,并改正。

(1)MOV BL,30A0H 操作数不匹配改:MOV BX,30A0H
(2)MOV 0010H,AL 立即数不可以作为目标操作数改:MOV AX,0010H
(3)XCHG AL,BX 操作数类型不匹配改:XCHG AX,BX
(4)MOV [AX],3456H 立即数送入存储器需要说明改:MOV WORDPTR [AX],3456H (5)PUSH AL 堆栈以字为操作单元改:PUSH AX
(6)POP CS POP不可以用CS为目标操作数改:POP AX
(7)MOV DS,1000H 立即数不能直接送入段寄存器改:MOV AX,1000H
MOV DS,AX (8)MOV [BX],[1000H] 存储器不可以相互传送改:MOV AX,[1000H]
MOV [BX],AX
(9)LDS (BX),[1000H] LDS使用时期目标为16位通用寄存器改:LDS BX,[1000H] (10)LEA BX,CX LEA源操作数为存储器改:LEA BX,[CX]
7、已知(AX)=4A0BH,[1020H]单元中的内容为260FH,写出下列每条指令单独执行后的结果。

(1)MOV AX,1020H ;(AX)=1020H
(2)XCHG AX, [1020H] ;(AX)=260FH
(3)MOV AX,[1020H] ;(AX)=260FH
(4)LEA AX,[1020H] ;(AX)=1020H
10、设一个堆栈段共有100H个字节单元,堆栈的起始地址为1250H:0000H,若在堆栈中存有5个字数据,问:
(1)栈顶的物理地址多少?
(2)栈底的物理地址是多少?
(3)当前SS和SP的内容是多少?
(4)若弹出两个数据,SP的内容是多少?
答:栈底:12600H 栈顶:12600-A=125F6H
SS:[1250H:0000H ] SP: [1250H:00F6H ]
(4)弹出两个数据后,SP内容,00F6+4=00FAH
则,SP:[1250H:00FAH ]
11、编程完成下列程序段,根据运算结果置标志位OF、SF、ZF、AF、PF、CF,并分析程序执行结果是否正确?为什么?(n=8)
(2)122-64 (4)-68+(-72)
答:(2)程序:MOV AL,120
MOV BL,64
SUB AL,BL
计算结果:00111010 OF=0 SF=0 ZF=0 AF=0 PF=1 CF=0
(4)程序:MOV AL,-68
MOV BL,-72
ADD AL,BL
计算结果:01110100 有溢出OF=1 SF=0 ZF=0 AF=1 PF=1 CF=1
17、判断下列指令格式的对与错,并解释错在哪里。

(1)ADD 25H,AX 错;目标操作数不可以为立即数
(2)INC BX,1 错;INC只有目标操作数
(3)MUL AL,BL 错;乘法指令目标操作数是隐含的
(4)SUBB AL,3 错;减法指令是SUB
(5)DAA AL 错;DAA后无操作数
(6)NEG CX,0 错;NEG后只有目标操作数
(7)CMP [BX],1000H[BX+SI] 对
22、写出下列程序段执行后的结果。

MOV CL,4
MOV AL,87
MOV DL,AL
AND AL,0FH
OR AL,30H
SHR DL,CL
OR DL,30H
(AL)= 37H ,(DL)=35H
27、试用CMP指令和条件转移指令实现下列判断
(1)AX和CX中的内容为无符号数:
若(AX)>(CX)则转至BIGGER符号执行;若(AX)<(CX)则转至LESS符号执行。

(2)BX和DX中的内容为无符号数:
若(BX)>(DX)则转至BIGGER符号执行;若(BX)<(DX)则转至LESS符号执行。

答:(1)CMP AX,CX
JA BIGGER
JB LESS
(2)CMP BX,DX
JG BIGGER
JL LESS
第四章
学习指导:
伪指令:数据定义伪指令DB、DW、DUP、程序框架、简单程序设计(找数—某一个位置数、最大数、最小数、绝对值。

变换的数(一个数变换16进制数、变换为十进制数)显示(一个数、一串数)统计等
8、按下列的要求写出段定义格式。

(1)数据段的位置从0E000H开始,在该段中定义的5个字节数据,3个字数据,2双字数据,要求字节数据从偏移地址0000H开始,字数据从偏移地址0010H开始,双字数据从偏移地址0020H开始。

(2)堆栈段定义100个字节
(3)代码段的开始位置给有关段寄存器赋值,在程序结束时能够返回DOS。

答:DATA SEGMENT
ORG 0000H
D1 DB 00H,01H,02H,03H,04H
ORG 0010H
D2 DW 0000H,0010H,0020H
ORG 0020H
D3 DD 3 DUP()
DATA ENDS
STACK SEGMENT STACk
DB 100 DUP
STACK ENDS
CODE SEGMENT CODE
ASSUME CS:CODE,DS:DATA
START :……
CODE ENDS
ENDS START
10、定义数据段,画出数据存储示意图,并说明该数据段共有多少个字节单元。

DATA SEGMENT
D1 DB 12,0,’A’,-6
D2 DW 1234H,65H
D3 DB 3 DUP(3,0,5)
DATA ENDS
共有17个存储单元如下图:
12、定义数据段如下,画出数据存储示意图,并说明变量X1和X2所对应的
逻辑地址各是多少?
DATA SEGMENT AT 10A0H
ORG 0010H
X1 DB 22,33,
ORG $ + 0020H
X2 DB ‘AB12CD’
DATA ENDS
10A00H
10A10H
10A32H
X1逻辑地址:10A0H:0010H X2的逻辑地址:10A0H:0032H 13、定义数据段如下,写出执行以下指令后的结果。

DATA SEGMENT
DA1 DW 2437H ,14A2H
DA2 DB ‘ABCD’
DA3 DD 10 DUP (?)
DATA ENDS
(1)MOV BX,DA1 ;(BX)=2437H
(2)MOV SI,OFFSET DA1 ;(SI)=0000H
(3)MOV AL,TYPE DA1 ;(AL)=2
(4)MOV AL,[DA2+02H] ;(AL)=‘C’=43H
(5)MOV AL,LENGTH DA3;(AL)=10
(6)MOV AL,SIZE DA3;(AL)=10
14、程序中数据段定义的数据如下:
DATA SEGMENT
NAMES DB‘GOOD MORNING!’
DW 2050H,78H,3080H
DATA ENDS
请指出下列指令序列执行后累加器中的结果是多少?
(1)MOV BX,OFFSET NAMES
MOV AL,[BX+03H]
(2)MOV BX,12
MOV SI,3
MOV AX,NAMES[BX+SI]
(3)MOV BX,12
MOV SI,3
LEA AX,NAMES[BX+SI]
答:(1)[BX+03H]对应的是“D”因此结果是44H
(2)78H
(3)LEA 将源操作数的逻辑地址送到目标操作数,因此0FH
18、编写程序,将MBUF为起始单元的5个数按相反次序传送到NBUF开始的存储单元中。

答:DATA SEGMENT
MBUF DB 1,2,3,4,5
COUNT EQU $-MBUF
NBUF DB 5 DUP(?)
DATA ENDS
STACK SEGMENT PARA STACK
DB 20H DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET MBUF
MOV CX,5
LOP1: PUSH [BX]
INC BX
DEC CX
JNZ LOP1
MOV BX,OFFSET NBUF
MOV CX,5
LOP2:POP [BX]
INC BX
DEC CX
JNZ LOP2
MOV AX,4CH
INT 21H
CODE ENDS
END START
20、编写程序,将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数(数据自定)。

答:
DATA SEGMENT
SHU DB 2,4,-9,-10,5,-2,-2,4,5,7;源数据块,共有十个数,六个正数,四个负数
COUNT EQU $-SHU
ZS DB 10 DUP(?);给正数预留10个字节的空间
ORG 0020H ;调整数据位置
FS DB 10 DUP(?)
XZ DB 'NUMBER OF XZ:','$' ;显示在屏幕上的字符串
XF DB 'NUMBER OF XF:','$'
DATA ENDS
STACK SEGMENT STACK
DW 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX ;数据段装入
MOV BX,OFFSET SHU
MOV DI,OFFSET ZS
MOV SI,OFFSET FS
MOV CX,COUNT
LOP1: MOV AL,[BX]
CMP AL,0
JG SZ ;大于0跳转到SZ中
MOV [SI],AL
INC SI ;负数送到缓冲区FS中
JMP C1
SZ: MOV [DI],AL ;正数送到缓冲区ZS中
INC DI
C1: INC BX
DEC CX
JZ SHUCHU ;ZF标志位为1,cx为0 ,跳到SHUCHU执行JMP LOP1 ;cx不为0,循环
SHUCHU: MOV DX,OFFSET XZ
MOV AH,09H
INT 21H ;输出字符串
SUB DI,OFFSET ZS ;正数的个数
ADD DI,30H
MOV DX,DI
MOV AH,02H
INT 21H ;转为ASCII码输出
MOV DX,OFFSET XF
MOV AH,09H
INT 21H
SUB SI,OFFSET FS ;负数的个数
ADD SI,30H
MOV DX,SI
MOV AH,02H
INT 21H ;转为ASCII码输出
MOV AH,4CH
INT 21H ;返回DOS CODE ENDS
END START
21、编写程序,从内存BLOCK开始,存放着10个字节的有符号数,从这些数种找出绝对值最大的数,存在MAX中。

DATA SEGMENT
BLOCK DB 2,8,9,18,-14,-12,5,12;源数据共有8个数,绝对值最大数为18
COUNT EQU $-BLOCK ;数据长度
ORG 0020H
MAX DB ? ;最大数据
DATA ENDS
STACK SEGMENT STACK
DB 100 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA,SS:STACK
START:
MOV AX, DATA
MOV DS, AX ;装入数据段基址
MOV AL, 0H ;初始AX
LEA BX, BLOCK
MOV CX, COUNT
LOP1:
MOV DL, [BX]
CALL CP ;调用比较子程序
INC BX ;递推
DEC CX
JNZ LOP1 ;循环
LEA BX, MAX ;取最大值存储区地址
MOV [BX], AL ;移入最大值
MOV AH, 4CH
INT 21H ;返回DOS
CP PROC ;比较AL和DL,将较大的数存入AL.入口参数: AL, DL出口参数: AL
CMP DL, 0
JG POSITIVE ;DL为正数
NEG DL ;求相反数
POSITIVE:
CMP AL, DL ;比较AL和[BX]中的大小
JG EXIT ;AL大于DL则跳转
MOV AL, DL ;将DL移入AL
EXIT:
RET ;退出
CP ENDP
CODE ENDS
END START
第五章
学习指导:掌握存储器扩展1KB=1024个字节,128KB等
5-7 若用1024*1b的RAM芯片组成16K*8b的存储器,,需要多少芯片?在地址线中有多少位参与片内寻址?多少位用做芯片组选择信号?
解:
先进行位扩展,一组芯片需要8片
再进行字扩展,需要16组芯片.
所以共需要16*8=128片
1024=1K,需要10位参与片内寻址
16=24,需要4位做选择信号.
5-8 试用4K*8b的EPROM2732和8K*8b的SRAM6264,以及74LS138译码器,构成一个8KB的ROM,32KB的RAM存储系统,要求设计存储器扩展电路,并指出每片存储芯片的地址范围.
解:
5-9 用EPROM2764(8K*8b)和SRAM6264(8k*8b)各一片组成存储器,其地址范围为FC000~FFFFFH,试画出存储器与CPU的连接图和片选信号译码电路(CPU 地址线20位,数据线8位)。

1111 1100 0000 0000 0000
1111 1101 1111 1111 1111
1111 1110 0000 0000 0000
1111 1111 1111 1111 1111
5-10 现有存储芯片:2K*1b的ROM和4K*1bde RAM,若用它们组成容量为16KB的存储器,前4KB为ROM,后12KB为RAM,问各种存储芯片分别用多少片?
解:
4KB=4K*8b 需要2*8=16片
12KB=12K*8b 需要3*8=24片
第六章
学习指导:
1.掌握8259初始化编程
2.了解内部结构工作原理
3.掌握IRR、IMR、ISR、PR
4.掌握ICW2、OCW1、OCW2含义
5.了解中断处理过程
6.掌握中断向量表相关含义
6-3 CPU响应中断时的处理过程是什么?在各个处理环节主要完成哪些操作?
解:中断处理过程通常由中断请求、中断响应、中断处理和中断返回四个环节完成。

(1)中断请求:中断源需要进行中断服务时,由硬件产生一个中断信号INTR发给CPU且保持到CPU响应。

(2)中断响应:CPU在当前指令执行结束后采样查询INTR,若中断请求信号有效且允许响
应INTR中断(IF=1),则向请求设备送回低电平有效的中断响应信号INTR,自此系统自动进入中断响应周期,并由硬件自动完成内容入栈,清除TF和IF标志、断点(中断返回之后将要执行的指令地址)入栈,取中断服务程序的入口地址等一系列操作,继而转去执行中断服务程序。

(3)中断处理:执行中断的主体部分。

不同的中断请求源,其中断处理的内容是不同的。

需要根据中断请求源所要完成的功能,编写相应的中断服务程序存入内存。

等待中断响应后调用执行。

(4)中断返回:又中断服务程序中的中断返回指令IRET完成。

执行该指令时,将压入对战的断点和标志位弹出,使CPU转向被中断的现行程序中继续执行。

6-10 中断向量表用来存放什么内容?它占用多大的存储空间?存放在内存的哪个区域?可以用什么方法写入或者读取中断向量表的内容?
答:中断向量表用来存放中断服务程序的偏移地址和段基址。

占用1KB内存。

最低端的1KB RAM区,地址范围是000H~3FFH。

写入方法:1、用传送指令直接装入。

2、DOS功能调用:INT 21H
(AH)=25H
(AL)=中断类型号
(DS:DX)=中断服务程序的入口地址
读出方法:1、用传送指令直接读。

2、DOS功能调用:INT 21H
(AH)=35H
(AL)=中断类型号
出口参数:(ES:BX)=中断服务程序的入口地址
6-19 某系统使用两片8259A管理中断,从片的INT连接到主片的IR2请求输入端。

设主片工作于边沿触发、特殊完全嵌套、非自动结束和非缓冲方式,中断类型号为70H,端口地址为80H和81H;从片工作与边沿触发、完全嵌套、非自动结束和非缓冲方式,中断类型号为40H,端口地址为20H和21H。

要求:
(1)画出主、从片级联图
(2)编写主、从片初始化程序
解:
电路图参见教材P179图6-21,主片CS由A19-A1=0000 0000 0000 1000 000和M/IO给出低
电平,从片CS由A19-A1=0000 0000 0000 0010 000和M/IO给出低电平。

主片8259A
MOV AL,11H(00010001B)
OUT 80H, AL ;定义ICW1
MOV AL, 70H(01110000B)
OUT 81H, AL ;定义ICW2
MOV AL, 04H(00000100B)
OUT 81H, AL ;定义ICW3
MOV AL, 11H(00010001B)
OUT 81H, AL ;定义ICW4
MOV AL, FBH(11111011B)
OUT 81H, AL ;定义OCW1
(开放从片IR2的请求)
IN AL, 81H
AND AL, 11111011
OUT 81H, AL
从片8259A
MOV AL,11H(00010001B)
OUT 20H, AL ;定义ICW1
MOV AL, 40H(01000000B)
OUT 21H, AL ;定义ICW2
MOV AL, 02H(00000010B)
OUT 21H, AL ;定义ICW3
MOV AL, 01H(00000001B)
OUT 21H, AL ;定义ICW4
6-20 某系统由8259A的IR2引入外设中断请求(跳变信号有效),要求当CPU响应IR2请求时,输出显示字符串“****”,并中断10次退出,试编写主程序和中断服务程序。

解:
设8259A的I/O地址为20H,21H,中断类型号0AH,从IR2引入
DATA SEGMENT
MESS DB '*****',OAH,ODH,'$'
INTA00 EQU 0020H
INTA01 EQU 0021H
DATA ENDS
STACK SEGMENT STACK
DB 100H DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN:MOV AX,DATA
MOV DS,AX
MOV DX,INTA00 ;8259A初始化
MOV AL,13H ;写ICW1
OUT DX,AL
MOV DX,INTA01
MOV AL,08H ;写ICW2
OUT DX,AL
MOV AL,01H ;写ICW4
OUT DX,AL
PUSH DS
MOV AX,SEG INT-P ;设置中断矢量
MOV DS,AX
MOV DX,OFFSET INT-P
MOV AL,0AH
MOV AH,25H
INT 21H
POP DS
MOV AL,0FBH ;写中断屏蔽字OCW1
OUT DX,AL
MOV DX,INTA00
MOV AL,20H ;写中断结束方式OCW2
OUT DX,AL
MOV BX,10
WAIT1: STI ;开中断
JMP WAIT1 ;等待中断
INT-P:MOV AX,DATA ;中断服务程序入口
MOV DS,AX
MOV DX,OFFSET MESS ;输出指定字符串
MOV AH,09H
INT 21H
MOV DX,INTA00 ;写OCW2,送中断结束命令EOI
MOV AL,20H
OUT DX,AL
DEC BX ;控制10次循环
JNZ NEXT
MOV DX,INTA01 ;读屏蔽寄存器IMR
IN AL,DX
OR AL,04H ;屏蔽IR2请求
OUT DX,AL
STI ;开中断
MOV AX,4C00H ;返回操作系统
INT 21H
NEXT:IRET ;中断返回
CODE:ENDS
END MAIN
第七章
学习指导:
1.掌握8255、8254、8250初始化编程
2.掌握芯片工作方式
3.掌握8255端口A,B,C作为输入和输出口的程序应用
4.掌握8254计算和定时器的程序应用
5.8250查询发送和接收程序
6.掌握DAC0832在输出口输出几种方式、ADC0809在输入口输入方式的应用
7.一些接口基本原理
3、CPU与IO接口设备数据传送的控制方式有哪几种?它们各有何特点?
答:(1)查询方式:不需要额外的硬件支持,但由于CPU与外设工作的不同步,致使CPU 利用率低,适用于工作不太繁忙的系统中。

(2)中断方式:CPU与外部设备并行工作
(3)DMA方式:数据传送过程中,由DMA控制器参与工作,不需要CPU的干预,对批量数据传送效率高。

6、设8255A的A口工作于方式1输出,B口工作于方式0输入,试编写初始化程序(设端口地址为40H~43H)
答:MOV DX ,43H
MOV AL ,10100010
OUT DX,AL
7.使用8255A作为开关和LED指示灯电路的接口.要求8255A的A口连接8个开关,B口连接8个LED指示灯,将A口的开关状态读入,然后送至B口控制指示灯亮、灭。

试画出接口电路设计图,并编写程序实现。

程序实现:
设8255的地址:0FFE0H~0FFE3H
DATA SEGMENT
DB 100H DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL,10010000 ; A口方式0输入B口方式0输出
MOV DX,0FFE3H
OUT DX,AL
MOV DX, 0FFE0H
IN AL,DX ;读取A口开关状态
INC DX
NOT AL
OUT DX,AL ;输出B口驱动LED,开关闭合则LED亮
RET
CODE ENDS
END START
10、利用8254的通道1,产生500Hz的方波信号。

设输入时钟频率CKL1=2.5MHz,端口地
址为FFA0H~FFA3H,试编写初始化程序。

答:端口地址:FFA0H-FFA3H
计数器1的控制字:01110110B=76H 计数常数=2.5M/500=5000
初始化程序:
MOV AL,76H
MOV DX,0FFA3H
OUT DX,AL
MOV AX,5000
MOV DX,0FFA1H
OUT DX,AL ;写入计数器1的低字节
MOV AL,AH
OUT DX,AL ;写入计数器1的高字节
11、某系统使用8254的通道0作为计数器,记满1000,向CPU发中断请求,试编写初始化程序(端口地址自设)。

答:设8254端口地址:40H-43H
计数器0的控制字:00110000B=30H 计数常数=1000
初始化程序:
MOV AL,30H
OUT 43H,AL
MOV AX,1000
OUT 40H,AL ;写入计数器0的低字节
MOV AL,AH
OUT 40H,AL ;写入计数器0的高字节
12、采用8254的通道0产生周期为10ms的方波信号,设输入时钟频率为100kHz,8254的端口地址为38H-3BH,试编写初始化程序。

答:8254端口地址:38H-3BH
计数器0的控制字:00110110B=36H 计数常数=100K*10ms=1000
初始化程序:
MOV AL,36H
OUT 3BH,AL
MOV AX,1000
OUT 38H,AL ;写入计数器0的低字节
MOV AL,AH
OUT 38H,AL ;写入计数器0的高字节
15、什么是波特率?假设异步传输的一帧信息由1为起始位,7位数据位、1为校验位和1位停止位构成,传送的波特率为9600,则每秒钟能传输字符的个数是多少?
答:波特率是指数据传送的速率,含义是指每秒钟传二进制数的位数,单位用bps或波特表示每秒可传送的字符个数。

9600/(1+7+1+1)=960
16、一个异步串行发送器,发送的字符格式为:1位起始位、7位数据位、1位奇偶校验位和2位停止位,若每秒传送100个字符,则其波特率为多少?
答:100*(1+7+1+2)=1100bps
19、设某系统使用一片8250进行串行通信,要求波特率为2400,8位数据位,2位停止位,偶校验,对接收缓冲器满开中断,试编写初始化程序。

答:设8250端口地址:3F8H-3FEH XTAL1=1.8432MHz,BAUD=2400
除数寄存器:1.8432M/(2400*16)=48=30H 3F8H
线路控制寄存器:10011111B=1FH 3FBH
中断允许寄存器:00000001B=01H 3F9H
初始化程序:
MOV DX,3FBH
MOV AL,80H
OUT DX,AL ;置线路控制寄存器DLAB=1
MOV DX,3F8H
MOV AX,30H
OUT DX,AL ;除数寄存器低8位
INC DX
MOV AL,AH
OUT DX,AL ;除数寄存器高8位
MOV DX,3FBH
MOV AL,1FH
OUT DX,AL ;8位数据位2停止位偶校验
MOV DX,3FCH
MOV AL,03H
OUT DX,AL ;MODEM
MOV DX,3F9H
MOV AL,01H
OUT DX,AL ; 中断允许寄存器
21、设计一个应用系统,要求:8255A的A口输入8个开关信息,并通过8250以串行的方式循环,将开关信息发送出去。

已知:8255的端口地址为100H-103H,8250输入的基准时钟频率为1.8432MHz,传输波特率为2400,数据长度为8位,2位停止位,奇校验、屏蔽全部中断,端口地址为108H~10EH,采用查询方式传送。

要求:
(1)设计该系统的硬件连接电路(包括地址译码电路);
(2)编写各芯片的初始化程序
(3)编写完成上述功能的应用程序。

答:(1)
(2)8255初始化程序:
MOV DX,103H
MOV AL,10010000B ;A口输入
MOV DX,AL
8250初始化程序:
8250端口地址:108H-10EH XTAL1=1.8432MHz,BAUD=2400 除数寄存器=1.8432M/(2400*16)=48=30H 108H
线路控制寄存器:00001111B=0FH 10BH
中断允许寄存器:00000000B=00H 109H
初始化程序:
MOV DX,10BH
MOV AL,80H
OUT DX,AL ;置线路控制寄存器DLAB=1
MOV DX,108H
MOV AX,30H
OUT DX,AL ;除数寄存器低8位
MOV DX,109H
MOV AL,AH
OUT DX,AL ;除数寄存器低8位
MOV DX,10BH
MOV AL,0FH
OUT DX,AL ;8位数据位2停止位奇校验
MOV DX,10CH
MOV AL,03H
OUT DX,AL
MOV DX,109H
MOV AL,0
OUT DX,AL ;屏蔽所有中断
(3)
25、采用8237的通道1控制外设与存储器之间的数据,设该芯片的片选CS由地址线A15~A4=031H译码提供。

试编写初始化程序,把外设中1KB的数据传送到内存2000H开始的存储区域,传送完毕停止通道工作。

答:设DREQ1高电平有效,DACK1低电平有效。

采用块传输。

8237地址:0310H-031FH
初始化程序:
MOV DX,031DH
MOV AL,0
OUT DX,AL ;软件复位
MOV DX,0312H
MOV AL,00H
MOV DX,AL
MOV AL,20H
MOV DX,AL ;2000H写入基地址寄存器
MOV DX,0313H
MOV AX,1024
DEC AX
OUT DX,AL
MOV AL,AH
OUT DX,AL ;计数值写入基字节计数器
MOV DX,031BH
MOV AL,85H
OUT DX,AL ;写工作方式字:块传送、地址增1、写传送
MOV DX,031AH
MOV AL,01H
OUT DX,AL ;写屏蔽字:允许通道1请求
MOV DX,0318H
MOV AL,00H
OUT DX,AL ;写命令字:DACK1=1 DREQ1=0 允许8237工作。

相关文档
最新文档