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