Forum: Mikrocontroller und Digitale Elektronik ASM-Anleitung


von Maxim B. (max182)


Lesenswert?

Guten Tag!
Könnt ihr mir bitte auf eine Anleitung für Assembler Hinweis geben?
Das Problem: wenn ich mit C zusammen Assembler als *.S File benutzen 
möchte, geht dort vieles nicht, was in AVR-Assembler von AVR Studio 
geht. Und ich finde nirgendwo eine Anleitung genau für diesen Fall. Mit 
Assembler in AVR Studio kein Problem: dort gibt es Help. Wenn ich aber 
Assembler-Anleitung für GCC suche, komme ich nur auf Inline-Assembler. 
Ich möchte aber besser jetzt Assembler von GCC für AVR kennenlernen. 
Beispiel auf http://www.nongnu.org/avr-libc/user-manual/assembler.html 
ist leider rudimentär.

Als Beispiel, was mit Assembler von GCC für AVR nicht klappt:
byte3(@0) in Macro
#define byte8(x) (x>>56)&0xff  - keine Wirkung.
usw.

Also, Anleitung für Assembler, welche als *.S mit C-Compiler 
funktioniert. Was ist dort möglich und was nicht.
Vielen Dank im voraus!

von Thomas Z. (usbman)


Lesenswert?

Maxim B. schrieb:
> #define byte8(x) (x>>56)&0xff  - keine Wirkung.

was soll den deiner meinung nach passieren bei einem 8Bit AVR

von Oliver S. (oliverso)


Lesenswert?

Maxim B. schrieb:
> Assembler in AVR Studio kein Problem: dort gibt es Help. Wenn ich aber
> Assembler-Anleitung für GCC suche, komme ich nur auf Inline-Assembler.

Dann suchst du falsch..

Der Assembler nennt sich Gas (für Gnu Assembler), und ist natürlich 
komplett dokumentiert.

https://sourceware.org/binutils/docs/as/

Die Eigenheiten, die beim Zugriff auf AVR-Register zu beachten sind, 
findest du dann in der Doku zur avrlibc.

Oliver

von Falk B. (falk)


Lesenswert?

Maxim B. schrieb:
> Guten Tag!
> Könnt ihr mir bitte auf eine Anleitung für Assembler Hinweis geben?
> Das Problem: wenn ich mit C zusammen Assembler als *.S File benutzen
> möchte, geht dort vieles nicht, was in AVR-Assembler von AVR Studio
> geht.

Stimmt nicht.

> Und ich finde nirgendwo eine Anleitung genau für diesen Fall.

https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Assembler_und_Inline-Assembler

https://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en591235

Mehr braucht es nicht. Man muss aber beachten, daß man dann mit dem gcc 
Assembler arbeitet, der hat teilweise leicht andere Syntax!

> byte3(@0) in Macro
> #define byte8(x) (x>>56)&0xff  - keine Wirkung.
> usw.

Beitrag "Re: Frage zu IR-Remote+LED-Strips an AVR"

Dort ist ein Makro drin, vielleicht hilft es für den Anfang.

von Maxim B. (max182)


Lesenswert?

Falk B. schrieb:
> 
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Assembler_und_Inline-Assembler

Das ist gerade was ich "rudimentär" nenne. Ein paar Beeispiele ohne 
systematisch zu gehen.

von Maxim B. (max182)


Lesenswert?

Thomas Z. schrieb:
> was soll den deiner meinung nach passieren bei einem 8Bit AVR

Mit Assembler aus AVR Studio funktioniert das wunderschön:
1
#ifndef temp
2
  #define temp  r24
3
#endif
4
5
#ifndef BYTE_H
6
  #define BYTE_H
7
  #define byte5(x) (x>>32)&0xff
8
  #define byte6(x) (x>>40)&0xff
9
  #define byte7(x) (x>>48)&0xff
10
  #define byte8(x) (x>>56)&0xff
11
#endif /* BYTE_H */
12
13
.macro outi    ; @0 Ziel, @1 Data, temp wird benutzt, 2-3c, 4-6b
14
  ldi temp, @1    ; 2-3c, 4-6b
15
  .if @0 < 0x40 
16
    out @0, temp
17
  .else
18
    sts @0, temp
19
  .endif
20
.endm
21
22
.macro outi64  ; @0 Ziel, @1 Data64, temp wird benutzt, 24c, 48b
23
  outi @0, low(@1)
24
  outi @0+1, high(@1)
25
  outi @0+2, byte3(@1)
26
  outi @0+3, byte4(@1)
27
  outi @0+4, byte5(@1)
28
  outi @0+5, byte6(@1)
29
  outi @0+6, byte7(@1)
30
  outi @0+7, byte8(@1)
31
.endm

von Maxim B. (max182)


Lesenswert?

Oliver S. schrieb:
> Der Assembler nennt sich Gas (für Gnu Assembler), und ist natürlich
> komplett dokumentiert.
>
> https://sourceware.org/binutils/docs/as/

Danke! Nun lese ich das alles.

von Hugo H. (hugo_hu)


Lesenswert?

Maxim B. schrieb:
> Das ist gerade was ich "rudimentär" nenne. Ein paar Beeispiele ohne
> systematisch zu gehen.

Warum machst Du Dich dann nicht an eine umfassende Beschreibung? Suche 
Dir halt alle Teile zusammen und baue etwas für die Nachwelt :-). Man 
wird es Dir sicher danken.

von Maxim B. (max182)


Lesenswert?

Hugo H. schrieb:
> Suche
> Dir halt alle Teile zusammen und baue etwas für die Nachwelt :-).

Das ist aber nicht mein Job. Ich bin ein Profi für andere Sachen. Wenn 
du mal eine Orgelfuge brauchst... Was aber Assembler und C betrifft, 
frage ich lieber bei klugen Menschen :)

Bisher habe ich z.B. nicht gefunden, wie ich byte3 und byte4 aus einer 
Konstante heraushole. Nur lo8(x)und hi8(x).

: Bearbeitet durch User
von Spess53 (Gast)


Lesenswert?

Hi

>Bisher habe ich z.B. nicht gefunden, wie ich byte3 und byte4 aus einer
>Konstante heraushole. Nur lo8(x)und hi8(x).

Im AVR-Assembler gibt es nur

       low(expression)  oder byte0(expression)
       high(expression) oder byte1(expression)
       byte2(expression)
       byte3(expression)

MfG spess

von Maxim B. (max182)


Lesenswert?

Spess53 schrieb:
> Hi
>
>>Bisher habe ich z.B. nicht gefunden, wie ich byte3 und byte4 aus einer
>>Konstante heraushole. Nur lo8(x)und hi8(x).
>
> Im AVR-Assembler gibt es nur
>
>        low(expression)  oder byte0(expression)
>        high(expression) oder byte1(expression)
>        byte2(expression)
>        byte3(expression)
>
> MfG spess

Und mit "Assembler von C" arbeitet byte3(expression) nicht. Auch 
Versuch, mit #define fehlende Möglichkeit zu schaffen, scheitert, 
während mit AVR-Assembler problemlos bis 8 bytes arbeitet, mehr leider 
nicht.

Dank Oliver S. schon einiges gefunden:
Äquivalente für byte3() und byte4() sind hh8 und hhi8.
D.h.
AVR Assembler    C Assembler
low               lo8
high              hi8
byte3             hh8
byte4             hhi8

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Maxim B. schrieb:
> Bisher habe ich z.B. nicht gefunden, wie ich byte3 und byte4 aus einer
> Konstante heraushole. Nur lo8(x)und hi8(x).

https://sourceware.org/binutils/docs/as/AVR_002dModifiers.html

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.