Forum: Compiler & IDEs Marco Assembler kennt keinen Befehl des Assembler Quelltextes


von Bitverschieber (Gast)


Lesenswert?

Hallo,

ich habe mir frisch OpenSuse als virtuelle Maschine installiert und über 
die Paketverwaltung den Macro Assembler sowie den avrdude installiert.

Wenn ich meine .asm Datei mit

asl NameDerDatei

kompiliere, scheint keine einzige Zeile zu funktionieren.

Assembliere RAM.asm
PASS 1
> > >RAM.asm(3): Fehler: unbekannter Befehl
> > >RAM.asm(4): Fehler: undefiniertes Attribut
> > >RAM.asm(17): Fehler: unbekannter Befehl

und dann geht es immer so weiter. In der Schule benutzen wir jedoch die 
gleichen Programme und da funktioniert alles. Hier der Anfang meines 
Quelltextes:
1
CPU ATMEGA8
2
INCLUDE attiny2313.inc
3
4
NUMBER0: EQU 0x3F
5
NUMBER1: EQU 0x06
6
NUMBER2: EQU 0x5B
7
NUMBER3: EQU 0x4F
8
(...)

Ist jemand ein Linux Experte und kann mir sagen, was fehlt? Google hilft 
leider gar nicht weiter. Muss ich irgendwie die Bibliotheken einbinden 
und wenn ja, wie?

von (prx) A. K. (prx)


Lesenswert?

Um welchen Makro-Assembler geht es und was ist "asl"?

Ihr verwendet in der Schule auch Linux und avrdude?

NB: Das sieht etwas gewagt aus:
  CPU ATMEGA8
  INCLUDE attiny2313.inc

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Bitverschieber schrieb:
>> > >RAM.asm(3): Fehler: unbekannter Befehl

Nur ist die dritte Zeile des gezeigten Quellcodes eine Leerzeile. Ganz 
sicher, dass das der richtige Quellcode ist?

von Bitverschieber (Gast)


Lesenswert?

Es geht um den Marco Assembler von Alfred Arnold und mit asl wird eine 
Programmdatei erzeugt schätze ich? Jedenfalls muss ich sie nachher zu 
einer Hex-Datei umformen und dann flashen.

In der Schule nutzen wir auch OpenSuse, den Marco Assembler und avrdude. 
Wir arbeiten auch da mit dem Attiny2313.

Das CPU ATMEGA8 soll ein Workaround sein, aber genau erklären kann ich 
das auch nicht mehr. Bin auch kein wirklicher Experte in diesem Gebiet, 
aber es funktioniert.

von Bitverschieber (Gast)


Lesenswert?

Ich habe den Kommentar und eine Leerzeile danach aus dem Code hier 
entfernt, deswegen müssten die Zeilennummern nach dem asl-Befehl 
eigentlich um zwei reduziert werden. Normalerweise fängt mein Code also 
mit einem Kommentar an, den ich hier weggelassen habe.

von (prx) A. K. (prx)


Lesenswert?

Du erwischst möglicherweise den falschen Assembler. Gleicher Name im 
Pfad beispielsweise. So steht "as" in Linux für den System-Assembler und 
wenn "asl" den an Stelle von Arnold erwischt, dann kommt sowas raus.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bitverschieber schrieb:
> Marco Assembler

Der hat nichts mit irgendeinem „Marco“ zu tun, sondern etwas mit
Makros : Anweisungen zur Textersetzung, um sich gelegentlich
Schreibaufwand zu sparen.

Ansonsten gibt es bei den Assemblern halt viele verschiedene
Variationen, was die Angabe der so genannten Pseudo-Befehle betrifft.
Nicht nur, dass sie zuweilen verschieden heißen (.db vs. .byte oder
sowas), sondern auch solche Dinge, wie ob vor dem „EQU“ ein
Gleichheitszeichen, ein Doppelpunkt oder gar nichts stehen muss,
sind da manchmal verschieden.

Daher wäre es wichtig, welche konkrete Assemblersyntax dein Quellcode
benutzt (und ggf. woher du ihn hast) und was dein Assembler eigentlich
haben will.

Ist „asl“ als Assembler gesetzt, oder darf es auch ein anderer sein?

: Bearbeitet durch Moderator
von Markus F. (mfro)


Lesenswert?

Bitverschieber schrieb:
> Hallo,
>
> ich habe mir frisch OpenSuse als virtuelle Maschine installiert und über
> die Paketverwaltung den Macro Assembler sowie den avrdude installiert.
>
> Wenn ich meine .asm Datei mit
>
> asl NameDerDatei
>
> kompiliere, scheint keine einzige Zeile zu funktionieren.
>
> Assembliere RAM.asm
> PASS 1
>> > >RAM.asm(3): Fehler: unbekannter Befehl
>> > >RAM.asm(4): Fehler: undefiniertes Attribut
>> > >RAM.asm(17): Fehler: unbekannter Befehl
>
> und dann geht es immer so weiter. In der Schule benutzen wir jedoch die
> gleichen Programme und da funktioniert alles. Hier der Anfang meines
> Quelltextes:
>
>
1
> CPU ATMEGA8
2
> INCLUDE attiny2313.inc
3
> 
4
> NUMBER0: EQU 0x3F
5
> NUMBER1: EQU 0x06
6
> NUMBER2: EQU 0x5B
7
> NUMBER3: EQU 0x4F
8
> (...)
9
>
>
> Ist jemand ein Linux Experte und kann mir sagen, was fehlt? Google hilft
> leider gar nicht weiter. Muss ich irgendwie die Bibliotheken einbinden
> und wenn ja, wie?

Ich glaube nicht, daß es dafür einen Linux-Experten braucht. Jemand, der 
das Handbuch lesen kann, ist m.E. völlig ausreichend.

In dem steht nämlich, daß der Assembler im AVR-Modus Hex-Konstanten 
nicht im C-, sondern nur im Intel-Format erlaubt (d.h. mit einem 
nachgestellten 'h').

Das Verhalten läßt sich mit RELAXED ON abstellen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Markus F. schrieb:
> Ich glaube nicht, daß es dafür einen Linux-Experten braucht. Jemand, der
> das Handbuch lesen kann, ist m.E. völlig ausreichend.
>
> In dem steht nämlich, daß der Assembler im AVR-Modus Hex-Konstanten
> nicht im C-, sondern nur im Intel-Format erlaubt (d.h. mit einem
> nachgestellten 'h').

In dem, das ich gerade aufgeschlagen habe (Version 1.42), sagt die
Tabelle 2.10, dass für Atmel der C-Modus benutzt wird. In diesem Modus
sind Konstanten wie 0x3F (hex), 077 (oktal) und 0b00111111 (binär)
legal.

Im Handbuch steht aber noch mehr, z.B. in Abschnitt 2.5:

1
Der Doppelpunkt nach dem Label ist optional, falls das Label in der
2
ersten Spalte beginnt (woraus folgt, daß der Befehl niemals in Spalte 1
3
beginnen darf).

Lass also einfach mal die Zeilen mit CPU und INCLUDE nicht in Spalte 1
beginnen, indem du ein oder mehrere Leerzeichen voranstellst. Das gilt
natürlich auch für alle weiteren Zeilen, die kein Label enthalten.

Beitrag #4995742 wurde von einem Moderator gelöscht.
Beitrag #4995743 wurde von einem Moderator gelöscht.
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
Noch kein Account? Hier anmelden.