Gast
#932792
Hallo,
Ich will eine 16 Bit UINT in 4 Hexadezimale Asciizeichen umwandeln. Und
das ganze mit möglichst wenigen Takten.
Die normale Methode, die letzten 4 Bit abzufragen und mit if-Anweisungen
zu vergleichen dauert viel zu lange.
Desshalb meine Methode:
Ich habe eine Konstante
"constant unsigned int ASCII[256]={0x3030,0x3031,0x3031....0x4545}"
Das ist eine Tabelle , die alle Zeichenkombinationen für die Umwandlung
von 1Byte in 2Asciizeichen erlaubt.
Meine Konvertierung:
*Buffer_adr= ASCII[(char) *daten_adr];
Buffer_adr+=2; //Zieladresse um 2 erhöhen weil 2 ASCII Zeichen
daten_adr++; //Datenadresse um 1 erhöhen(nächstes Byte)
*Buffer_adr= ASCII[(char) *daten_adr];
Das sind 11+1+1+11=24 Takte.
Gehts es noch schneller? Gerade die 1.Zeile mit 11 Takten kann man doch
optimieren?
Denn was macht der Prozessor:
Schiebe Inhalt der Speicheradresse <ASCIIAdresse+Daten+Daten> in die
Speicheradresse <Buffer_adr>
Geht das schneller als in 11 Takten? Das ist doch nur 2xADD und einmal
MOV?