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

📄 c_pwm_asm1.asm

📁 电压空间矢量改进算法的实现!现场调试已过
💻 ASM
字号:
    .def _h_divide
    .text
_h_divide: 
	POPD	*+;   把函数返回地址从硬件堆栈中弹到@AR0 AR0++
	SAR	    AR0,*+;  把AR0保存到@AR0 然后AR0++
	SAR	    AR1,* ;? 把AR1保存到@AR0 然后AR0
    LARK	AR0,4 ;?设置新的AR0,AR1; LARK	AR0,4
	LAR	AR0,*0+,AR2
    ; _divisor的地址为FP - 3, _dividend的地址为FP - 4
    ;
    SETC  SXM ;
    LAR AR2,#0FFFDH;  置AR2为-3
    MAR *0+         ;把AR2指向_divisor
    LAC *            ;载入_divisor到ACC
    BCND L1,LT       ;当ACC < 0时,跳转
    LACL #1H         ;准备给s_a装入1
    ADRK #4H        ; 把AR2指向_s_divisor
    SACL *,0          ;把ACC中的值1装入_s_divisor
    B L2              ;
L1: ADRK #4H        ; 把AR2指向_s_divisor  
    SPLK #-1h,*       ;给s_a装入-1
    NEG              ;取反 
    SBRK #4h
    SACL *,0         ;改变_divisor中的值,同时AR2指向_dividend
L2: LAR AR2,#0fffch  ;
    MAR *0+          ;
    LACC *,0         ;载入_dividend到ACC
    BCND L3,LT       ;
    LACL #1H         
    ADRK #6H         ;AR2指向_s_dividend
    SACL *,0          ;把ACC中的值1存入@AR2
    SBRK #5h          ;指针指向_dividend
    B L4,*           
L3: ADRK #6H         ;AR2指向_s_dividend
    SPLK #-1h,*      ;把-1存入@AR2
    NEG               ;把ACC中的值_dividend取反
    SBRK #6h          ;修改指针
    SACL *+,0          ;把取反后的值存入_dividend
;现在_divisor和_dividend中的值都是取绝对值后的结果这时可
;以把_divisor载入ACC的高位,重复SUBC _dividend 16次,
;ACC中的低16位就是商。
L4: LACC *-,12         ;把_divisor载入ACC的高位,并右移4位
;    RPT #16            ;同时把AR2指向_dividend
    SUBC *  ;1
    SUBC *  ;2
    SUBC *  ;3
    SUBC *  ;4
    SUBC *  ;5
    SUBC *  ;6
    SUBC *  ;7
    SUBC *  ;8
    SUBC *  ;9
    SUBC *  ;10
    SUBC *  ;11
    SUBC *  ;12
    SUBC *  ;13
    SUBC *  ;14
    SUBC *  ;15
    SUBC *  ;16
    ADRK #7h         ;把AR2指向_quotient
    SACL *,0          ;把ACL中的结果存到_quotient
    LT *              ;把_quotient放入Treg
    SBRK #2h         ;把AR2指向_s_divisor;
    MPY *+,AR0      ;
    SPL *            ;把Preg中的低位存到
    LT *,AR2
    MPY *+
    SPL *            ;把_quotient*_s_divisor*_dividend的结果存入
    LACC *,0         ;把返回值存入ACC
; 维护C语言的函数栈
    MAR *,AR1       ;
    SBRK #5h        ;把AR1指向上一级函数调用时的栈顶加一,
;即为上一级存放AR0的地方。
    LAR AR0,*-      ;把AR0取出来,并让AR1指向栈顶
    PSHD *          ;把返回地址压入硬堆栈
    RET             ;返回

⌨️ 快捷键说明

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