GPIO 发表于 2018-11-6 10:12:20

C51汇编实现16位数值的乘法运算 32位积 R0~R3寄存器存放计算结果 不影响任何标志位


;AA55*4D5A=337772E2
MOV R0,#0AAH
MOV R1,#055H       

MOV R2,#04DH       
MOV R3,#05AH       


CALL MUL_16
;R0:33 R1:77 R2:72 R3:E2
JMP $
        ;----------------16位乘法(32位乘积)----------------
        ;输入:R0:被乘数高8位 R1:被乘数低8位 R2:乘数高8位 R3:乘数低8位
        ;输出:R0~R3 (R0为高字节,不影响任何标志位)
        MUL_16:

        PUSH 4
        PUSH ACC
        PUSH B
        PUSH PSW
        MOV A,R0
        MOV B,R2
        MUL AB
        XCH A,R0
        XCH A,B
        XCH A,R0
        XCH A,R1
        MOV 4,A
        MOV A,R3
        MUL AB
        XCH A,R2
        XCH A,B
        ADD A,R1
        MOV R1,A
        CLR A
        ADDC A,R0
        MOV R0,A
        MOV A,4
        MUL AB
        ADD A,R2
        XCH A,4
        XCH A,B
        ADDC A,R1
        MOV R1,A
        CLR A
        ADDC A,R0
        MOV R0,A
        MOV A,R3
        MUL AB
        MOV R3,A
        MOV A,B
        ADD A,4
        MOV R2,A
        CLR A
        ADDC A,R1
        MOV R1,A
        CLR A
        ADDC A,R0
        MOV R0,A
        POP PSW
        POP B
        POP ACC
        POP 4
        RET

END

1心1亿 发表于 2018-11-6 12:31:46

谢谢分享
页: [1]
查看完整版本: C51汇编实现16位数值的乘法运算 32位积 R0~R3寄存器存放计算结果 不影响任何标志位