问答题 已知8237A的端口地址是00~0FH,其中基地址和当前地址寄存器的端口地址是50H,基字节数和当前字节数寄存器的端口地址是51H,模式控制器的端口地址是5BH,屏蔽寄存器的端口地址是5AH,命令寄存器的端口地址是58H,主清除命令的端口地址是5DH。现要求利用该DMA的通道1从外部设备将54KB(即D800H)的数据块传送到5678H开始的存储区中(增量传送),采用块传送方式,传送完不自动初始化,外设的DREQ和DACK都是高电平有效。
【正确答案】初始化程序如下:
   OUT  5DH,  AL    ;主清除命令
   MOV  AL,   78H    ;基地址和当前地址的低8位
   OUT  50H,  AL
   MOV  AL,   56H    ;基地址和当前地址的高8位
   UT  50H,  AL
   MOV  AL,   00H    ;基字节数和当前字节数低8位(54K=0D800H)
   OUT  51H,  AL
   MOV  AL,   0D8H  ;基字节数和当前字节数高8位
   OUT  51H,  AL
   MOV  AL,   85H    ;模式控制字(块传送,增量方式,非自动,写通道1.
   OUT  5BH,  AL
   MOV  AL,   01H    ;屏蔽控制字,使通道1的屏蔽位复位(不屏蔽)
   MOV  AL,   0AOH  ;命令字(DREQ和DACK高电平有效,正常时序,固态;优先级)
   OUT  58H,  AL
   上面的初始化程序执行后,DMA控制器8237A将自动把外部设备的54KB数据块传送到5678H~12E77H的内存区域中。关于命令/状态字的格式说明,请参考DMA的有关资料。
   注意:8237A的编程中需要各个寄存器端口地址的低4位是固定的。
【答案解析】