📄 macro.inc
字号:
.NOLISTMACRO
;-----------------------------------------------------------------------------
; Macro.inc (Holtek asm)
;
; By: Stonelu 1998.4.13
;----------------------------------------------------------------------------
sjmp EQU jmp
ljmp EQU jmp
bCarry EQU STATUS.0 ;加法时有进位,减法没有借位 C=1
bZero EQU STATUS.2 ;运算结果=0置位 <>0 时 bZero=0
EA EQU INTC.0
@R0 EQU R0
@R1 EQU R1
if 0
;---- cplbit bit 位取反
cplbit macro bit
sz bit
jmp $+3
set bit
jmp $+2
clr bit
endm
endif
;---- jz dest ACC等于0,跳转 3bytes
; used null
jz macro dest
jb bZero,dest
endm
;---- jnz dest ACC不等于0,跳转 3bytes
; used null
jnz macro dest
jnb bZero,dest
endm
;---- sjz data,dest 等于0,跳转 3bytes
; data 为数据存储器/can't be ACC
; used null
sjz macro data,dest
sz data
jmp $+2
jmp dest
endm
;---- sjnz data,dest 不等于0,跳转 2bytes
; data 为数据存储器/can't be ACC
; used null
sjnz macro data,dest
sz data
jmp dest
endm
;---- djnz data,dest data减-1 若结果不等于0,跳转 2bytes
; data 为数据存储器/can't be ACC
; used null
djnz macro data,dest
sdz data
jmp dest
endm
;---- jb bit,dest 若结果位bit等于1,跳转 2bytes
; data 为位地址
; used null
jb macro bit,dest
sz bit
jmp dest
endm
;---- jnb bit,dest 若结果位bit等于0,跳转 2bytes
; data 为位地址
; used null
jnb macro bit,dest
snz bit
jmp dest
endm
;---- jc dest 若C等于1,跳转 2bytes
; used null
jc macro dest
sz STATUS.0
jmp dest
endm
;---- jnc dest 若C等于0,跳转 2bytes
; used null
jnc macro dest
snz STATUS.0
jmp dest
endm
;---- cjb A,var,dest 若<var, jmp 3bytes
; var 可以是数据存储器,也可以是立即数
; used STATUS,影响标志位等
ajb macro A,var,dest
sub A,var
jnc dest ;C=0 有借位
endm
;---- cjae A,var,dest 若>=var, jmp 3bytes
; var 可以是数据存储器,也可以是立即数
; used STATUS,影响标志位等
ajae macro A,var,dest
sub A,var
jc dest ;C=1 没有借位
endm
;---- cjb data,var,dest 若data<var, jmp 4bytes
; var 可以是数据存储器,也可以是立即数
; used STATUS,影响标志位等
cjb macro data,var,dest
mov A,data
sub A,var
jnc dest ;C=0 有借位
endm
;---- cjae data,var,dest 若data>=var, jmp 4bytes
; var 可以是数据存储器,也可以是立即数
; used STATUS,影响标志位等
cjae macro data,var,dest
mov A,data
sub A,var
jc dest ;C=1 没有借位
endm
;---- cjne data,var,dest 若data!=var, jmp 4bytes
; var 可以是数据存储器,也可以是立即数
; used ACC,STATUS
cjne macro data,var,dest
mov A,data
ajne A,var,dest
endm
;---- cje data,var,dest 若data!=var, jmp 4bytes
; var 可以是数据存储器,也可以是立即数
; used ACC,STATUS
cje macro data,var,dest
mov A,data
aje A,var,dest
endm
;---- ajne A,var,dest 若A!=var, jmp 2bytes
; var 可以是数据存储器,也可以是立即数
; used STATUS,影响标志位等
ajne macro A,var,dest
sub A,var
jnz dest
endm
;---- aje A,var,dest 若A!=var, jmp 4bytes
; var 可以是数据存储器,也可以是立即数
; used null
aje macro A,var,dest
sub A,var
jz dest
endm
;---- store value,var 存value to var
; value & var can't be ACC
; used ACC
store macro value,var
mov A,value
mov var,A
endm
;---- load dest,src [src]-->[dest]
; dest & src can't be ACC
; used ACC
load macro dest,src
mov A,src
mov dest,A
endm
;--- getptr rl,rh,var
; used ACC
getptr1 macro rl,rh,var
store low (var),rl
if (var) and 0ff00h
store high (var),rh
else
clr rh
endif
endm
;--- putc 显示一字符
putc macro var
mov A,var
call _PutCh
endm
;--- cdw 两数组合为一16为数
cdw macro ch,cl
dw ch*256+cl
endm
;--------------------------------------------------------------
; 根据不同显示器,调用不同软件
;-------------------------------------------------------------
;--- LCDset 点亮假汉显某一段汉字
jhxset macro var
if mLCDjhx
set var
endif
endm
;--- LCDclr 灭假汉显某一段汉字
jhxclr macro var
if mLCDjhx
clr var
endif
endm
;--- iconst 设置宽屏汉显汉字字段控制字
iconst macro value,var
if mLCDwide
store value,var
endif
endm
Bcall macro addr
jmp addr
endm
BReturn macro
jmp Return_B
endm
Ccall macro addr
jmp addr
endm
CReturn macro
jmp Return_C
endm
.LIST
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -