请教一个8237初始化的题目?

lglg930 2009-10-27 09:41:58
8086系统,假设利用8237A通道1在存储器的两个区域BUF1和BUF2之间传送100个数据,采用连续传送方式,传送完毕后不进行自动预置,试写出初始化程序。

这个问题主要是不知道两个内存区域的基地址是在哪里写入的,有点迷糊了
希望能给出程序并附程序注释。

非常感谢!
...全文
727 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lglg930 2009-10-27
  • 打赏
  • 举报
回复
先谢谢两位!
书我都看过了,包括一些例题
但已看过的例题都是从外设到内存的传输,
这里提问的是内存的两个存储单元之间的数据传送
一般情况下要写入内存区域的基地址,但这个题目里有两个内存区域
也就是说有两个内存基地址
所以我就不清楚怎么写这两个基地址了
往哪写的问题
非常感谢!
killbug2004 2009-10-27
  • 打赏
  • 举报
回复
把这个看完基本就会了

比较中断与DMA两种传输方式的特点。
答:中断方式下,外设需与主机传输数据时要请求主给予中断服务,中断当前主程序的执行,自动转向对应的中断处理程序,控制数据的传输,过程始终是在处理器所执行的指令控制之下。
直接存储器访问(DMA)方式下,系统中有一个DMA控制器,它是一个可驱动总线的主控部件。当外设与主存储器之间需要传输数据时,外设向DMA控制器发出DMA请求,DMA控制器向中央处理器发出总线请求,取得总线控制权以后,DMA控制器按照总线时序控制外设与存储器间的数据传输而不是通过指令来控制数据传输,传输速度大大高于中断方式。
DMA控制器应具有那些功能?
答:DMA控制器应有DMA请求输入线,接收I/O设备的DMA请求信号;DMA控制器应有向主机发出总线请求的信号线和接收主机响应的信号线;DMA控制器在取得总线控制权以后应能发出内存地址、I/O读写命令及存储器读写命令控制I/O与存储器间的数据传输过程。
8237A只有8位数据线,为什么能完成16位数据的DMA传送?
答:I/O与存储器间在进行DMA传送过程中,数据是通过系统的数据总线传送的,不经过8237A的数据总线,系统数据总线是具有16位数据的传输能力的。
8237A的地址线为什么是双向的?
答:8237A的A0~A3地址线是双向的,当8237A被主机编程或读状态处于从属状态,A0~A3为输入地址信号,以便主机对其内部寄存器进行寻址访问。当8237A取得总线控制权进行DMA传送时,A0~A3输出低4位地址信号供存储器寻址对应单元用,A0~A3必需是双向的。
说明8237A单字节DMA传送数据的全过程。
答:8237A取得总线控制权以后进行单字节的DMA传送,传送完一个字节以后修改字节计数器和地址寄存器,然后就将总线控制权放弃。若I/O的DMA请求信号DREQ继续有效,8237A再次请求总线使用权进行下一字节的传送。
8237A单字节DMA传送与数据块DMA传送有什么不同?
答:单字节传送方式下,8237A每传送完一个字节数据就释放总线,传送下一字节时再请求总线的控制权。块传送方式下8237A必须把整个数据块传送完才释放总线。
8237A什么时候作为主模块工作,什么时候作为从模块工作?在这两种工作模式下,各控制信号处于什么状态,试作说明。
答:8237A取得总线控制权后,开始进行DMA传送过程,此时8237A作为主模块工作。8237A在被处理器编程或读取工作状态时,处于从模块工作状态。
8237A处于从模块时,若CS#=0、HLDA=0说明它正被编程或读取状态,IOR#与IOW#为输入,A0~A3为输入。8237A处于主模块时,输出地址信号A0~A15 (低8位经A0~A7输出,高8位经DB0~DB7输出)。8237A还要输出IOR#、IOW#、MEMR#、MEMW#、AEN、ADSTB等有效信号供DMA传送过程使用。
说明8237A初始化编程的步骤。
答:(1)写屏蔽字,阻止某通道的DMA请求。(2)写命令字(8号地址),确定信号有效电平、优先级方式、通道工作允许等。(3)写模式字(B号地址),确定某通道传送方式、传送类型、地址寄存器变化方式等。(4)置0先/后触发器。(5)设置地址寄存器、字节数寄存器的初值。(6)清除某通道屏蔽位,允许8237A响应其DMA请求。
8237A选择存储器到存储器的传送模式必须具备那些条件?
答:必须使用8237A内部的暂存器作为数据传送的缓冲器。8237A通道0的地址寄存器存放存储器的源地址、通道1的地址寄存器存放存储器的目的地地址、字节计数器存放传送的字节数,建立通道0的软件DMA请求来启动这一传输过程。
利用8237A的通道2,由一个输入设备输入一个32KB的数据块至内存,内存的首地址为34000H,采用增量、块传送方式,传送完不自动初始化,输入设备的DREQ和DACK都是高电平有效。请编写初始化程序,8237A的首地址用标号DMA表示。
答:设存储器页面寄存器内容已被置为3。8237A初始化程序如下:
MOV AL, 06H ;屏蔽通道2
MOV DX, DMA+0AH ;
OUT DX, AL ;
MOV AL, 80H ;写通道2命令字:DREQ、
MOV DX, DMA+08H ;DACK高电平有效,正常
DUT DX, AL ;时序、固定优先级、允许8237A工作等。
MOV AL, 86H ;写通道2模式字:块传
MOV DX,DMA+0BH ;输、写传输、地址增、
OUT DX, AL ;禁止自动预置等。
MOV DX,DMA+0CH ;置0先/后触发器
OUT DX,AL ;
MOV AL,00H ;设通道2基地址为4000H
MOV DX,DMA+04H ;
OUT DX,AL ;
MOV AL, 40H ;
OUT DX, AL ;
MOV AL, 0FFH ;设通道2基字节数为
MOV DX, DMA+05H ;7FFFH (32767D)
OUT DX, AL ;
MOV AL, 7FH ;
OUT DX, AL ;
MOV AL,02H ;清除通道2屏蔽。
MOV DX, DMA+0AH ;
OUT DX, AL ;
MOV AL, 06H ;通道2发DMA请求
MOV DX,DMA+09H ;
OUT DX,AL ;
BAYNPU 2009-10-27
  • 打赏
  • 举报
回复

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧