实现两个无符号的8位二进制数相乘的宏(SAM88RCRI指令集)
文章来源: 本站原创   更新时间: 修改日期
;点击这里直接下载该示例源码
;--------------------------------------------------
;该宏实现两个无符号的八位二进制数相乘
;输入:
;被乘数:
; 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
;---------------------------------------------------------
相关备注:
 
三星单片机开发网首页