PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pointer verbiegen in Assembler



albundy
16.02.2005, 18:33
Hallo,
ich will mittels einer Variablen einen Pointer über die 256 Byte Grenze verschieben.

ldi r16,3 ;über die Variable in r16 soll der Pointer auf Text1,2 oder 3 zeigen

ldi Zh,High(Text?*2)
ldi Zl,Low(Text?*2)
Lpm r17,Z+
out Porta,r17

Text1: .db 0,0,0,0,... ;144 Byte
Text2: .db 0,0,0,0,... ;144 Byte
Text3: .db 0,0,0,0,... ;144 Byte

------------------------------------------------------------------

in Bascom würde ich einfach schreiben:
Restore Text1,2 oder 3 ->und damit ist der Pointer gesetzt
Read Wert
Porta=Wert

Aber wie geht das in Assembler ?
Kann mir einer helfen ? 8-[

JanB
16.02.2005, 18:57
Hallo,

Zeigerarithmetik !
schreib:

ldi r16,3
ldi ZH,HIGH(Textstart<<1)
ldi ZL, LOW(Textstart<<1)
ldi r0,144
mul r0,r16
add ZL,r0
adc ZH,r1
lpm r17,Z+
...

Textstart:
Text1: .db 0,0,0,0,... ;144 Byte
Text2: .db 0,0,0,0,... ;144 Byte
Text3: .db 0,0,0,0,... ;144 Byte
...


Oder wolltest du was anderes erreichen ?

Gruß Jan

albundy
16.02.2005, 19:23
Danke Jan,

Zeigerarithmetik !

sagt mir nicht viel, aber langsam komme ich hinter die Kniffe von Assembler.
Aber sag mal, das funktioniert doch nur mit r16 = 0,1 oder 2.
Mit r16 = 3 lande ich doch irgendwo im Nirwana.
Macht aber nix, ich hab das Prinzip verstanden.

JanB
16.02.2005, 19:38
sag mal, das funktioniert doch nur mit r16 = 0,1 oder 2.
Ich bin davon ausgegangen, das da noch mehr Texte kommen.

Text4....
Text5....
usw...

Wenn es nur 3 sind ?? OK.

Gruß Jan