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]