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

📄 macro_sonix_kuo.h

📁 一个sonix的仿51单片机指令macro,在写汇编时超好用
💻 H
📖 第 1 页 / 共 3 页
字号:
;;File:MACRO_SONIX.H
;;Data:2007/09/15
;;Modify:2007/11/23
;;Designator:GUO YONG LIANG

;;------------------------------------------------------------------
;; ADD2R/ADD2C/ADD1C/ADD1R
;; BTOBE/BTOBNE
;; CLRC/CLRWDT/CJR/CJC/CJE/CJEC/CJNE/CJNEC/CJA/CJAC/CJB/CJBC/CJAE/CJAEC/CJBE/CJBEC/CJEA/CJEAC
;; CJE2/CJEC2/CJNE2/CJNEC2/CJA2/CJB2/CJR2/CJC2/CJAE2/CJAEC2/CJBE2/CJBEC2/CJAC2/CJBC2
;; DINT/D1T/D2T/DEC2R
;; EINT
;; JZ/JNZ/JMP_RET/JNZ2/JZ2/JB0/JB1
;; MOV1C/MOV1R/MOV2C/MOV2R/MOV3R/MOV3C
;; NOT/NEG/NEXT
;; ROR/ROL
;; SETC/SUB2R/SUB2C/SHLC/SHRC/SHL2C/SHR2C/SHL2/SHR2/SUB1R/SUB1C
;; INC2R
;; @JMP_A
;; UPTO
;; XORC/ORC/ANDC
;;------------------------------------------------------------------
    IFNDEF      _SONIXMACRO_

        _SONIXMACRO_    EQU     1

;;------------------------------------------------------------------
JE		MACRO	Address		;; Jump if Zer0
		b0bts0	fz
		Jmp_Ret	Address		;; Zer0 = 1
		ENDM
JZer0	MACRO	Address		;; Jump if Zer0
		b0bts0	fz
		Jmp_Ret	Address		;; Zer0 = 1
		ENDM
JNE		MACRO	Address		;; Jump if Zer0 = 0
		b0bts1	fz
		Jmp_Ret	Address		;; Zer0 = 0
		ENDM
		
;进入睡眠
sleep_		macro
		B0BSET FCPUM0
		endm
;位取反
NOT_BIT		macro 	bit
		b0bts0	bit
		JMP		$+3 
		b0bset	bit
		JMP 	$+2
		b0bclr 	bit
		endm
;; Clear Carry Flag
;; Run Time Clock:1
;; Program Length:1

CLRC    MACRO
        B0BCLR  FC
        ENDM

;; Set Carry Flag
;; Run Time Clock:1
;; Program Length:1

SETC    MACRO
        B0BSET  FC
        ENDM

;; Reset Watch-Dog Count
;; Run Time Clock:1
;; Program Length:1

CLRWDT  MACRO
        MOV 	a,#5ah
	B0MOV 	WDTR,A
        ENDM

;; Enable Interrupt
;; Run Time Clock:1
;; Program Length:1

EINT    MACRO
        B0BSET  FGIE
        ENDM

;; Disable Interrupt
;; Run Time Clock:1
;; Program Length:1

DINT    MACRO
        B0BCLR  FGIE
        ENDM

;; Memory = ~Memory
;; Run Time Clock:1
;; Program Length:1

NOT     MACRO   Memory
    IFIDNI       <Memory>, <A>
        XOR     A,#0XFF
    ELSE
        MOV     A,#0XFF
        XOR     Memory,A
    ENDIF
        ENDM

;; Memory = -Memory
;; Run Time Clock:4
;; Program Length:4

NEG     MACRO   Memory
    IFIDNI      <Memory>, <A>
        XOR     A,#0XFF
        ADD     A,#1
    ELSE
        MOV     A,#0
        SUB     Memory,A
    ENDIF
        ENDM

;; Memory XOR Constant
;; Run Time Clock:2
;; Program Length:2

XORC    MACRO   Memory,Constant
    IFIDNI       <Memory>, <A>
        XOR     Memory,A
    ELSE
        MOV     A,#Constant
        XOR     Memory,A
    ENDIF
        ENDM

;; Memory OR Constant
;; Run Time Clock:2
;; Program Length:2

ORC     MACRO   Memory,Constant
    IFIDNI       <Memory>, <A>
        OR      Memory,A
    ELSE
        MOV     A,#Constant
        OR      Memory,A
    ENDIF
        ENDM

;; Memory AND Constant
;; Run Time Clock:2
;; Program Length:2

ANDC    MACRO   Memory,Constant
    IFIDNI       <Memory>, <A>
        AND     Memory,A
    ELSE
        MOV     A,#Constant
        AND     Memory,A
    ENDIF
        ENDM

;;------------------------------------------------------------------

;; 2 Byte Plus AX = AX + 1
;; Run Time Clock:Max6 Min 4
;; Program Length:4
INC2R   MACRO   AHByte,ALByte

        INCMS   ALByte
        JMP     $+2
        INCMS   AHByte
        NOP

        ENDM

;; 1 Byte Plus AX = AX + BX(1Byte)
;; Run Time Clock:4
;; Program Length:4
ADD1R   MACRO   AHByte,ALByte,BLByte

        MOV     A,BLByte
        ADD     ALByte,A
        MOV     A,#0
        ADC     AHByte,A

        ENDM

;; 2 Byte Plus AX = AX + BX
;; Run Time Clock:4
;; Program Length:4
ADD2R   MACRO   AHByte,ALByte,BHByte,BLByte

        MOV     A,BLByte
        ADD     ALByte,A
        MOV     A,BHByte
        ADC     AHByte,A

        ENDM

;; 2 Byte Plus AX = AX + BX
;; Run Time Clock:6
;; Program Length:6
ADD3B2R MACRO   AHByte,AMByte,ALByte,BHByte,BLByte

        MOV     A,BLByte
        ADD     ALByte,A
        MOV     A,BHByte
        ADC     AMByte,A
        MOV     A,#0
        ADC     AHByte,A

        ENDM

;; 2 Byte Plus AX = AX + CX ( Constant )(1 Byte)
;; Run Time Clock:4
;; Program Length:4
ADD1C   MACRO   AHByte,ALByte,CLByte

        MOV     A,#CLByte
        ADD     ALByte,A
        MOV     A,#0
        ADC     AHByte,A

        ENDM

;; 2 Byte Plus AX = AX + CX ( Constant )
;; Run Time Clock:4
;; Program Length:4
ADD2C   MACRO   AHByte,ALByte,CHByte,CLByte

        MOV     A,#CLByte
        ADD     ALByte,A
        MOV     A,#CHByte
        ADC     AHByte,A

        ENDM

;; 2 Byte Plus AX = AX + CX ( Constant )
;; Run Time Clock:6
;; Program Length:6
ADD3B2C MACRO   AHByte,AMByte,ALByte,CHByte,CLByte

        MOV     A,#CLByte
        ADD     ALByte,A
        MOV     A,#CHByte
        ADC     AMByte,A
        MOV     A,#0
        ADC     AHByte,A

        ENDM

;; 2Byte AX = AX - BX(1Byte)
;; run time clock:6
;; ProgramLength: 6
SUB1R   MACRO   AH,AL,BL  ;; AX = AX - BX
        MOV     A,AL
        SUB     A,BL
        MOV     AL,A
        B0BTS1  FC
        DECMS   AH
        NOP

        ENDM

;; 2Byte AX = AX - BX
;; run time clock:6
;; ProgramLength: 6
SUB2R   MACRO   AH,AL,BH,BL  ;; AX = AX - BX
        MOV     A,AL
        SUB     A,BL
        MOV     AL,A
        MOV     A,AH
        SBC     A,BH
        MOV     AH,A
        ENDM

;; 3Byte AX = AX - BX
;; run time clock:9
;; ProgramLength: 9
SUB3B2R MACRO   AH,AM,AL,BH,BL  ;; AX = AX - BX
        MOV     A,AL
        SUB     A,BL
        MOV     AL,A
        MOV     A,AM
        SBC     A,BH
        MOV     AM,A
        B0BTS1  FC
        DECMS   AH
        NOP
        ENDM

;; 2Byte AX = AX - 1
;; run time clock:5
;; ProgramLength: 5
DEC2R   MACRO   AH,AL        ;; AX = AX - 1

        MOV     A,#256-1
        ADD     AL,A
        B0BTS1  FC
        DECMS   AH
        NOP
        ENDM

;; 2Byte AX = AX - BX, BX is Constant
;; run time clock:6
;; ProgramLength: 6
SUB1C   MACRO   AH,AL,BL     ;; AX = AX - BX
        MOV     A,AL
        SUB     A,#BL
        MOV     AL,A
        B0BTS1  FC
        DECMS   AH
        NOP
        ENDM

;; 2Byte AX = AX - BX, BX is Constant
;; run time clock:7
;; ProgramLength: 7
SUB2C   MACRO   AH,AL,BH,BL  ;; AX = AX - BX

        MOV     A,#(256-BL)
        ADD     AL,A
        MOV     A,AH
        B0BTS1  FC
        SUB     A,#1
        SUB     A,#BH
        MOV     AH,A
        ENDM

;; 3Byte AX = AX - BX, BX is Constant
;; run time clock:13
;; ProgramLength: 13
SUB3R2C MACRO   AH,AM,AL,BH,BL  ;; AX = AX - BX

        MOV     A,#(256-BL)
        ADD     AL,A
        B0BTS0  FC
        JMP     $+5

        DECMS   AM
        JMP     $+3
        DECMS   AH
        NOP

        MOV     A,#(256-BH)
        ADD     AM,A
        B0BTS1  FC
        DECMS   AH
        NOP
        ENDM

;; Bit Copy EQU
;; Run Time Clock:4
;; Program Length:4

BTOBE   MACRO   Bit0,Bit1

        BTS1    Bit1
        BCLR    Bit0
        BTS0    Bit1
        BSET    Bit0

        ENDM

;; Bit Copy !=
;; Run Time Clock:4
;; Program Length:4

BTOBNE  MACRO   Bit0,Bit1

        BTS1    Bit1
        BSET    Bit0
        BTS0    Bit1
        BCLR    Bit0

        ENDM

;; Reg unto Constant
;; Run Time Clock:7
;; Program Length:6

UPTO    MACRO   Reg0,Constant,Address

        INCMS   Reg0
        MOV     A,Reg0
        SUB     A,#Constant
        B0BTS1  FC
    IFB    <Address>
        RET
    ELSE
        JMP_RET Address
    ENDIF

        CLR     Reg0

        ENDM

;; 跳转指令,宏内部用,目的是让转移地址可以的RET指令
;; Run Time Clock: 2
;; Program Length: 1
JMP_RET MACRO     Address
    IFIDNI    <Address>, <Ret>
        RET
    ELSE
        JMP       Address
       ENDIF
           ENDM

;; 位判断,为0跳走,
;; 1 Bit Compare (<, >, =)
;; Run Time Clock: 2-3
;; Program Length: 2
JB0     MACRO   Bit0,Address

        BTS1    Bit0
        JMP_RET Address

        ENDM

;; 位判断,为1跳走,
;; 1 Bit Compare (<, >, =)

⌨️ 快捷键说明

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