第五、六章习题解答5.18086CPU对其I/O端口的寻址采用哪种方式?它的输入指令:INAL,PORT;INAL,DX;INAX,PORT;INAX,DX的作用有何区别?5.1答:8086CPU对I/O端口的寻址采用的是I/O端口单独寻址方式,它安排有专门的输入/输出指令即IN、OUT指令。4条输入指令的区别是:•INAL,PORT:直接寻址端口地址和输入的数据均为8位,即:(PORT)→AL•INAL,DX:间接寻址端口地址为16位,输入的数据为8位,即:(DX)→AL•INAX,PORT:直接寻址端口地址为8位,输入的数据为16位,即:(PORT)→AL,(PORT+1)→AH•INAX,DX:间接寻址端口地址和输入的数据均为16位,即:(DX)→AL,(DX+1)→AH5.4在查询方式、中断方式以及DMA方式中,有一个共性的问题是:系统如何知道接口部件已准备好,可以进行I/O数据传送?试简述之。答:①在查询方式中,通过程序检测接口电路中状态寄存器的“准备好”(Ready)位,以确定当前可否进行数据传输;②在中断方式下,当外设已准备好时,接口电路会向CPU发一个中断请求,CPU响应后,便通过运行中断服务程序来实现数据输入/输出;③在DMA方式中,外设要求传输数据时,接口电路会向DMA控制器发出DMA请求信号,导致DMA传输数据。5.5某输入设备的接口电路中,其数据端口地址为3F8H;状态端口地址为3FEH,当其D7位为1时,表示输入数据已准备好。试编写查询方式数据传送的程序段,要求从该设备读入100个字节,并存入到自2000H:2000H开始的内存单元之中。解:MOVAX,2000HMOVDS,AX;设置数据段基址为2000HMOVBX,2000HMOVCX,64H;计数器初值为100NEXT:MOVDX,3FEH;状态端口地址WAIT:INAL,DX;读入状态TESTAL,80H;设备准备好?JZWAIT;否,转回继续查询状态MOVDX,3F8H;数据端口INAL,DX;输入数据MOV[BX],AL;存入缓冲区INCBX;指向下一单元LOOPNEXT;循环控制共输入100个字节…5.6设计一个采用74LS138的I/O端口的地址译码器,要求能寻址的端口地址范围分别是:①340H~347H;②348H~34FH;③350H~357H;④378H~37FH。答:由题目要求,该译码器使用CPU的十根地址总线A9~A0,其中:A9~A3与一起用于对74LS138的输入;A2~A0用于各接口芯片的片内I/O端口的寻址。M/ABC74LS138A3A4A5A6&A9A8A7340H~347H348H~34FH350H~357H378H~37FH1GAG2BG20I0Y1Y2Y7Y5.128259A只占用2个I/O端口地址(奇、偶地址),对其编程时将如何区别7个可编程的寄存器:ICW1~ICW4、OCW1~OCW3?答:⑴7个可编程的寄存器中占用偶地址的有ICW1、OCW2、OCW3,它们之间的互相区分则采用写入的控制字中不同的特征位的方式来进行。其中:•ICW1的D4位必须为1;•OCW2的D4D3位必须为00;•OCW3的D4D3位必须为01。⑵占用奇地址的有ICW2、ICW3、ICW4和OCW1,它们之间的互相区分则采用写入顺序来进行,其中:•ICW2、ICW3、ICW4在8259A初始化编程过程中,必须严格按顺序依次写入;•而OCW1则是在初始化完成后,在8259A的工作过程中写入。5.16某8086系统中有三片8259A安排为非缓冲、级连使用,两从片A、B分别接入主片的IR2、IR4;三片8259A的端口地址分别为20H、22H;30H、32H;40H、42H;主片及从片A、从片B的IR5上各接有一个外部中断源,其中断类型号分别为75H、7DH和85H;所有中断都采用电平触发方式、全嵌套、非自动EOI方式。试完成:①画出该系统中3片8259级连部分电路简要的电气原理图;②编写出全部初始化程序。答:①该系统的电气原理图如下图所示。②各片的初始化程序如下:8259ACAS0从片ACAS1CAS2IR0…IR7INT8259ACAS0从片BCAS1CAS2IR0…IR7INTINTCAS08259ACAS1主片CAS2IR2IR4IR7IR0………Vcc来自CPU的INTA去CPU的INTR…ENSP/ENSP/ENSP/INTAINTAINTA主片的初始化程序:MOVAL,19H;ICW1=0001,1001B,电平触发,多片级连使用,要ICW4OUT20H,AL;写入偶地址MOVAL,75H;ICW2控制字:中断类型号OUT22H,AL;写入奇地址MOVAL,14H;ICW3:IR4、IR2上接有从片OUT22H,ALMOVAL,11H;ICW4=00010001B,特殊全嵌套方式,;非自动中断结束方式,8086系统OUT22H,AL从片A的初始化程序:MOVAL,19H;ICW1控制字:同主片OUT30H,ALMOVAL,7DH;ICW2控制字:中断类型号为OUT32H,ALMOVAL,02H;ICW3控制字:本从片的标识码OUT32H,AL(INT接主片的IR2)MOVAL,01H;ICW4控制字:全嵌套、非缓冲、非自动结束中断,8086系统OUT32H,AL从片B的初始化程序:MOVAL,19H;ICW1控制字:同主片OUT40H,ALMOVAL,85H;ICW2控制字:中断类型号为OUT42H,ALMOVAL,04H;ICW3控制字:本从片的标识码(INT接到主片的IR4)OUT42H,ALMOVAL,01H;ICW4控制字:同从片AOUT42H,AL产生:20H、22H、30H、32H、40H、42H片选信号的译码电路如右图所示。(一)ABC74LS138A4A5A6A7A220H、22H(主片)30H、32H(从片A)40H、42H(从片B)1GAG2BG2I02Y3Y4YM/≥1≥1A3A0产生:20H、22H、30H、32H、40H、42H片选信号的译码电路如右图所示。(二)ABC74LS138A4A5A6A7A020H~2EH(主片)30H~3EH(从片A)40H~4EH(从片B)1GAG2BG2I02Y3Y4YM/6.4设8253计数器0~2和控制字寄存器的端口地址依次为F8H~FBH,说明如下程序的作用。MOVAL,33H;00110011,计0,16位,方1,BCDOUT0FBH,AL;写入方式控制字到控制寄存器MOVAL,80H;OUT0F8H,AL;MOVAL,50H;OUT0F8H,AL;•程序的作用是:对8253芯片的计数器0初始化为:工作方式1、BCD码计数、十六位计数器,计数器的初始值为5080。6.5设8253的4个端口地址分别为300H、302H、304H和306H,由CLK0输入计数脉冲频率为2MHz。要求通道0输出1.5kHz的方波,通道1、通道2均用通道0的输出作计数脉冲,通道1输出频率为300Hz的序列负脉冲,通道2每秒钟向CPU发50次中断请求。试编写初始化程序,并画出8253相关引脚的连线图。分析:按要求可知:(1)计数器0用作方波发生器(方式3),其分频系数为:N0=2×106÷(1.5×103)≈1333=0535H(2)计数器1用作分频器(方式2),其分频系数为:N1=1500÷300=5(3)计数器2用作分频器(方式2),其分频系数为:N2=1500÷50=30=1EHMOVDX,306HMOVAL,37H(或36H);通道0,16位初值,方式3,BCD进制计数OUTDX,AL;写入通道0控制字MOVDX,300HMOVAL,35HOUTDX,AL;写入初值1333(或0535H)的低8位入通道0MOVAL,05HOUTDX,AL;写入初值1333(或0535H)的高8位入通道0MOVDX,306HMOVAL,54H(或55H);通道1,8位初值,方式2,二进制计数OUTDX,AL;写入通道1控制字MOVDX,302HMOVAL,05HOUTDX,AL;写入通道1初值05HMOVDX,306HMOVAL,95H(或94H);通道2,8位初值,方式2,;BCD(或二)进制计数OUTDX,AL;写入通道2控制字MOVDX,304HMOVAL,30H(或1EH)OUTDX,AL;