@asembler
Jaka jest precyzja tego dzielenia ?, ile miejsc po przecinku,
bo w precyzji do liczb dziesiętnych to tak jak w pierwszym pisałem poście, zrobiłem taki paskudny kod, a przydało by mi się chociaż 1, 2 miejsca po przecinku:
; L R
;Compare R12,R13,R14,R15 && R16,R17,R18,R19
Cp_R12R19_32b:
cp R15, R19
breq cp32r_same3
brlo cp32r_rg
rjmp cp32r_lg
cp32r_same3:
cp R14, R18
breq cp32r_same2
brlo cp32r_rg
rjmp cp32r_lg
cp32r_same2:
cp R13, R17
breq cp32r_same1
brlo cp32r_rg
rjmp cp32r_lg
cp32r_same1:
cp R12, R16
breq cp32r_same
brlo cp32r_rg
rjmp cp32r_lg
cp32r_same:
sez ;Z = 1
rjmp cp32r_end
cp32r_rg:
clz ;Z = 0
sec ;C = 1
rjmp cp32r_end
cp32r_lg:
clz ;Z = 0
clc ;C = 0
cp32r_end:
ret
;-------------- CP END
;-------------- ADD START
; R L
;Add L to R R16,R17,R18,R19 && R20,R21,R22,R23
Add_32b:
add R16, R20
adc R17, R21
adc R18, R22
adc R19, R23
brcc NoOverflowAdd32b
sev
rcall Add_32b_end
NoOverflowAdd32b:
clv
Add_32b_end:
ret
;-------------- ADD END
;-------------- DIV START
;result in R0
Div_32b:
clr R0 ;counter
loopDiv32b:
rcall Cp_R12R19_32b
breq div32vs_eq
brcs div32vs_rg
inc R0
rcall Add_32b
rjmp loopDiv32b
div32vs_eq:
inc R0
div32vs_rg:
ret
;-------------- DIV END