Hallo Wie errechne ich die Anfangsadresse in einer Tabelle in ASM? Wenn ich z.B. aus der Tabelle unten Test5 auslesen will wie müßte man das in Asm machen? Vielen Dank MFG Tab: .db "test1","test2","tets3","test4","test5","test6"
Wenn die Daten immer die gleiche Länge haben, musst du einfach nur zu deiner Tabellen-Anfangsadresse die entsprechende Zahl hinzuaddieren. In diesem Fall: StartAdr + (Eintragslänge * Position). Bei unterschiedlichen Längen wirst du nicht ohne "Endezeichen" auskommen und die Tabelle entsprechend durchsuchen müssen.
Danke für die schnelle Antwort! Hast Du evt. ein ASM Beispiel? Ich bin noch Anfänger und müßte es erst mal sehen um es zu kapieren. Gruss Frank
Hallo, nur wenn das ganze nicht zur Laufzeit passieren soll: ldi ZL, LOW (Tab1Eint5 * 2) ldi ZH, HIGH(Tab1Eint5 * 2) Tab1: Tab1Eint1: .db "test1" Tab1Eint2: .db "test2" Tab1Eint3: .db "test3" Tab1Eint4: .db "test4" Tab1Eint5: .db "test5" Tab1Eint6: .db "test6" Tab2: ....... .... Gruß Topsoft
doch es soll in echtzeit gehen. Ich will dmit einem Drehgeber ein Menü machen. Drehgeber abfragen und entsprechend menünamen aus Tab holen. Was zählt denn alles zur Position beim Tab eintrg? z.B.: Tab: .db"a ", "b " wenn ich b haben will 3 Pos.???? Frank
.equ feld_laenge = 5 ; r16 übergabe nr des strings ausgabe_string: ldi zl, low(tab*2) ldi zh, high(tab*2) ldi r17, feld_laenge mul r16, r17 add zl, r0 adc zh, r1 schleife: lmp r16, z+ rcall zeichen_ausgabe dec r17 brne schleife ret Tab: .db "test1","test2","tets3","test4","test5","test6" ich hoffe, das is ohne Fehler.. musst halt mal ausprobieren.. braucht einen AVR mit Hardware-Multiplier. Das mit dem AVR habe ich jetzt einfach mal aus den vorigen Posts entnommen.
Hallo, das mit der Speicheraufteilung sollte der Anhang klären. Wieviele Menueeinträge werden das den? Auf welchem MC soll das ganze den laufen? Gruß Topsoft
Flexibler wäre es, das mit einer Sub-Tabelle zu machen, also Tabelleneinträge mit Unterprogramme welche dann noch Rechnen und verschiedenes Anzeigen können wie z. B. veränderliche Rechen- oder Messwerte: ; in zl übergabe nr der Menu-Sub MenuProg: clr zh lsl zl rol zh subi zl,low(-tab*2) sbci zh,high(-tab*2) lpm r16,z+ lpm r17,z movw zl,r16 ijmp Tab: .dw Menu1 .dw Menu2 .dw Menu3 .dw Menu4 .dw Menu5 .dw Menu6 Menu1: Rechne dieses... Zeige jenes an... ..... ret Menu2: ..... ret Menu3: ..... ret Menu4: ..... ret Menu5: ..... ret Menu6: ..... ret MfG Andi
Ähm... hier noch eine kürzere Version (7 statt 14 Takte): ; in zl übergabe nr der Menu-Sub MenuJump: clr zh subi zl,low(-tab) sbci zh,high(-tab) ijmp Tab: rjmp Menu1 rjmp Menu2 rjmp Menu3 rjmp Menu4 rjmp Menu5 rjmp Menu6 Die Tabelle besteht hier aus lauter RJMP (2 Byte (1 Word) je Eintrag), also dürfen die Menü-Programme nicht all zu weit weg sein (-2048 bis +2047 Words). MfG Andi
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.