Hier ein Vorschlag, wie man die Aufgabenstellung Zeit- und Code-sparend in ASM lösen könnte mit einem Beispiel zum Testen der Funktion.
Code:Dim X1 as Byte, X2 as Byte ' Zum Testen Declare Function ByteReverse (InByte as Byte) as Byte ' Test für alle Byte-Werte ( 0 - 255) for x1 = 0 to 255 x2 = ByteReverse(x1) print bin(x1); " " ; bin(x2) next end Function ByteReverse (InByte as Byte) as Byte $ASM Loadadr InByte, Z ' SRAM-Adresse des Input-Bytes in Z-Pointer ld r24, Z ' Input in CPU-Register r24 laden ldi r23, 8 ' 8 Bit zum schieben ByteReverse1: lsl r24 ' Bit nach links ins Carry schieben ror r25 ' Carry nach Rechts in Output schieben dec r23 brne ByteReverse1 ' letztes Bit erreicht loadadr ByteReverse, Z st Z, r25 ' Byte in Rückgabevariable abspeichern $End ASM End Function
Das Byte kann mit Übergabe in die deklarierte Funktion ByteReverse (wie schon in einem vorigen Post vorgeschlagen) umgedrehrt werden







Zitieren

Lesezeichen