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

📄 macro_sonix_kuo.h

📁 一个sonix的仿51单片机指令macro,在写汇编时超好用
💻 H
📖 第 1 页 / 共 3 页
字号:
;; Run Time Clock: 2-3
;; Program Length: 2
JB1     MACRO   Bit0,Address

        BTS0    Bit0
        JMP_RET Address

        ENDM

;; 两个寄存器比较,不为0跳走,
;; 1 Byte Compare (<, >, =)
;; Run Time Clock: Max 8, Min 6, Avg 7
;; Program Length: 6
CJR     MACRO   Reg1,Reg2,Addr_Less,Addr_Big

        MOV     A,Reg1
        SUB     A,Reg2
        B0BTS1  FC
        JMP_RET Addr_Less       ;; IF(Reg1<Reg2) JMP  l
        B0BTS1  FZ
        JMP_RET Addr_Big        ;; IF(Reg1>Reg2) JMP  b
                                ;; IF(Reg1=Reg2) next
        ENDM

;; 寄存器与常数比较,不为0跳走,
;; 1 Byte Compare (<, >, =) by Constant
;; Run Time Clock: Max 8, Min 6, Avg 7
;; Program Length: 6
CJC     MACRO   Reg1,Constant,Addr_Less,Addr_Big
        MOV     A,Reg1
        SUB     A,#Constant
        B0BTS1  FC
        JMP_RET Addr_Less       ;; IF(Reg1<#Constant) JMP  l
        B0BTS1  FZ
        JMP_RET Addr_Big        ;; IF(Reg1>#Constant) JMP  b
                                ;; IF(Reg1=#Constant) next
        ENDM

;; 两个寄存器比较,为0跳走,
;; 1 Byte Compare (==, !=),
;; Run Time Clock:== 6, != 5
;; Program Length: 4
CJE     MACRO   Reg1,Reg2,Addr_Equ
        MOV     A,Reg2
        XOR     A,Reg1
        B0BTS0  FZ
        JMP_RET Addr_Equ        ;; IF(Reg1==Reg2) JMP  E
                                ;; IF(Reg1!=Reg2)
        ENDM

;; A与寄存器比较,为0跳走,
;; 1 Byte Compare (==, !=),
;; Run Time Clock:== 4, != 3
;; Program Length: 3
CJEA    MACRO   Reg1,Addr_Equ
        CMPRS   A,Reg1
        JMP     $+2
        JMP_RET Addr_Equ        ;; IF(Reg1==#Constant) JMP  E
                                ;; IF(Reg1!=#Constant)
        ENDM
;; A与常数比较,为0跳走,
;; 1 Byte Compare (==, !=),
;; Run Time Clock:== 4, != 3
;; Program Length: 3
CJEAC   MACRO   Constant,Addr_Equ
        CMPRS   A,#Constant
        JMP     $+2
        JMP_RET Addr_Equ        ;; IF(Reg1==#Constant) JMP  E
                                ;; IF(Reg1!=#Constant)
        ENDM
;; 寄存器与常数比较,== 跳走,
;; 1 Byte Compare (==, !=),
;; Run Time Clock:== 6, != 5
;; Program Length: 4
CJEC    MACRO   Reg1,Constant,Addr_Equ
        MOV     A,#Constant
        XOR     A,Reg1
        B0BTS0  FZ
        JMP_RET Addr_Equ        ;; IF(Reg1==#Constant) JMP  E
                                ;; IF(Reg1!=#Constant)
        ENDM
;; 两个寄存器比较,!=跳走,
;; 1 Byte Compare (!=, ==),
;; Run Time Clock:== 5, != 6
;; Program Length: 4
CJNE    MACRO   Reg1,Reg2,Addr_NoEqu
        MOV     A,Reg2
        CMPRS   A,Reg1
        JMP_RET Addr_NoEqu      ;; IF(Reg1!=Reg2) JMP NE
                                ;; IF(Reg1==Reg2)
        ENDM
;; 寄存器与常数比较,不为0跳走,
;; 1 Byte Compare (!=, ==),
;; Run Time Clock:== 5, != 6
;; Program Length: 4
CJNEC   MACRO   Reg1,Constant,Addr_NoEqu
        MOV     A,#Constant
        XOR     A,Reg1
        B0BTS1  FZ
        JMP_RET Addr_NoEqu      ;; IF(Reg1!=#Constant) JMP NE
                                ;; IF(Reg1==#Constant)
        ENDM

;; 寄存器检查,为0跳走,
;; 1 Byte Check (=0, !=0)
;; Run Time Clock: =0→4,!=→3
;; Program Length: 3
JZ      MACRO   Reg1,Addr_Zero
        MOV     A,Reg1
        B0BTS0  FZ
        JMP_RET Addr_Zero       ;; IF(Reg1=0) JMP Zero
                                ;; IF(Reg1!=0) unjump
        ENDM

;; 寄存器检查,不为0跳走,
;; 1 Byte Check (=0, !=0)
;; Run Time Clock: =0→4,!=→3
;; Program Length: 3
JNZ     MACRO   Reg1,Addr_NZero
        MOV     A,Reg1
        B0BTS1  FZ
        JMP_RET Addr_NZero      ;; IF(Reg1!=0) JMP NZero
                                ;; IF(Reg1=0) unjump
        ENDM

;;------------------------------------------------------------------
;; 两个寄存器比较,第一个大于第二个跳走,
;; 1 Byte Compare ( >, <=)
;; Run Time Clock: > 5, <= 6
;; Program Length: 4
CJA     MACRO   Reg1,Reg2,Addr_Above
        MOV     A,Reg2
        SUB     A,Reg1
        B0BTS1  FC
        JMP_RET Addr_Above      ;; IF(Reg1> Reg2) JMP above
                                ;; IF(Reg1<=Reg2) unjump
        ENDM

;; 寄存器与常数比较,第一个大于第二个跳走,
;; 1 Byte Compare ( >, <=) by Constant
;; Run Time Clock: > 5, <= 6
;; Program Length: 4
CJAC    MACRO   Reg1,Constant,Addr_Above
        MOV     A,#Constant
        SUB     A,Reg1
        B0BTS1  FC
        JMP_RET Addr_Above      ;; IF(Reg1> #Constant) JMP above
                                ;; IF(Reg1<=#Constant) unjump
        ENDM

;; 两个寄存器比较,第一个大于等于第二个跳走,
;; 1 Byte Compare ( >= ,<)
;; Run Time Clock: < 5, >= 6
;; Program Length: 4
CJAE    MACRO   Reg1,Reg2,Addr_Above_Equ
        MOV     A,Reg1
        SUB     A,Reg2
        B0BTS0  FC
        JMP_RET Addr_Above_Equ  ;; IF(Reg1>=Reg2) JMP above
                                ;; IF(Reg1< Reg2) unjump
        ENDM

;; 寄存器与常数比较,第一个大于等于第二个跳走,
;; 1 Byte Compare ( >= ,<)
;; Run Time Clock: < 5, >= 6
;; Program Length: 4
CJAEC   MACRO   Reg1,Constant,Addr_Above_Equ
        MOV     A,Reg1
        SUB     A,#Constant
        B0BTS0  FC
        JMP_RET Addr_Above_Equ  ;; IF(Reg1>=#Constant) JMP above
                                ;; IF(Reg1< #Constant) unjump
        ENDM

;; 两个寄存器比较,第一个小于第二个跳走,
;; 1 Byte Compare ( <, >=)
;; Run Time Clock: < 5, >= 6
;; Program Length: 4
CJB     MACRO   Reg1,Reg2,Addr_Below
        MOV     A,Reg1
        SUB     A,Reg2
        B0BTS1  FC
        JMP_RET Addr_Below      ;; IF(Reg1< Reg2) JMP below
                                ;; IF(Reg1>=Reg2) unjump
        ENDM

;; 寄存器与常数比较,第一个小于第二个跳走,
;; 1 Byte Compare ( <, >=) by Constant
;; Run Time Clock: < 5, >= 6
;; Program Length: 4
CJBC    MACRO   Reg1,Constant,Addr_Below
        MOV     A,Reg1
        SUB     A,#Constant
        B0BTS1  FC
        JMP_RET Addr_Below      ;; IF(Reg1< #Constant) JMP below
                                ;; IF(Reg1>=#Constant) unjump
        ENDM

;; 两个寄存器比较,第一个小于等于第二个跳走,
;; 1 Byte Compare ( <= ,>)
;; Run Time Clock: > 5, <= 6
;; Program Length: 4
CJBE    MACRO   Reg1,Reg2,Addr_Below_Equ
        MOV     A,Reg2
        SUB     A,Reg1
        B0BTS0  FC
        JMP_RET Addr_Below_Equ  ;; IF(Reg1<=Reg2) JMP above
                                ;; IF(Reg1> Reg2) unjump
        ENDM

;; 寄存器与常数比较,第一个小于等于第二个跳走,
;; 1 Byte Compare ( <= ,>)
;; Run Time Clock: > 5, <= 6
;; Program Length: 4
CJBEC   MACRO   Reg1,Constant,Addr_Below_Equ
        MOV     A,#Constant
        SUB     A,Reg1
        B0BTS0  FC
        JMP_RET Addr_Below_Equ  ;; IF(Reg1<=#Constant) JMP above
                                ;; IF(Reg1> #Constant) unjump
        ENDM

;;------------------------------------------------------------------
;; 两个寄存器(16Bit)比较,不为0跳走,
;; 2 Byte Compare (<, >, =)
;; Run Time Clock:
;; Program Length: 12
CJR2    MACRO   Reg1_H,Reg1_L,Reg2_H,Reg2_L,Addr_Below,Addr_Above

        CJR     Reg1_H,Reg2_H,Addr_Below,Addr_Above
        CJR     Reg1_L,Reg2_L,Addr_Below,Addr_Above

        ENDM

;; 寄存器(16Bit)与常数比较,不为0跳走,
;; 2 Byte Compare (<, >, =) by Constant
;; Run Time Clock:
;; Program Length: 12
CJC2    MACRO   Reg1_H,Reg1_L,Constant_H,Constant_L,Addr_Below,Addr_Above

        CJC     Reg1_H,Constant_H,Addr_Below,Addr_Above
        CJC     Reg1_L,Constant_L,Addr_Below,Addr_Above

        ENDM

;; 两个寄存器(16Bit)比较,第一个大于第二个跳走,
;; 2 Byte Compare ( >, <=)
;; Run Time Clock:
;; Program Length: 10
CJA2    MACRO   Reg1_H,Reg1_L,Reg2_H,Reg2_L,Addr_Above

        MOV     A,Reg2_H
        SUB     A,Reg1_H
        B0BTS1  FC
        JMP_RET Addr_Above      ;; IF(Reg1> Reg2) JMP above

        B0BTS1  FZ
        JMP     $+5

        MOV     A,Reg2_L
        SUB     A,Reg1_L
        B0BTS1  FC
        JMP_RET Addr_Above      ;; IF(Reg1> Reg2) JMP above
                                ;; IF(Reg1<=Reg2) unjump
        ENDM

;; 两个寄存器(16Bit)比较,第一个小于第二个跳走,
;; 2 Byte Compare ( <, >=)
;; Run Time Clock:
;; Program Length: 10
CJB2    MACRO   Reg1_H,Reg1_L,Reg2_H,Reg2_L,Addr_Below

        MOV     A,Reg1_H
        SUB     A,Reg2_H
        B0BTS1  FC
        JMP_RET Addr_Below      ;; IF(Reg1< Reg2) JMP below

        B0BTS1  FZ
        JMP     $+5

        MOV     A,Reg1_L
        SUB     A,Reg2_L
        B0BTS1  FC
        JMP_RET Addr_Below      ;; IF(Reg1< Reg2) JMP below
                                ;; IF(Reg1>=Reg2) unjump
        ENDM

;; 两个寄存器(16Bit)比较,第一个大于等于第二个跳走,
;; 2 Byte Compare ( >=,< )
;; Run Time Clock:
;; Program Length: 10
CJAE2   MACRO   Reg1_H,Reg1_L,Reg2_H,Reg2_L,Addr_Above_Equ

        MOV     A,Reg2_H
        SUB     A,Reg1_H
        B0BTS0  FZ
        JMP     $+4

        B0BTS1  FC
        JMP_RET Addr_Above_Equ  ;; IF(Reg1>=Reg2) JMP above_Equ
        JMP     $+5

        MOV     A,Reg1_L
        SUB     A,Reg2_L
        B0BTS0  FC
        JMP_RET Addr_Above_Equ  ;; IF(Reg1>=Reg2) JMP above_Equ
                                ;; IF(Reg1< Reg2) unjump
        ENDM

;; 两个寄存器(16Bit)比较,第一个小于等于第二个跳走,
;; 2 Byte Compare ( <=,> )
;; Run Time Clock:
;; Program Length: 10
CJBE2   MACRO   Reg1_H,Reg1_L,Reg2_H,Reg2_L,Addr_Below_Equ

        MOV     A,Reg1_H
        SUB     A,Reg2_H
        B0BTS1  FC
        JMP_RET Addr_Below_Equ  ;; IF(Reg1<=Reg2) JMP Below_Equ

        B0BTS1  FZ
        JMP     $+5

        MOV     A,Reg2_L
        SUB     A,Reg1_L
        B0BTS0  FC
        JMP_RET Addr_Below_Equ  ;; IF(Reg1<=Reg2) JMP Below_Equ
                                ;; IF(Reg1> Reg2) unjump
        ENDM

;; 两个寄存器(16Bit)比较,== 跳走,
;; 2 Byte Compare (==, !=),
;; Run Time Clock:
;; Program Length: 8
CJE2    MACRO   Reg1_H,Reg1_L,Reg2_H,Reg2_L,Addr_Equ


        CJNE    Reg1_H,Reg2_H,$+5
        CJE     Reg1_L,Reg2_L,Addr_Equ

        ENDM

;; 两个寄存器(16Bit)比较,!= 跳走,
;; 2 Byte Compare (==, !=),
;; Run Time Clock:
;; Program Length: 8
CJNE2   MACRO   Reg1_H,Reg1_L,Reg2_H,Reg2_L,Addr_NoEqu

        CJNE    Reg1_H,Reg2_H,Addr_NoEqu
        CJNE    Reg1_L,Reg2_L,Addr_NoEqu

        ENDM

;; 寄存器(16Bit)检查,为0跳走,
;; 2 Byte Check (=0, !=0)
;; Run Time Clock: =0→4,!=→3
;; Program Length: 6
JZ2     MACRO   Reg1_H,Reg1_L,Addr_Zero

        JNZ     Reg1_H,$+4
        JZ      Reg1_L,Addr_Zero

        ENDM

;; 寄存器(16Bit)检查,不为0跳走,
;; 1 Byte Check (=0, !=0)
;; Run Time Clock:
;; Program Length: 6
JNZ2    MACRO   Reg1_H,Reg1_L,Addr_NZero

        JNZ     Reg1_H,Addr_NZero
        JNZ     Reg1_L,Addr_NZero
                                ;; IF(Reg1=0) unjump
        ENDM

;; 两个寄存器(16Bit)比较,第一个大于第二个跳走,
;; 2 Byte Compare ( >, <=)  by Constant
;; Run Time Clock:
;; Program Length: 10
CJAC2   MACRO   Reg1_H,Reg1_L,Constant_H,Constant_L,Addr_Above

        MOV     A,#Constant_H
        SUB     A,Reg1_H
        B0BTS1  FC
        JMP_RET Addr_Above      ;; IF(Reg1> #Constant) JMP above

        B0BTS1  FZ
        JMP     $+5

        MOV     A,#Constant_L
        SUB     A,Reg1_L
        B0BTS1  FC
        JMP_RET Addr_Above      ;; IF(Reg1> #Constant) JMP above
                                ;; IF(Reg1<=#Constant) unjump
        ENDM

;; 两个寄存器(16Bit)比较,第一个大于等于第二个跳走,
;; 2 Byte Compare ( <, >=)  by Constant
;; Run Time Clock:
;; Program Length: 11
CJAEC2  MACRO   Reg1_H,Reg1_L,Constant_H,Constant_L,Addr_Above_Equ

        MOV     A,#Constant_H
        SUB     A,Reg1_H
        B0BTS0  FZ
        JMP     $+4

        B0BTS1  FC
        JMP_RET Addr_Above_Equ  ;; IF(Reg1>=#Constant) JMP above_Equ
        JMP     $+5

        MOV     A,Reg1_L
        SUB     A,#Constant_L
        B0BTS0  FC
        JMP_RET Addr_Above_Equ  ;; IF(Reg1>=#Constant) JMP above_Equ
                                ;; IF(Reg1< #Constant) unjump
        ENDM

;; 两个寄存器(16Bit)比较,第一个小于第二个跳走,

⌨️ 快捷键说明

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