;---------------------------------------------------------------
;该过程实现一个无符号的十六位二进制数与一个八位二进制数相乘
;输入:
;被乘数:
; R1(字节1),R2(字节2),R3(字节3),R4(低位字节)
;乘数:
; R6(字节1),R7(字节2),R8(字节3),R9(低位字节)
;输出乘积值:
; R12(字节1),R13(字节2),R14(字节3),R15(低位字节)
;本例中被乘数仅用到: R3,R4
;本例中乘数仅用到: R9
;本例中乘积仅用到: R13,R14,R15
;另外: R0 被用作计算时被乘数临时最高位字节
; R10 被用作计算时计算时的循环计数器(8)
;------------------------
;注: 在宏中出现的所有标号均被自动处理成局域标号
UMUL1608_MACRO: MACRO
;-----------------------
PUSH R10
PUSH R0
CLR R0 ;R2用作临时被乘数高位字节
CLR R13 ;清乘积值为0
CLR R14
CLR R15
;检测乘数值,如果为零,则直接退出
CP R9,#00H
JR EQ,_BACK
;-----------------
CP R4,#00H
JR NE,_START
CP R3,#00H
JR NE,_START
JR _BACK
;-----------------
_START:
LD R10,#08H
_LOOP:
RCF
RRC R9 ;右移乘数值一位,并检测该位状态
JR NC,_SHF
;如果乘数当前位=1,则加乘积值
ADD R15,R4
ADC R14,R3
ADC R13,R0
_SHF:
RCF ;首先必须清C=0
RLC R4
RLC R3
RLC R0
DEC R10
JR NZ,_LOOP
;8次循环完毕,则完成退出
_BACK:
POP R0
POP R10
;------------------
.ENDM
;--------------------------------------------------