PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zugriff auf Array mit Assembler



Ruppi
21.06.2007, 15:53
Hallo,
ich suche in Bascom eine Möglichkeit, auf ein Array an bestimmter Stelle zuzugreifen.
Das Array besteht aus Bytes und ist 65 Byte lang. Wie lade ich nun einen Wert des Arrays von X-beliebiger Stelle in ein Register? Es gibt ja die Möglicheit, mit "lds Register, {Variable}" den Wert in ein Register zu laden, das funktioniert jedoch nicht bei einem Array!
Kennt jemand eine Möglichkeit?

Ruppi

Dirk
21.06.2007, 17:09
Hallo Ruppi,

Wie lade ich nun einen Wert des Arrays von X-beliebiger Stelle in ein Register?

Ich habs noch nicht ausprobiert, aber würde es mit dem Z-Pointer versuchen:

Loadadr Variable , Z ; Pointer Für SRAM
Ld Register, Z + Konstante

Über Konstante kannst du dann ja alle Stellen des Arrays adressieren.

Oder?

Gruß Dirk

PicNick
21.06.2007, 19:21
Eine Möglichkeit


DIM Wert as byte
DIM index as byte
DIM array(65) as byte

index = 23
loadadr array(index) , X ' addresse nach X
$asm
LD r24, X ' tabellen wert nach R24
sts {Wert}, r24 ' speichern
$end asm


Ich muß nur sagen, daß Bascom bei


Wert = array(index)


auch nicht viel mehr macht, also wenn nicht weitere Tricks dazukommen, bringt's der Assembler da auch nicht wirklich

Ruppi
22.06.2007, 15:48
Hallo,
erstmal Danke euch beiden. PickNick, ich nutze zur Zeit dein erstes Beispiel, so weit war ich schon. Allerdings benötigt die Funktion "LoadAdr" relativ viele Takte. Ich dachte, ich könnte direkt aus einer bestimmten Speicherstelle laden. Ich hatte mir das in etwa so vorgestellt:
Lds R16, {&H60 + Offset}

Dann werde ich wohl bei meiner jetzigen Variante bleiben müssen. Trotzdem aber vielen Dank!

Ruppi