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

📄 pci.asm

📁 将数据data写入addr所指定的pci单元
💻 ASM
字号:
********************************************************************************/
* AD.ASM	v1.00					                                           */
*                                                         	                   */
*汇编中引用C语言变量时,必需在变量前加下划线.                               							                   */
******************************************************************
                         .copy "c3x.inc"    ;伪指令:包含另一个源文件在本文件内,
                                            ;并显示所包含的源文件的语句
                         .global _ltopci    ;伪指令:在当前文件中定义的符号,
                                            ;可以被其他文件引用.
********************************************************************************
*									                                           *
* 函数定义:ltopci						   	                                   *
* 功  能:将数据data写入addr所指定的pci单元		                           *
*									                                           *							               
* 入口参数:AR2	  ---- 地址addr,Amsb~A0				                       *
*                                                                              *
*      R2	  ---- PCI的地址                                               *
*           R3    ---- length		                                           *
* 出口参数:R0	  检测结果的地址					                           *
*					                                                           *
* 资源使用:AR1,AR2,R2                                                       *
*AR0-AR1-AR2 存储指针表达式,AR3帧指针(FP),AR4-AR7指针寄存器变量,DP访问全局变量 *
*(只在大模式下).IR0-IR1扩展的帧偏移量. SP堆栈指针.R4,R5是整数型寄存器.R6,R7是  
*浮点型寄存器.                                                                 *
*				                                                               *
*									                                           *
********************************************************************************
                 .data             ;已经初始化的段,常数数据,
                                   ;一般用来对变量初始化的数据.
vc33mmr2         .word    C3x_MMR  ;伪指令定义字 808000H;
pcilmbox         .word    040013eH
pcidmacr         .word    040012fH
pciramaddr       .word    0401000H 
;函数徐步存储时,则在堆栈中建立一个工作区,即局部帧,在函数调用是建立,在函数返回时撤销

FP          .set    AR3   ;  FP is AR3 定义一个符号代表常数 ,
                          ;AR3是辅助寄存器(32bit)AR0-AR7
;帧指针FP,指向当前局部帧的开始.局部帧是堆栈的一个区域,用于存储函数传递的变量.
;每一个函数调用的时候都要在栈顶创建一个新的局部帧.
                                                                                                      
              	      .text       ;已经初始化的段,包含可以执行的汇编指令代码.
_ltopci:	
        .if .REGPARM = 0  ;标准的运行时间模块如果.if后面的常量表达式为真,
                          ;则编译它与.endif之间的代码,否则跳过.  
                          
                PUSH FP          ;将FP寄存器的内容推入当前的系统堆栈,
                                 ;SP所指向的内容已经是AR3寄存器中的内容,
                                 ;但是SP指针的地址不变  
                                 
                LDI  SP,FP       ;LDI,装整数指令,把SP操作数(地址)装入FP寄存器
                                 ;中SP是一个32位的寄存器用来保持系统栈顶地址.  
                                 
                LDI  *-FP(2),AR2 ;AR2寄存器的内容变成了,操作数FP-2所表示的
                                 ;存储器中的数据   ,AR2存储参数1
                                 
                LDI  *-FP(3),R2  ;扩展精度寄存器2(R2)的内容变成了
                                 ;操作数FP-3所表示的存储器中的内容
                                 ;R2主要保存整数和FP表达式  ,R2存储参数2.

                LDI *-FP(4),R3   ;扩展精度寄存器3(R3)的内容变成了操作数
                                 ;FP-4所表示的存储器中的内容
                                 ;R1,R2,R3寄存器在无优化时存储整数和FP表达式.
                                 ;R3存储参数3;
                                 
         .endif                  ;两者的运行时间模型
         .if .BIGMODEL   ;编译器支持两种存储模式,大\小存储器模式.默认是小存储器模式
                         ;限制.BSS块的大小
                PUSH DP          ;DP位数据页指针,是一个32位的寄存器  
                
                         ;大模式下,必须保证DP正确指向目标所在的存储器页,所以在
                         ;每一次访问全局或者静态变量的时候,首先必须用LDP或者LDPK
                         ;指令设置DP寄存器.
                
                LDP	@chk_data,DP ;装数据页指针(立即寻址方式),
                                 ;LDI指令的另一种替代形式
         .endif
                PUSH	AR0      ;AR0~AR1存储指针表达式,
                PUSH    AR1
		PUSH	R1
		PUSHF   R1 ;将R1内容推入SP+1后所指向的存储器中  
		
		OR  6,IOF  ;IOF为I/O标志寄存器.   或. 
		
		AND 0,IE   ;CPU/DMA中断容许寄存器.与.           
		   
		LDI @vc33mmr2,AR0
                LDI (INT_RDY+WAIT_2+BANK_8M),R1
                STI R1,*+AR0(STRB0);STI整数存储指令,把存储器R1的内容, 
                                   ;装入AR0+STRB所指向的寄存器.为系统加入7个等待
                LDI R2,AR0  
                
                LDI R3,AR1
fill:           LDI *AR2++,R1 ;fill为标号,必须从第一列开始, 访问后AR2的地址增加 

             ;  LSH -2,R1     ;逻辑移位指令,右移2位.
                STI R1,*AR0++
                DBU AR1,fill  ;
                LDI @vc33mmr2,AR0
                LDI (INT_RDY+WAIT_3+BANK_8M),R1
                STI R1,*+AR0(STRB0)              ;为系统加入1个等

⌨️ 快捷键说明

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