实验四DMA传送实验 无82班王一舟981070 实验四DMA传送实验 实验目的 掌握DMA方式的工作原理和8237的编程使用方法 二.实验要求: 1.按照实验指导第61页的实验接线图连接硬件线路 2.对照【例3.6.1】的程序清单键入源程序,经汇编和连接后运行程序 实验电路 四.实验程序 DISP MACRO VAR 宏定义 MOV AH. 09H 将形参中所存的以结尾的字符串显示在屏幕上 MOV DX OFFSET VAR INT 21H ENDM SCANKEY MACRO 宏定义 LOCAL 为标号LL建立唯一的从??0001H到?FFFH的符号 LLL: MOV AH, 01H 等待是否有键按下 JZ LLL 无则继续等待 MOV AH 0 否则读出键值 ENDM DATA SEGMENT
实验四 DMA 传送实验 无 82 班 王一舟 981070 1 实验四 DMA 传送实验 一.实验目的: 掌握 DMA 方式的工作原理和 8237 的编程使用方法。 二.实验要求: 1. 按照实验指导第 61 页的实验接线图连接硬件线路 2. 对照【例 3.6.1】的程序清单键入源程序,经汇编和连接后运行程序 三.实验电路 四.实验程序: DISP MACRO VAR ;宏定义 MOV AH,09H ;将形参中所存的以结尾的字符串显示在屏幕上 MOV DX,OFFSET VAR INT 21H ENDM SCANKEY MACRO ;宏定义 LOCAL LLL ;为标号LLL建立唯一的从??0001H到??FFFFH的符号 LLL: MOV AH,01H ;等待是否有键按下 INT 16H JZ LLL ;无则继续等待 MOV AH,0 ;否则读出键值 INT 16H ENDM DATA SEGMENT
实验四DMA传送实验 无82班王一舟981070 TEXT DB THE QUICK BROWN FOX JUMPS OVER LAZY DOG DB ODH OAH DB THE QUICK BROWN FOX JUMPS OVER LAZY DOG DB THE QUICK BROWN FOX JUMPS OVER LAZY DOG DB ODH,OAH,’$ COUNT EQU S-TEXT TEXT的总长度 BUF DB COUNT DUP(?) MESG DB TO MAKE A DMA REQUEST DB’ THEN STRIKE ANY KEY!’,ODH,OAH,$ DATA ENDS STACK SEGMENT STACK STACK DB 256 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA. SS: STACK BEG: MOV AX. DATA 主程序部分 MoV DS, AX 装入数据段 CALL I8237R DMA通道1读出初始化 DISP MESG 显示操作提示 SCANKEY 等待直到有键按下,读出键值 LASTI: IN AL. 08H 读DMA状态寄存器 传送是否结束 JZ LASTI 否则继续等待传送结束 CALL I8237W DMA通道1写入初始化 DISP MESG 显示操作提示 SCANKEY 等待直到有键按下,读出键值 LAST2: IN AL. O8H 读DMA状态寄存器 AND AL. 02H 传送是否结束 JZ LAST2 否则继续等待传送结束 DISP BUF 显示BUF中DMA读写传送的最后结果 MoV AH. 4CH INT 21H 结束程序并返回DS I8237R PROC DMA通道1读出初始化 OUT OAH. AL 通道1屏蔽触发器置1 MOV AL,01001001B 通道1方式字,单字节写传送 OUT OBH. AL 自动加1变址,不自动预置 OUT OCH. AL 先/后触发器置0 MOV AX, DATA AX为TEXT的段基址 MOV BX OFFSET TEXT BX为TEXT的有效地址 CALL ADDRMOV 计算输出TEXT单元的20位物理地址 RET 2
实验四 DMA 传送实验 无 82 班 王一舟 981070 2 TEXT DB 'THE QUICK BROWN FOX JUMPS OVER LAZY DOG' DB 0DH,0AH DB 'THE QUICK BROWN FOX JUMPS OVER LAZY DOG' DB 0DH,0AH DB 'THE QUICK BROWN FOX JUMPS OVER LAZY DOG' DB 0DH,0AH,'$' COUNT EQU $-TEXT ;TEXT的总长度 BUF DB COUNT DUP(?) MESG DB 'TO MAKE A DMA REQUEST!' DB 'THEN STRIKE ANY KEY!',0DH,0AH,'$' DATA ENDS STACK SEGMENT STACK 'STACK' DB 256 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK BEG: MOV AX,DATA ;主程序部分 MOV DS,AX ;装入数据段 CALL I8237R ;DMA通道1读出初始化 DISP MESG ;显示操作提示 SCANKEY ;等待直到有键按下,读出键值 LAST1: IN AL,08H ;读DMA状态寄存器 AND AL,02H ;传送是否结束 JZ LAST1 ;否则继续等待传送结束 CALL I8237W ;DMA通道1写入初始化 DISP MESG ;显示操作提示 SCANKEY ;等待直到有键按下,读出键值 LAST2: IN AL,08H ;读DMA状态寄存器 AND AL,02H ;传送是否结束 JZ LAST2 ;否则继续等待传送结束 DISP BUF ;显示BUF中DMA读写传送的最后结果 MOV AH,4CH INT 21H ;结束程序并返回DOS I8237R PROC ;DMA通道1读出初始化 MOV AL,05H OUT 0AH,AL ;通道1屏蔽触发器置1 MOV AL,01001001B ;通道1方式字,单字节写传送 OUT 0BH,AL ;自动加1变址,不自动预置 MOV AL,0 OUT 0CH,AL ;先/后触发器置0 MOV AX,DATA ;AX为TEXT的段基址 MOV BX,OFFSET TEXT ;BX为TEXT的有效地址 CALL ADDRMOV ;计算输出TEXT单元的20位物理地址 RET
实验四DMA传送实验 无82班王一舟981070 I8237R ENDP I 8237W PROC DMA通道1写入初始化 MOV AL, O5H OUT OAH 通道1屏蔽触发器置1 MOV AL,01000101B 通道1方式字,单字节写传送 OUT OBH. AL 自动加1变址,不自动预置 MOV AL, O OUT OCH. AL 先/后触发器置0 MOV AX. DATA AX为BUF的段基址 MOV BX OFFSET BUF BX为BUF的有效地址 CALL ADDRMOV 计算并输出BF单元的20位物理地址 I8237W ENDP ADDRMOV PROC 计算并输出某地址 MOV CX, 0004H ;计算用AX:BX表示的物理地址 SAL AX, 1 RCL CH 1 将移位时的溢出计入CH DEC CL JNZ LL ADD AX, BX AX=AX*4+BX JNC NEXTI INC CH NEXTIl: OUT 02H, AL ;低8位存入通道1基本地址寄存器 MOV AL, AH OUT 02H AL 中8位存入通道1基本地址寄存器 MOV AL, CH OUT 83H, AL 高4位存入通道1页面寄存器 MOV AX, COUNT-1 要传送的字节数减1传给基本字节寄存器 OUT 03H, AL OUT 03H. AL MOV AL, 01 OUT OAH. AL ;解除通道1屏蔽 RET ADDRMOV ENDP CODE ENDS END BEG 五.实验分析: 分析DMA时序 1.读过程 按下DMA按键,通过端子向DMA通道1发硬件DMA请求,系统DMA控制器向CPU 发总线请求信号,CP在执行完当前总线周期后向系统DMA控制器发总线响应信号, 随即把总线控制权交给DMA控制器,此时/DACK1有效。然后DMA控制器将通道1的
实验四 DMA 传送实验 无 82 班 王一舟 981070 3 I8237R ENDP I8237W PROC ;DMA通道1写入初始化 MOV AL,05H OUT 0AH,AL ;通道1屏蔽触发器置1 MOV AL,01000101B ;通道1方式字,单字节写传送 OUT 0BH,AL ;自动加1变址,不自动预置 MOV AL,0 OUT 0CH,AL ;先/后触发器置0 MOV AX,DATA ;AX为BUF的段基址 MOV BX,OFFSET BUF ;BX为BUF的有效地址 CALL ADDRMOV ;计算并输出BUF单元的20位物理地址 RET I8237W ENDP ADDRMOV PROC ;计算并输出某地址 MOV CX,0004H ;计算用AX:BX表示的物理地址 LL: SAL AX,1 RCL CH,1 ;将移位时的溢出计入CH DEC CL JNZ LL ADD AX,BX ;AX<=AX*4+BX JNC NEXT11 INC CH NEXT11: OUT 02H,AL ;低8位存入通道1基本地址寄存器 MOV AL,AH OUT 02H,AL ;中8位存入通道1基本地址寄存器 MOV AL,CH OUT 83H,AL ;高4位存入通道1页面寄存器 MOV AX,COUNT-1 ;要传送的字节数减1传给基本字节寄存器 OUT 03H,AL MOV AL,AH OUT 03H,AL MOV AL,01 OUT 0AH,AL ;解除通道1屏蔽 RET ADDRMOV ENDP CODE ENDS END BEG 五. 实验分析: 分析 DMA 时序。 1.读过程 按下 DMA 按键,通过端子向 DMA 通道 1 发硬件 DMA 请求,系统 DMA 控制器向 CPU 发总线请求信号,CPU 在执行完当前总线周期后向系统 DMA 控制器发总线响应信号, 随即把总线控制权交给 DMA 控制器,此时/DACK1 有效。然后 DMA 控制器将通道 1 的
实验四DMA传送实验 无82班王一舟981070 页面地址寄存器及当前地址寄存器中的内容放到地址总线上去,并发出存储器读命 令,读出内存单元中的text内容送往数据总线。由于/DACK1有效,通过J4短路线 选中616和双向总线驱动器74LS245,/IOW有效,通过J3短路线,使6116的/WE 有效,从而把数据总线上的数据通过74LS245写入到6116的0号单元,完成一次 DMA读传送。此时通道1当前地址寄存器自动加1,当前字节寄存器自动减1。另外 通过U38和JS引线向分频器输入一个进位脉冲,使分频器计数一次,Q10°Q0输出 选择616的下一个单元。再反复上述读过程直到当前字节寄存器为FFFH为止,读 过程结束。 2.写过程 按下DMA按键,通过端子向DMA通道1发硬件DMA请求,系统DMA控制器向CPU发 总线请求信号,CPU在执行完当前总线周期后向系统DMA控制器发总线响应信号 随即把总线控制权交给DMA控制器,此时/ACKI有效。然后DMA控制器将通道1的 页面地址寄存器及当前地址寄存器中的内容放到地址总线上去,并发出存储器读命 令,读出内存单元中的text内容送往数据总线。由于/DACK1有效,通过J4短路线 选中616和双向总线驱动器74LS245,/IOR有效,通过J2短路线,使6116的/RD 有效,从而读出6116当前单元的内容,通过74LS245写入到系统数据总线,完成 次DMA写传送。此时通道1当前地址寄存器自动加1,当前字节寄存器自动减1。另 外通过U38和JS引线向分频器输入一个进位脉冲,使分频器计数一次,Q10Q0输 出选择6116的下一个单元。再反复上述读过程直到当前字节寄存器为FFFH为止, 写过程结東。 4.4LS393在本实验中的作用作为一个分频器,在本实验中起到了选定存储器6116 地址的作用。这是通过输入译码后的进位时钟实现的。 5.DMA传送过程及特点 DMA传送方式是在内存与外设之间开辟专用的数据通道,这个数据通道在DMA控 制器的控制下直接进行数据交换而不通过CPU,不用LO指令。这样,数据传送的 速度上限取决于存储器的存储速度。因而DMA方式主要用于速度要求比较高的场 合 六.实验小结 这次实验其实要让我们自己来考虑设计实现的话是非常困难的,好在书上已经给了 我们实验电路和原程序代码,所以我们只要将书上的例子看明白的就可以做了,不过 这样一来,也可能有些人连书上的程序都不看而直接敲入代码运行通过,这样就什么都 没有学到,没有达到实验的效果了 我做这个实验时到了最后一周了,许多实验板已经坏了,有时候即使实验步骤完全 正确由于板子的原因也做不出来。我就被害的够惨的了,插了几次线,还是不出来,最 后到别人的板子上去一试就成了。但我觉得,通过做这个实验,我对DMA的读写时序 有了更深的理解,原来学的时候好多不明白的地方都有的新的认识,比如总线的传送 DACK、IOW的有效和复位等等,是比较清楚的了 我决的做硬件实验其实并不是说要做的快或实验出结果就好,关键在于通过实验使 我们对硬件和软件的原理更加认识深入,在以后的工作学习中能够学以致用,这才真正 达到我们做实验的目的
实验四 DMA 传送实验 无 82 班 王一舟 981070 4 页面地址寄存器及当前地址寄存器中的内容放到地址总线上去,并发出存储器读命 令,读出内存单元中的 text 内容送往数据总线。由于/DACK1 有效,通过 J4 短路线 选中 6116 和双向总线驱动器 74LS245,/IOW 有效,通过 J3 短路线,使 6116 的/WE 有效,从而把数据总线上的数据通过 74LS245 写入到 6116 的 0 号单元,完成一次 DMA 读传送。此时通道 1 当前地址寄存器自动加 1,当前字节寄存器自动减 1。另外 通过 U38 和 JS 引线向分频器输入一个进位脉冲,使分频器计数一次,Q10~Q0 输出 选择 6116 的下一个单元。再反复上述读过程直到当前字节寄存器为 FFFFH 为止,读 过程结束。 2.写过程 按下 DMA 按键,通过端子向 DMA 通道 1 发硬件 DMA 请求,系统 DMA 控制器向 CPU 发 总线请求信号,CPU 在执行完当前总线周期后向系统 DMA 控制器发总线响应信号, 随即把总线控制权交给 DMA 控制器,此时/DACK1 有效。然后 DMA 控制器将通道 1 的 页面地址寄存器及当前地址寄存器中的内容放到地址总线上去,并发出存储器读命 令,读出内存单元中的 text 内容送往数据总线。由于/DACK1 有效,通过 J4 短路线 选中 6116 和双向总线驱动器 74LS245,/IOR 有效,通过 J2 短路线,使 6116 的/RD 有效,从而读出 6116 当前单元的内容,通过 74LS245 写入到系统数据总线,完成一 次 DMA 写传送。此时通道 1 当前地址寄存器自动加 1,当前字节寄存器自动减 1。另 外通过 U38 和 JS 引线向分频器输入一个进位脉冲,使分频器计数一次,Q10~Q0 输 出选择 6116 的下一个单元。再反复上述读过程直到当前字节寄存器为 FFFFH 为止, 写过程结束。 4. 4LS393 在本实验中的作用作为一个分频器,在本实验中起到了选定存储器 6116 地址的作用。这是通过输入译码后的进位时钟实现的。 5.DMA 传送过程及特点 DMA 传送方式是在内存与外设之间开辟专用的数据通道,这个数据通道在 DMA 控 制器的控制下直接进行数据交换而不通过 CPU,不用 I/O 指令。这样,数据传送的 速度上限取决于存储器的存储速度。因而 DMA 方式主要用于速度要求比较高的场 合。 六.实验小结: 这次实验其实要让我们自己来考虑设计实现的话是非常困难的,好在书上已经给了 我们实验电路和原程序代码,所以我们只要将书上的例子看明白的就可以做了,不过, 这样一来,也可能有些人连书上的程序都不看而直接敲入代码运行通过,这样就什么都 没有学到,没有达到实验的效果了。 我做这个实验时到了最后一周了,许多实验板已经坏了,有时候即使实验步骤完全 正确由于板子的原因也做不出来。我就被害的够惨的了,插了几次线,还是不出来,最 后到别人的板子上去一试就成了。但我觉得,通过做这个实验,我对 DMA 的读写时序 有了更深的理解,原来学的时候好多不明白的地方都有的新的认识,比如总线的传送, DACK、IO/W 的有效和复位等等,是比较清楚的了。 我决的做硬件实验其实并不是说要做的快或实验出结果就好,关键在于通过实验使 我们对硬件和软件的原理更加认识深入,在以后的工作学习中能够学以致用,这才真正 达到我们做实验的目的