📄 pcdma.asm
字号:
;FILENAME: PCDMA.ASM
;内容:DMA数据传输
DATA SEGMENT
MESS1 DB 'INPUT SOURCE DMA ADDR' ,0DH,0AH,'$'
MESS2 DB 'INPUT DIRECTION DMA ADDR ',0DH,0AH,'$'
SBUF DB 5 DUP(?)
DBUF DB 5 DUP(?)
DATA ENDS
STACK SEGMENT STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
START: MOV AX,DATA
MOV DX, AX
MOV BX, 0000H
MOV AL,05H ;设置通道1的屏蔽字
OUT 0AH, AL
OUT 0CH,AL ;清除先后触发器
MOV AL, 01001001B
OUT 0BH,AL ;设置通道1的模式字:单字节,读传输
MOV AL,BL ;设置传输起始地址为60000H
OUT 02H, AL
MOV AL, BH
OUT 02H,AL
MOV AL, 06H
OUT 83H,AL
MOV AL,00H ;传输字节数为800H
OUT 03H,AL
MOV AL, 08H
OUT 03H,AL
MOV AL,01H ;去除通道1的屏蔽字
OUT 0AH, AL
PUSH AX ;延迟
POP AX
WAIT0: IN AL,08H ;测试DMA状态字
AND AL, 02H
JZ WAIT0 ;传输没结束则循环等待
MOV AL,05H ;设置通道1屏蔽字
OUT 0AH, AL
OUT 0CH,AL ;清除先后触发器
MOV AL, 01000101B ;
OUT 0BH, AL ;设置通道1为单字节写传输
MOV AL ,BL ;设置传输起始地址为70000H
OUT 02H, AL
MOV AL ,BH
OUT 02H, AL
MOV AL, 07H
OUT 83H,AL
MOV AL,00H ;传输字节数为800H
OUT 03H,AL
MOV AL, 08H
OUT 03H,AL
MOV AL,01H ;去除通道1的屏蔽
OUT 0AH, AL
PUSH AX
POP AX
WAIT1: IN AL,08H
AND AL,02H ;等待DMA传送结束
JZ WAIT1
MOV AX, 4C00H ;返回DOS
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -