Binärt till BCD
Nu har jag samlat alla BIN till BCD konverterings rutiner på ett ställe (För Pic).
http://hem.bredband.net/b105170/forum/P ... _16bit.txt
http://hem.bredband.net/b105170/forum/P ... _16bit.txt
Bra jobbat måste jag säga! Har du sett den här, skulle kunna spara en 10-12 instruktioner:
http://www.piclist.com/techref/microchi ... b/16bb.htm
http://www.piclist.com/techref/microchi ... b/16bb.htm
Jag har ganska nyligen kommit underfund med att mitt gamla sätt att göra 16bit-add och 16bit-sub är fel (man får ingen korrekt carry ut)
Nu vet jag hur man ska göra, tackar!
Men du påstår att man även sparar instruktioner, det kan inte stämma.
Mitt gamla sätt (fel sätt):
Rätt sätt:
Jag kanske ska tillägga att alla BIN-BCD rutiner som jag länkade till fungerar även om jag har använt felaktiga sub:ar
Nu vet jag hur man ska göra, tackar!
Men du påstår att man även sparar instruktioner, det kan inte stämma.
Mitt gamla sätt (fel sätt):
Kod: Markera allt
movf Temp1,w
subwf L_byte,w
movwf Temp3
movf Temp2,w
btfss STATUS,C
addlw 1
subwf H_byte,w
Kod: Markera allt
movf Temp1,w
subwf L_byte,w
movwf Temp3
movf Temp2,w
btfss STATUS,C
incfsz Temp2,w
subwf H_byte,w
Jag tänkte på den här, har inte testat det dock...
Kod: Markera allt
movlw D'123'
subwf low,f
movlw D'45'
btfss STATUS,C
movlw D'46'
subwf high,f
rlf bcdreg,f
btfsc bcdreg,0
goto next
addwf high,f
movlw D'123'
addwf low,f
next
Det funkade fint det
Jag har testat med den komprimerade varianten av "din algoritm"
Programmet blev 1 instruktion kortare och 7 klockcycler snabbare.
Då är det bara att ändra på alla andra oxå.
EDIT:
Nu har jag optimerat klart.
Exempel12 blev 11 instruktioner kortare och 5 klockcycler snabbare.
Exempel14 blev 1 instruktion kortare och 7 klockcycler snabbare.
Exempel16 blev 1 instruktion kortare och 5 klockcycler snabbare.
Nu går det nog inte att pressa ut mer av den algoritmen.

Jag har testat med den komprimerade varianten av "din algoritm"
Programmet blev 1 instruktion kortare och 7 klockcycler snabbare.
Då är det bara att ändra på alla andra oxå.
EDIT:
Nu har jag optimerat klart.
Exempel12 blev 11 instruktioner kortare och 5 klockcycler snabbare.
Exempel14 blev 1 instruktion kortare och 7 klockcycler snabbare.
Exempel16 blev 1 instruktion kortare och 5 klockcycler snabbare.
Nu går det nog inte att pressa ut mer av den algoritmen.
Tror inte jag häller.
Sista jag tänkte på var att först kopiera dom 6 högsta bit:arna till ett eget tusenregister (32, 16, 8, 4, 2, 1K) , ta bort bit:arna och addera 'resten' (768,384,192,96,48,24) till dom två startregistren för att kompensera.
På så sätt skulle det bara vara kvar maximalt 2535 i dom två registren att räkna på. Fast då måste man på något smart sätt fläta in 'tusenregisteret' i resultatet.
Sista jag tänkte på var att först kopiera dom 6 högsta bit:arna till ett eget tusenregister (32, 16, 8, 4, 2, 1K) , ta bort bit:arna och addera 'resten' (768,384,192,96,48,24) till dom två startregistren för att kompensera.
På så sätt skulle det bara vara kvar maximalt 2535 i dom två registren att räkna på. Fast då måste man på något smart sätt fläta in 'tusenregisteret' i resultatet.