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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.