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
Rene Schube schrieb: > - Wie sieht das in der entgegengesetzten Richtung aus Die andere Richtung sieht ähnlich aus (ist aber ungetestet):
1 | |
2 | |
3 | |
4 | |
Danke für die schnelle Rückmeldung. Ich werde mich mal dran setzten und das in ASM austesten.
Gast
#2423440
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.
Danke, das habe ich schon im Hinterkopf. Ich frimmel den ASM-Code zusammen und stelle den dann hier rein...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.