最新三星单片机应用

实现一个无符号16位数与一个8位数相乘的宏

发布时间:2010.10.13 新闻来源:展亨科技(香港)有限公司/深圳市展亨隆电子有限公司 浏览次数:

;---------------------------------------------------------------
;该过程实现一个无符号的十六位二进制数与一个八位二进制数相乘
;输入:
;被乘数:
; 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
;--------------------------------------------------

单片机开发工具
单片机编程器
ARM开发工具
C编译器
联系方式
三星单片机:

ic168@zh-ic.COM

开发工具:

B6078S@163.com

网站相关建议:

zh-ic@163.com

客户服务
 MSN咨询