;点击这里直接下载该示例源码
;--------------------------------------------------
;该宏实现两个无符号的八位二进制数相乘
;输入:
;被乘数:
; R1(字节1),R2(字节2),R3(字节3),R4(低位字节)
;乘数:
; R6(字节1),R7(字节2),R8(字节3),R9(低位字节)
;输出乘积值:
; R12(字节1),R13(字节2),R14(字节3),R15(低位字节)
;本例中被乘数仅用到: R4
;本例中乘数仅用到: R9
;本例中乘积仅用到: R14,R15
;另外: R0 被用作计算时被乘数临时最高位字节
; R10 被用作计算时计算时的循环计数器(8)
;-------------------------
UMUL0808_MACRO: MACRO
;--------------------------
PUSH R0
PUSH R10
CLR R0 ;R3用作临时被乘数高位字节
CLR R14
CLR R15
;检测乘数值,如果为零,则直接退出
CP R9,#00H
JR EQ,_BACK
;---------------
CP R4,#00H
JR EQ,_BACK
;---------------
LD R10,#08H
_LOOP:
RCF
RRC R9 ;右移乘数值一位,并检测该位状态
JR NC,_SHF ;如果该位=0,则转
;如果乘数当前位=1,则加乘积值
ADD R15,R4
ADC R14,R0
_SHF:
;然后将被乘数左移一位
RCF ;首先必须清C=0
RLC R4
RLC R0
DEC R10
JR NZ,_LOOP
_BACK:
POP R10
POP R0
;--------------------
.ENDM
;--------------------------------------------------------- |
| 相关备注: |
无 |
|