📄 branch.inc
字号:
;*************************************************************************
;实用的8051单片机分支判断程序
;直接对应于C语言中的条件判断语句(相反条件)
;适用于Keil C51编译器
;*************************************************************************
;*************************************************************************
;宏定义:BEQ_B(Branch if Equal)
;功能:两个位变量比较,如果相等则跳转
;参数:
; b1,b2:要比较的两个位变量(或者位变量与位常量比较)
; Label:跳转目标
;*************************************************************************
BEQ_B MACRO b1, b2, Label
LOCAL next
MOV C, b2
JNB b1, next
CPL C
next:
JNC Label
ENDM
;*************************************************************************
;宏定义:BNE_B(Branch if Not Equal)
;功能:两个位变量比较,如果不相等则跳转
;参数:
; b1,b2:要比较的两个位变量(或者位变量与位常量比较)
; Label:跳转目标
;*************************************************************************
BNE_B MACRO b1, b2, Label
LOCAL next
MOV C, b2
JNB b1, next
CPL C
next:
JC Label
ENDM
;*************************************************************************
;宏定义:BEQ(Branch if Equal)
;功能:单字节数比较,如果相等则跳转
;参数:
; x,y:要比较的两个数
; Label:跳转目标
;*************************************************************************
BEQ MACRO x, y, Label
MOV A, x
XRL A, y
JZ Label
ENDM
;*************************************************************************
;宏定义:BNE(Branch if Not Equal)
;功能:单字节数比较,如果不相等则跳转
;参数:
; x,y:要比较的两个数
; Label:跳转目标
;*************************************************************************
BNE MACRO x, y, Label
MOV A, x
CJNE A, y, Label
ENDM
;*************************************************************************
;宏定义:BHS(Branch if High or Same)
;功能:单字节无符号数比较,如果大于或等于则跳转
;参数:
; x,y:要比较的两个数
; Label:跳转目标
;*************************************************************************
BHS MACRO x, y, Label
MOV A, x
CLR C
SUBB A, y
JNC Label
ENDM
;*************************************************************************
;宏定义:BHI(Branch if High)
;功能:单字节无符号数比较,如果大于则跳转
;参数:
; x,y:要比较的两个数
; Label:跳转目标
;*************************************************************************
BHI MACRO x, y, Label
MOV A, x
SETB C
SUBB A, y
JNC Label
ENDM
;*************************************************************************
;宏定义:BLS(Branch if Low or Same)
;功能:单字节无符号数比较,如果小于或等于则跳转
;参数:
; x,y:要比较的两个数
; Label:跳转目标
;*************************************************************************
BLS MACRO x, y, Label
MOV A, x
SETB C
SUBB A, y
JC Label
ENDM
;*************************************************************************
;宏定义:BLO(Branch if Low)
;功能:单字节无符号数比较,如果小于则跳转
;参数:
; x,y:要比较的两个数
; Label:跳转目标
;*************************************************************************
BLO MACRO x, y, Label
MOV A, x
CLR C
SUBB A, y
JC Label
ENDM
;*************************************************************************
;宏定义:JZ_W
;功能:双字节数为0跳转
;参数:
; (xh,xl):要判断的数
; Label:跳转目标
;*************************************************************************
JZ_W MACRO xh,xl, Label
MOV A, xh
ORL A, xl
JZ Label
ENDM
;*************************************************************************
;宏定义:JNZ_W
;功能:双字节数不为0跳转
;参数:
; (xh,xl):要判断的数
; Label:跳转目标
;*************************************************************************
JNZ_W MACRO xh,xl, Label
MOV A, xh
ORL A, xl
JNZ Label
ENDM
;*************************************************************************
;宏定义:DJNZ_W
;功能:双字节数自减1,结果不为0跳转
;参数:
; (xh,xl):要操作的数
; Label:跳转目标
;*************************************************************************
DJNZ_W MACRO xh,xl, Label
LOCAL next
MOV A, xl
JNZ next
DEC xh
next:
DEC xl
MOV A, xh
ORL A, xl
JNZ Label
ENDM
;*************************************************************************
;宏定义:BEQ_W(Branch if Equal)
;功能:双字节数比较,如果相等则跳转
;参数:
; (xh,xl),(yh,yl):要比较的两个数
; Label:跳转目标
;*************************************************************************
BEQ_W MACRO xh,xl, yh,yl, Label
LOCAL next
MOV A, xl
XRL A, yl
JNZ next
MOV A, xh
XRL A, yh
JZ Label
next:
ENDM
;*************************************************************************
;宏定义:BNE_W(Branch if Not Equal)
;功能:双字节数比较,如果不相等则跳转
;参数:
; (xh,xl),(yh,yl):要比较的两个数
; Label:跳转目标
;*************************************************************************
BNE_W MACRO xh,xl, yh,yl, Label
MOV A, xl
CJNE A, yl, Label
MOV A, xh
CJNE A, yh, Label
ENDM
;*************************************************************************
;宏定义:BHS_W(Branch if High or Same)
;功能:双字节无符号数比较,如果大于或等于则跳转
;参数:
; (xh,xl),(yh,yl):要比较的两个数
; Label:跳转目标
;*************************************************************************
BHS_W MACRO xh,xl, yh,yl, Label
CLR C
MOV A, xl
SUBB A, yl
MOV A, xh
SUBB A, yh
JNC Label
ENDM
;*************************************************************************
;宏定义:BHI_W(Branch if High)
;功能:双字节无符号数比较,如果大于则跳转
;参数:
; (xh,xl),(yh,yl):要比较的两个数
; Label:跳转目标
;*************************************************************************
BHI_W MACRO xh,xl, yh,yl, Label
SETB C
MOV A, xl
SUBB A, yl
MOV A, xh
SUBB A, yh
JNC Label
ENDM
;*************************************************************************
;宏定义:BLS_W(Branch if Low or Same)
;功能:双字节无符号数比较,如果小于或等于则跳转
;参数:
; (xh,xl),(yh,yl):要比较的两个数
; Label:跳转目标
;*************************************************************************
BLS_W MACRO xh,xl, yh,yl, Label
SETB C
MOV A, xl
SUBB A, yl
MOV A, xh
SUBB A, yh
JC Label
ENDM
;*************************************************************************
;宏定义:BLO_W(Branch if Low)
;功能:双字节无符号数比较,如果小于则跳转
;参数:
; (xh,xl),(yh,yl):要比较的两个数
; Label:跳转目标
;*************************************************************************
BLO_W MACRO xh,xl, yh,yl, Label
CLR C
MOV A, xl
SUBB A, yl
MOV A, xh
SUBB A, yh
JC Label
ENDM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -