PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabelle in Assembler (ATMega163) Opcode Error



nablahero
21.12.2011, 15:07
Hallo

Ich versuche gerade ein Lockup-Table in Assembler zu realisieren. Mein Ansatz ist so:



.include "m163def.inc"

Table:
.dw $0C, $05, $06, $0B, $09, $00, $0A, $0D, $03, $0E, $0F, $08, $04, $07, $01, $02


Allerdings bekomme ich dann den Error:


AVR Simulator: Invalid opcode 0x000a at address 0x000006

Weiß jemand was ich falsch mache? Ich dachte die Tabelle würde nun einfach in den SRAM geschrieben werden und ich könnte dann dort auf diese zugreifen, aber anscheinend kann ich diese nicht problemlos hineinschreiben.

Ich freu mich falls mir jemand Tipps geben kann

nablahero

PicNick
21.12.2011, 15:31
Wenn das da oben dein komplettes programm ist (?) isses klar:
Der Simulator glaubt, deine Werte seinen AVR-Instructions. Immerhin, bis $0a kommt er, dann fehlt ihm der Plan.

"Table" u. ".dw" schreibt der Kompiler in den Programmspeicher. Damit er nicht das ob. Problem hat, musst du drüberspringen z.b.


.include "m163def.inc"
jmp Next

Table:
.dw $0C, $05, $06, $0B, $09, $00, $0A, $0D, $03, $0E, $0F, $08, $04, $07, $01, $02

Next:

nablahero
21.12.2011, 16:19
Vielen Dank, das klappt nun. Ich wusste nicht das ich das überspringen muss. :)

PICture
21.12.2011, 16:40
Hallo!

Man könnte das ünnötige Überspringen vermeinden, wenn alle Tabellen am Ende des Quelcodes von ausführbaren Teil des Programms plaziert werden (z.B. mit "org" Direktive). ;)