Schnell ein Byte umdrehen

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 820
Registriert seit: Apr 2014
Bewertung: 5
#1
15.05.2021, 20:41

Hallo zusammen,

nach längerer Abstinenz mal wieder ein kleines Stückchen Assembler. Aktuell arbeite ich an einer SPI-Schnittstelle für meinen Z80Ardu (SPI kennt man ja von der AVR-Reihe und anderen Microcontrollern).

Das SPI-Protokoll benötigt, wenn ich das richtig interpretiere, auf der MOSI-Leitung (Master Out / Slave In) die Daten mit dem höchstwertigen Bit (MSB) zuerst. Wenn man aber Parallel-zu_Seriell Schieberegister wie das 74HC165 nutzt, kommt zuerst das niederwertigste Bit zuerst auf dem seriellen Ausgang an.

Also dreht man das Byte, bevor man es sendet, einfach um:

 
; Bit im Register A drehen
; 8 Bytes / 206 Takte
 
     ld b,8
     ld l,a
loop:
     rl l
     rra
     djnz loop
 
 

Das geht allerdings auch erheblich schneller. Zwar ist das Programm länger, aber für die höhere Geschwindigkeit ist das durchaus lohnenswert:

 
; 17 Byte, 66 Takte
                   ld l,a    ; a = 76543210
                   rlca
                   rlca      ; a = 54321076
                   xor l
                   and 0xAA
                   xor l     ; a = 56341270
                   ld l,a
                   rlca
                   rlca
                   rlca      ; a = 41270563
                   rrc l     ; l = 05634127
                   xor l
                   and 0x66
                   xor l     ; a = 01234567
 
-----

Sic mundus creatus est. https://www.dev-tronic.de/
(Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2021, 11:18 von Unilein.)
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste