微机原理课后习题参考答案 下载本文

第一章

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工作电压、制造工艺、扩展能力、软件配置。

第二章

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。前者为实地址,虚拟存储空间为外部存储管理器。

第三章

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

第四章

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 SEGMENTSTACk 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个存储单元如下图: 0CH 00H 41H FAH 34H 12H 65H 00H 03H 00H 05H 03H 00H 05H 03H 00H 05H

12、定义数据段如下,画出数据存储示意图,并说明变量X1和X2所对应的逻辑地址各是多少?

DATA SEGMENT AT 10A0H ORG 0010H X1 DB 22,33, ORG $+ 0020H

X2 DB ‘AB12CD’ DATA ENDS

10A00H

. . . 10A10H 16H

21H

10A32H 41H 42H

31H

32H

43H

44H

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 CP PROC 数存入AL.入口参数: AL, DL出口参数: AL CMP DL, 0 JG POSITIVE NEG DL POSITIVE: CMP AL, DL 小 JG EXIT MOV AL, DL EXIT: RET CP ENDP CODE ENDS END START 26、 DATA SEGMENT D1 DB 3,4,2,7,8,12,10 COUNT EQU $-D1 D2 DB 10 DUP(?) DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1

;移入最大值 ;返回DOS ;比较AL和DL,将较大的 ;DL为正数 ;求相反数 ;比较AL和[BX]中的大;AL大于DL则跳转 ;将DL移入AL ;退出

START: MOV AX,DATA

MOV DS,AX ;数据段装入 MOV CX,COUNT DEC CX ;外层循环CX-1次 LOP1: MOV SI,CX LEA BX,D1 LOP2: MOV AL,[BX]

CMP AL,[BX+1] ;比较D1的第一个数与第二个数的大小 JAE LOP3

XCHG AL,[BX+1] ;交换两个数 MOV [BX],AL LOP3: INC BX DEC CX JNZ LOP2 MOV CX,SI DEC CX JNZ LOP1 LIST: MOV AH,4CH

INT 21H ;返回DOS CODE ENDS END START

第五章

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存储系统,要求设计存储器扩展电路,并指出每片存储芯片的地址范围. 解:

芯片1#2#3#4#5#6#型号273227326264626462646264片选译码A15~A13000000001010011100 片内译码A1201A11~A000?0~11?100?0~11?1地址范围0000H~0FFFH1000H~1FFFH2000H~3FFFH4000H~5FFFH6000H~7FFFH8000H~9FFFH

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片

第六章

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

第七章

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口控制指示灯亮、灭。试画出接口电路设计图,并编写程序实现。

VCCR1R2R3R4R5R6R7R8D0-D7U13433323130292827RDWRA0A1RESET53698356D0D1D2D3D4D5D6D7RDWRA0A1RESETCSPA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7PC0PC1PC2PC3PC4PC5PC6PC7825513432140393837181920212223242514151617131211101U3A74063U3B740656740698D4D34D2S1S2S3S4S5S6S7S8VCC2D1U2A2A3A4123ABCY0Y1Y2Y3Y4Y5Y6Y715141312111097U3C456VCCU3D7406E1E2E374LS13811U3E740610D5U3F740612D61U4A74062D73U4B74064D8 程序实现:

设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 MOV AL,AH

;写入计数器0的低字节

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 INC DX MOV AL,AH

;除数寄存器低8位

OUT DX,AL MOV DX,3FBH MOV AL,1FH OUT DX,AL MOV DX,3FCH MOV AL,03H OUT DX,AL MOV DX,3F9H MOV AL,01H

;除数寄存器高8位

;8位数据位 2停止位偶校验

;MODEM

OUT DX,AL ;中断允许寄存器

21、设计一个应用系统,要求:8255A的A口输入8个开关信息,并通过8250以串行的方式循环,将开关信息发送出去。已知:8255的端口地址为100H-103H,8250输入的基准时钟频率为1.8432MHz,传输波特率为2400,数据长度为8位,2位停止位,奇校验、屏蔽全部中断,端口地址为108H~10EH,采用查询方式传送。要求: (1)设计该系统的硬件连接电路(包括地址译码电路); (2)编写各芯片的初始化程序

(3)编写完成上述功能的应用程序。 答:(1)

VCCR1R2R3R4R5R6R7R8D0-D7U13433323130292827RDWRA0A1RESET53698356D0D1D2D3D4D5D6D7RDWRA0A1RESETCSPA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7PC0PC1PC2PC3PC4PC5PC6PC7825543214039383718192021222324251415161713121110S1S2S3S4S5S6S7S88255:100H-103H8250:108H-10EHU312345678A0A1A2U2A3A4A5123ABCY0Y1Y2Y3Y4Y5Y6Y715141312111097VCC12131425351617282726D0D1D2D3D4D5D6D7A0A1A2CS0CS1CS2ADSMRXTAL1XTAL2WD8250SINSOUTBAUDOURCLKRTSCTSDTRDSRRSLDRIOUT1OUT2DISTRDISTRDOSTRDOSTRDDISCSOUTINTRPT1011159323633373839343122211918232430456A8E1E2E374LS138 (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 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 MOV DX,031AH MOV AL,01H OUT DX,AL MOV DX,0318H MOV AL,00H OUT DX,AL

;软件复位

;2000H写入基地址寄存器

;计数值写入基字节计数器

;写工作方式字:块传送、地址增1、写传送

;写屏蔽字:允许通道1请求

;写命令字:DACK1=1 DREQ1=0 允许8237工作