Gast
#3069950
Hi Ich schaffe es nicht mein eigenes Programm für avrgas zu übersetzen. Kann mir jemand diese Assembler-Zeile übersetzen?
1 | |
Meine Ideeen bisher:
1 | |
2 | |
|
Anzeige
|
lo8 hi8 verschachteln
Gast
#3069950
Hi Ich schaffe es nicht mein eigenes Programm für avrgas zu übersetzen. Kann mir jemand diese Assembler-Zeile übersetzen?
Meine Ideeen bisher:
Was soll's denn werden? Du kannst nicht beliebig komplizierte Ausdrücke mit lo8, hi8 etc bilden, weil es auch entsprechende RELOCs dafür geben muss.
Gast
#3069994
Ich möchte zu dem Z-Pointer ein Offsets addieren. Bei ZH zusätzlich eine Konstante abziehen. Mit 2 Befehlen wäre es natürlich machbar. Andererseits müsste das doch irgendwie gehen. Ich versteh immer noch nicht was das werden soll. Im lo-Teil wird ein hi-Teil subtrahiert? Und das wird vom hi-Teil der Adresse subtrahiert? Konfus...
Gast
#3070035
Das hier kann er schon vollständig parsen, allerdings ist der Ausdruck immer noch zu komplex. Dar rumwirbeln mit diesen Ausdrücken bringt doch nix. Becshreib mal was du machen willst und was die Objecte sind. Oder schreib's in C auf wenns C kannst.
Gast
#3070064
Das was ich in Assembler gemacht habe ist eine einfache Flash-Optimierung. Der Z-Pointer soll auf eine Tabelle zeigen. Dazu muss ein 8bit Offset addiert werden. Einfachste Möglichkeit:
Wenn man jetzt jedoch einer der beiden Schritte in einem Befehl (movw) machen kann spart man ein Befehl. Das geht in meinem Fall, obwohl es nur ein 8bit Offset ist. Das Register darüber enthält nämlich einen konstanten Wert. Dieser muss dann aber wieder abgezogen werden.
Ich hoffe du kannst damit etwas anfangen. Das wäre in C schwer darzustellen gewesen. Hier geht es zwar nur um ein Word, allerdings stört es mich, dass es nicht möglich scheint einen halbkomplexen Ausdruck mit avrgas zu verwenden.
Gast
#3070065
@Johann Für mich sieht das stark nach Assembler aus und nicht nach "C". Auch wenn ich keine Ahnung habe was "Fallobst" bezweckt. @Fallobst Um den Nebel zu lüften: Sende doch mal die Referenzen im Code. Mit ist schon klar daß es um Assembler geht. Es ging nur um eine Formulierung in C. Warum lädst du r21 mit VRAM_TILES_H wenn es später wieder abgezogen werden soll? Ergo: Einfach den hi-Teil von offset wie 0 behandeln:
Bei f2 braucht man ein Register das 0 enthält wie zB R1 gemäß avr-gcc ABI.
Gast
#3070119
Das man das so machen kann ist mir klar. In meiner ursprünglichen Implementierung habe ich jedoch durch den movw Befehl ein Word Flash gespart. Wenn ich keine Möglichkeit finde, werde ich ein Befehl hinzufügen müssen.
Gast
#3070120
Johann L. schrieb: > Warum lädst du r21 mit VRAM_TILES_H wenn es später wieder abgezogen > werden soll? Das wird worher im Programm geladen, weil es für eine Multiplikation gebraucht wird.
Gast
#3070146
Das funktioniert. Aber eigentlich bin ich von den Fähigkeitend des avrgas entäuscht.
Gast
#3070148
Es muss natürlich hi8 heißen:
Na dann nimm einen anderen Assembler wenn avr-as nicht genug bietet.
Gast
#3070427
Fallobst schrieb: > In meiner ursprünglichen > Implementierung habe ich jedoch durch den movw Befehl ein Word Flash > gespart. Dazu fällt mir nur das hier ein: >"Assembler ist eine Methode, Programme die zu langsam laufen so >umzuschreiben, dass sie überhaupt nicht mehr laufen" ;-) (Eclipse, C, Laufzeitanalyse Kurzanleitung von Boris Budweg) In diesem Sinne... Oliver Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|