- 打卡等级:以坛为家I
- 打卡总天数:312
- 最近打卡:2025-03-11 13:20:13
荣誉版主
- 积分
- 5395
|
发表于 2024-1-26 08:03:00
|
显示全部楼层
优化了一下 模拟小数乘法, 感觉还行, 可重入函数, 占用 4级堆栈, 到时 样片到手, 测试对比一下与标准浮点库的速度之比.
// 模拟小数乘法 R0R1R2R3 * R4R5R6R7 --> R4R5R6R7
/* R2R3 * R6R7 --> R4R5R6R7 , R4R5 --> DPH1,DPL1
R2R3 * R4R5 --> R4R5R6R7_0_0 , R4R5R6R7 + DPH1,DPL1 --> DPH,B,DPH1,DPL1
R0R1 * R6R7 --> R4R5R6R7_0_0 , R4R5R6R7 + DPH,B,DPH1,DPL1 --> DPH1,DPL1
R0R1 * R4R5 --> R4R5R6R7_0_0_0_0 , R4R5R6R7 + DPH1,DPL1 --> R4R5R6R7
R4R5R6R7 规格化 --> R5R6R7,DPL1 , 指数DPL --> R4
*/
MOV B,R1
MOV DPH,R0
MOV A,R7
PUSH ACC
MOV A,R6
PUSH ACC
MOV A,R5
PUSH ACC
MOV A,R4
PUSH ACC
CLR A
MOV R0,A
MOV R1,A
MOV R4,A
MOV R5,A
// LCALL MUL32 // R2R3 * R6R7 --> R4R5R6R7
MOV DPH1,R4 // R4R5 --> DPH1,DPL1
MOV DPL1,R5
MOV R0,SP
MOV A,@R0
MOV R6,A
DEC R0
MOV A,@R0
MOV R7,A
CLR A
MOV R0,A
; MOV R1,A
MOV R4,A
MOV R5,A
// LCALL MUL32 // R2R3 * R4R5 --> R4R5R6R7
MOV R2,DPH1 // DPH1,DPL1 --> R0R1R2R3
MOV R3,DPL1
// LCALL ADD32 // R4R5R6R7 + DPH1,DPL1 --> DPH,B,DPH1,DPL1
MOV R2,DPH
MOV R3,B
MOV DPH,R4
MOV B,R5
MOV DPH1,R6
MOV DPL1,R7
MOV R0,SP
DEC R0
DEC R0
MOV A,@R0
MOV R6,A
DEC R0
MOV A,@R0
MOV R7,A
CLR A
MOV R0,A
; MOV R1,A
MOV R4,A
MOV R5,A
// LCALL MUL32 // R0R1 * R6R7 --> R4R5R6R7
MOV R0,DPH
MOV R1,B
XCH R2,DPH1 // 原 R2R3 --> DPH1,DPL1
XCH R3,DPL1
// LCALL ADD32 // R4R5R6R7 + DPH,B,DPH1,DPL1 --> DPH1,DPL1
XCH R6,DPH1 // DPH1,DPL1 --> R6R7(原R2R3)
XCH R7,DPL1
POP ACC
MOV R2,A
POP ACC
MOV R3,A
POP ACC
POP ACC
// LCALL MUL32 // R0R1 * R4R5 --> R4R5R6R7
// LCALL ADD32 // R4R5R6R7 + DPH1,DPL1 --> R4R5R6R7
// LCALL RSLA32 // R4R5R6R7 规格化 --> R5R6R7,DPL1 , 指数DPL --> R4
MOV C,F0 // 标准浮点数返回, 加入符号
MOV A,DPL
RRC A
XCH A,R4
MOV ACC.7,C
XCH A,R5
XCH A,R6
XCH A,R7
MOV DPL,A
RET
|
|