⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t8237.asm

📁 该程序代码的功能主要是为了对DMA芯片8237的功能进行一个了解。在该程序中利用8237实现了将内存中魔几个单元的数据复制到另外几个存储单元。
💻 ASM
字号:
;T8237.ASM
;DMA传输实验
.386P

;***************根据CHECK配置信息修改下列符号值*******************
IOY0         EQU  9C00H        ;IOY0起始地址
MY0_H        EQU  0D9H         ;片选MY0起始地址的最高位字节
MY0_M        EQU  00H          ;片选MY0起始地址的次高位字节
MY0_L        EQU  0000H        ;片选MY0起始地址的低两位字节
;*****************************************************************
MY8237_0     EQU  IOY0+00H*4   ;通道0当前地址寄存器 
MY8237_1     EQU  IOY0+01H*4   ;通道0当前字节计数寄存器
MY8237_2     EQU  IOY0+02H*4   ;通道1当前地址寄存器
MY8237_3     EQU  IOY0+03H*4   ;通道1当前字节计数寄存器
MY8237_8     EQU  IOY0+08H*4   ;写命令寄存器/读状态寄存器
MY8237_9     EQU  IOY0+09H*4   ;请求寄存器
MY8237_B     EQU  IOY0+0BH*4   ;工作方式寄存器
MY8237_D     EQU  IOY0+0DH*4   ;写总清命令/读暂存寄存器
MY8237_F     EQU  IOY0+0FH*4   ;屏蔽位寄存器 

ATDW            EQU     92h ;存在的可读写数据段属性值
ATCE            EQU     98h ;存在的只执行代码段属性值

Desc            STRUC
LimitL          DW      0 ;段界限(BIT0-15)
BaseL           DW      0 ;段基地址(BIT0-15)
BaseM           DB      0 ;段基地址(BIT16-23)
Attributes      DB      0 ;段属性
LimitH          DB      0 ;段界限(BIT16-19)(含段属性的高4位)
BaseH           DB      0 ;段基地址(BIT24-31)
Desc            ENDS

DSEG		SEGMENT USE16
GDT		LABEL   BYTE
ID1		DESC   <0FFFFH,0FFFFH,0FFH,0FFH,0FFH,0FFH>
SCODE		DESC   <0FFFFH,CSEG,,ATCE,,>
DATAS		DESC   <D1LEN,DSEG1,,ATDW,,>	         ;源数据段描述符
DATAD           DESC   <2000H,MY0_L,MY0_M,ATDW,,MY0_H>   ;目的数据段描述符
GDTLEN	   	=   $-GDT
SCODE_SEL	=   SCODE-GDT
DATAS_SEL	=   DATAS-GDT
DATAD_SEL	=   DATAD-GDT
ID2		DESC   <0FFFFH,0FFFFH,0FFH,0FFH,0FFH,0FFH >
ID3		DESC   <0FFFFH,0FFFFH,0FFH,0FFH,0FFH,0FFH > 
DSEG		ENDS
	
DSEG1		SEGMENT USE16
TDATA           DD   00000000H,11111111H, 22222222H, 33333333H
D1LEN           =$-1
DSEG1		ENDS

CSEG		SEGMENT USE16
		ASSUME CS:CSEG
START		PROC

        	MOV DX,MY8237_D   ;写总清命令
        	OUT DX,AL

        	MOV DX,MY8237_0   ;写通道0当前地址寄存器
        	MOV AL,00H               
        	OUT DX,AL
        	MOV AL,00H     
        	OUT DX,AL

        	MOV DX,MY8237_2   ;写通道1当前地址寄存器
                MOV AL,0CH        
       	 	OUT DX,AL
        	MOV AL,00H
        	OUT DX,AL

        	MOV DX,MY8237_1   ;写通道0当前字节计数寄存器
                MOV AL,0BH       
        	OUT DX,AL
        	MOV AL,00H
        	OUT DX,AL

        	MOV DX,MY8237_3   ;写通道1当前字节计数寄存器
                MOV AL,0BH        
        	OUT DX,AL
        	MOV AL,00H
        	OUT DX,AL

        	MOV DX,MY8237_B   ;写通道0工作方式寄存器
        	MOV AL,88H        
        	OUT DX,AL
        	MOV AL,85H        ;写通道1工作方式寄存器     
        	OUT DX,AL

        	MOV DX,MY8237_8   ;写命令寄存器
        	MOV AL,81H        
        	OUT DX,AL
   
        	MOV DX,MY8237_F   ;写屏蔽位寄存器
        	MOV AL,00H          
        	OUT DX,AL

        	MOV DX,MY8237_9   ;写请求寄存器
        	MOV AL,04H        
        	OUT DX,AL
        
                INT 0FFH
START		ENDP
CLEN		=$-1
CSEG	ENDS
        END	START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -