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
Lesezeichen