Symbolnamen in gnu assembler

OP #4142639
Lesenswert?
• ▲
▼
Hallo zusammen,

da man bei mov r15,r12 und co. schnell die Übersicht verliert, verwende 
ich natürlich Aliasnamen. Die heissen bei gas wohl Symbole. Allerdings 
habe ich da ein Problem. Folgendes funktioniert nicht:

real = 16
inc real

jedoch

eal = 16
inc eal

geht ohne Probleme. Anscheinend mag gas es nicht, wenn ein Symbol mit r 
anfängt???? Welchen Hebel muss ich umlegen, damit mein Alphabet wieder 
26 Buchstaben hat? Danke.
Moderator #4143623
Lesenswert?
• ▲
▼
Die 'R's als Registerargumente sind tatsächlich reserviert, auch wenn
keine Nummer danach folgt.

Abhilfen:
- keine 'R's als Anfangsbuchstaben verwenden ;-)
- Underscore von dem 'R' (wie von Heinz vorgeschlagen)
- Die Ersetzung der Symbole nicht durch den Assembler selbst, sondern
  durch den Präprozessor vornehmen lassen, also bspw. mit
1
  #define real 16
- avr-as patchen (die Änderung sollte nicht allzu schwer fallen)
Moderator #4144174
Lesenswert?
• ▲
▼
Alles Quatsch in meinem letzten Beitrag :)

Dieser bezog sich auf die bis heute auf meinem Rechner installierte
veraltete Binutils-Version.

In den aktuellen Binutils (2.25) dürfen symbolische Registerargumente
auch mit 'R' beginnen. Außerdem kann man nun auch X, XL, XH, Y, YL, YH,
Z, ZL und ZH als Registerargumente verwenden, ohne diese Namen vorher
explizit definieren zu müssen.

Folgendes ist also legaler Code:
1
real = 16
2
inc real
3
inc zl
4
adiw x,23

Hier ist der zugehörige disassemblierte Binärcode:
1
   0:   03 95           inc     r16
2
   2:   e3 95           inc     r30
3
   4:   57 96           adiw    r26, 0x17       ; 23

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren