Zahlen wandeln 3x16bit -> 4x12bit

OP (Firma: BfEHS) #2423334
Lesenswert?

Hallo uC-Gemeinde,

ich habe in einem laufenden Projekt eine Herausforderung.
Das Protokoll einer Datenübertragung muss geändert/erweitert werden.
Ich habe allerdings im uC nicht mehr viel Platz und suche deshalb einen 
kleinen ASM-Code.

Umwandlung von 3 x 16 Bit Zahlen in 4 x 12 Bit Zahlen und umgekehrt.
Die Datenübertragung von 3 x 16 Bit ist festgelegt.

 F                 0 F                 0 F                 0
+-------------------+-------------------+-------------------+
|        Old1       |        Old2       |        Old3       |
+---------+---------+---------+---------+---------+---------+
|  HWord  |  LWord  |  HWord  |  LWord  |  HWord  |  LWord  |
+----+----+----+----+----+----+----+----+----+----+----+----+
|    |    |    |    |    |    |    |    |    |    |    |    |
+----+----+----+----+----+----+----+----+----+----+----+----+

 C            0 C            0 C            0 C            0
+--------------+--------------+--------------+--------------+
|     New1     |     New2     |     New3     |     New4     |
+--------------+--------------+--------------+--------------+

Für eine Richtung müsste es so funktionieren:
Old1_HWord = New1 >> 4
Old1_LWord = ((New1 & 0x00F) << 4) + (New2 >> 8)
Old2_HWord = New2 & 0x0FF
Old2_LWord = New3 >> 4
Old3_HWord = ((New3 & 0x00F) << 4) + (New3 >> 8)
Old3_LWord = New4 & 0x0FF

Plattform ASM MCS51/MCS52. Optimiert nach Codegrösse. Geschwindigkeit 
sekundär.

Frage:
- Ist das so richtig?
- Geht das in ASM für MCS51/52 kleiner/einfacher
- Wie sieht das in der entgegengesetzten Richtung aus

Vielen Dank für eure Ideen und Vorschläge,
Grüsse aus dem kalten Berlin
Rene
Gast #2423440
Lesenswert?

Hallo,

vielleicht ein kleiner Tipp von mir wenn du es vor hast im Assembler 
umzusetzen: statt 4-mal verschieben würde ich den swap-Befehl verwenden 
der die Nibbles eines Bytes vertauscht, damit wird der gesamtcode auch 
kürzer.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren