《现代微机原理与接口技术》部分习题答案第1章5. 在8088/8086中,逻辑地址FFFF∶0001, 00A2∶37F 和B800∶173F的物理地址分别是多少?答:物理地址=段地址×10H+偏移地址所以FFFF:0001的物理地址是FFFFH×10H+0001H=FFFF1H00A2:37F的物理地址是00A2×10H+037FH=00D9FH B800:173F的物理地址是B800×10H+173F=B973FH6. 在8088/8086中,从物理地址388H开始顺序存放下列三个双字节的数据,651AH, D761H和007BH,请问物理地址388H, 389H, 38AH, 38BH, 38CH和38DH 6个单元中分别是什么数据?答:13. PC/XT机中的各种系统支持芯片的功能在815EP为处理器支持核心的PC机中分别由什么部件完成?答:对照PC/XT的基本结构图和815EP芯片组,我们可以看到:数学协处理器已经集成到了奔腾级的CPU中,8237DMA控制器、8253定时/计数器、8259中断控制器等都被集成到了82801BA芯片中。
串口、并口、键盘、鼠标等功能集成到SIO LPC48B27X芯片中。
第2章6. 请简述I/O保护的实现原理。
答:首先要明确一点,在DOS环境(实地址模式)下,I/O是没有保护的,只有在保护模式下才有I/O的保护功能。
I/O保护有两种机构:I/O特权级IOPL(I/O Privilege Level)和I/O允许位映像(I/O Permission Bit Map)。
EFLAG 标志寄存器中IOPL字段定义使用I/O相关指令的权限;任务状态段TSS(Task State Segment)的I/O允许位映像用来修正IOPL对I/O敏感指令的影响,允许较低特权级的程序或任务访问某些I/O端口。
在保护方式下,当处理器遇到一条I/O指令(IN, INS, OUT和OUTS)时,它首先检查CPL<IOPL是否成立,其中CPL是当前任务的特权级。
若成立,则可以处理I/O操作;若不成立,则处理器检查I/O允许映像。
在虚拟8086方式下,处理器只查看这个映像而不考虑IOPL。
I/O允许位映像是一个位向量,每一位都表示一个端口地址,每个字节都可以表示8个端口。
若任何一个被测试的位置位,则处理器发出一般保护异常信号;若所有被测试位都是0,则I/O 操作可以继续进行。
7. 设计一个外设端口译码器,使CPU能寻址四个地址范围:①0280~0287H,②0288~028FH,③0290~0297H,④0298~029FH。
答:本题可以用一个2-4译码器,考虑到大家对74LS138比较熟悉,所以我们用74LS138这个3-8译码器来做这到题。
分析,从四段地址的低位来看,显然地址的低3位作为地址低位,不参与到译码电路中,而四段地址范围为1010000XXX~1010001XXX~1010010XXX~1010011XXX,显然我们可以将A4A3作为74LS138的B、A 输入,这样得到的电路是:8. 已知PC机系统中某接口板的板地址译码电路如图2.8所示。
现希望该板的地址范围为0240~0247H,请确定DIP开关各位的状态(打开或闭合)。
图2.8 习题8答:应该关闭的开关有Q0、Q1、Q2、Q4、Q59. 以查询输出方式编程,从内存中首地址为BUFFER的缓冲区向CRT终端输出128个字节,CRT终端数据口地址为0008H,状态口地址为0020H,D7为状态位,0表示输出缓存空闲。
……MOV SI, OFFSET BUFFERMOV CX, 128WAIT: IN AL, 20HTEST AL, 80HJNZ WAIT ;输出缓冲不空MOV AL, [SI]OUT 08H, ALDEC CXJNZ WAIT ……第6章3. 如果8254-2某计数器的计数初值为400H,信号频率为10MHz,求时间片(微秒)。
答:所谓时间片是指输出脉冲的周期,由题可知,f OUT=f CLK÷计数初值=10M/1K=10K。
时间片(周期)=1/f OUT =97.656微秒。
4. 用8254作为某数据采集系统的定时器,每隔10ms用中断方式采集一次数据,已知输入时钟频率为10kHz,8259端口地址为20~21H,中断类型号为13H,8254端口地址为40~43H,请为8259和8254编制初始化程序。
分析:8254的中断请求的中断类型号为13H,则显然在8259的ICW2的值为10H(中断类型号的高5位),而中断引脚显然用的是IR3。
8254的输入时钟频率为10kHz,需要输出10ms周期(频率100)的方波,作为中断请求信号,可以考虑用方式3,初始值为10K/100=100。
答:;对8259初始化:MOV AL, 00010011B ; 边沿触发,单片使用,要ICW4 OUT 20H, AL ; ICW1JMP SHORT $+2MOV AL, 10H ;中断类型号高位OUT 21H, AL ; ICW2JMP SHORT $+2MOV AL, 00000001B ;非总线缓冲方式,全嵌套,正常的中断结束OUT 21H, AL ; ICW4JMP SHORT $+2;对8254的初始化MOV AL, 00010110B ;计数器0方式3,低8位二进制计数OUT 43H, ALJMP SHORT $+2MOV AL, 100 ;计数初始值OUT 40H, ALJMP SHORT $+27. 某系统中8254芯片的通道0~通道2和控制字端口号分别为FFF0H~FFF3H,定义通道0工作在方式2,CLK0=5MHz,要求输出OUT0=1kHz方波;定义通道l工作在方式4,用OUT0作计数脉冲,计数值为1000,计数器计到0向CPU发中断请求,CPU响应这一中断后继续写入计数值1000,重新开始计数,保持每1秒钟向CPU发出一次中断请求。
请画出硬件连接图,并编写初始化程序。
8254初始化程序如下:MOV AL, 00110100B MOV DX, FFF3H OUT DX, ALMOV AL, 01111000B OUT DX, ALMOV AX, 5000MOV DX, FFF0H OUT DX, ALMOV AL, AHOUT DX, ALINC DXMOV AX, 1000OUT DX, ALMOV AL, AHOUT DX, AL电路图如下:9. 试编写一程序,使PC/AT系统板上的发声电路发出200Hz至900Hz频率连续变化的报警声。
分析:PC/AT机是使用8254的计数器2输入工作时钟频率1.1931816MHz,工作在方式3,产生一定频率的方波来驱动喇叭发声的(当然,8255PB口D1位要置1,这个我们假设都是打开的),题目要求的发声频率从200Hz到900Hz,按照书上185上的公式:初始值=输入时钟频率/输出频率,初始值范围为5966~1326,可以编程,初始值给5966,然后每隔一定延迟(如20ms)将初始值减1,直到1326为止。
答:MOV AL, 10110110BOUT 43H, ALMOV AX, 5966P1: PUSH AXOUT 42H, ALMOV AL, AHOUT 42H, ALCALL WAIT20ms ; 延迟20秒POP AXDEC AXCMP AX, 1325JNZ P110. 在8086系统中,用8254构成一个定时、计数与脉冲发生器系统。
利用通道0完成对外部事件计数功能,计满100次向CPU发中断请求;利用通道1产生频率为1kHz的方波;利用通道2产生1秒标准时钟。
8254的计数频率为2.5MHz,8254的端口地址为41H~47H,试完成硬件连接和初始化编程。
分析:8254从CLK0输入时钟频率为2.5MHz,通道0计数100次后输出的中断频率是250KHz,因为是做中断源,所以通道0最好工作在方式3,另外OUT0输出的这个脉冲还要作为通道1的输入时钟,从CLK1中输入,利用通道1计数250次(方式3)获得从OUT1输出的1KHz的方波,该输出同时作为通道2的时钟输入,通道2工作在方式3下,对CLK2中输入的1KHz时钟计数1000次(既进行1000分频),输出1秒的标准时钟(频率1Hz)。
再来看8254的译码问题,题目中端口地址为41H~47H,74LS138 8254显然通道0、1、2和控制字的地址分别为41H、43H、45H 和47H,也就是说A0这根地址线始终为1,根据这些分析,我们得到如下电路。
初始化8254程序:MOV AL, 00010110BOUT 47H, ALMOV AL, 01010110BMOV 47H, ALMOV AL, 10110110BMOV 47H, ALMOV AL, 100OUT 41H, AL MOV AL, 250 OUT 43H, AL MOV AX, 1000 OUT 45H, AL MOV AL, AH OUT 45H, AL第7章6. 试使用8255实现对74LS138的检测。
分析:本题是要用8255芯片来检测一个74LS138芯片的输入输出是否满足真值表。
可以采用8255的PA口的PA0PA1PA2作为74LS138的ABC三个输入,将74LS138的Y0~Y78个输出接到8255的PB口,PB口作为输入口来获取这些信息,C口作为按位输出口输出到74LS138的控制信号(使能信号)。
然后按下图的真值表来进行验证。
答:假设8255A的端口地址为60H~63H。
检测程序如下:MOV AL, 10000010B ; A口为输出,B口为输入,OUT 63H, AL ; C口上下半全输出,全为方式0MOV AL, 0OUT 60H, ALMOV AL, 00000000B ;将PC0(G1)清0,不使能138OUT 62H, ALIN AL, 61HCMP AL, FFHJZ TEST1JMP ERRORTEST1: MOV AL, 00000011B ;将PC1 (G2A)置1,不使能138OUT 62H, ALIN AL, 61HCMP AL, FFHJZ TEST2JMP ERRORTEST2: MOV AL, 00000101B ;将PC2 (G2B)置1,不使能138OUT 62H, ALIN AL, 61HCMP AL, FFHJZ TEST3JMP ERRORTEST3: MOV AL, 00000001B ;使能138OUT 62H, ALMOV CX, 7 ; 从CBA为111检测到CBA为000,MOV BX,FF7FH ; 所以第一个输出0的是Y7。