Operand in Assembler Sprache

OP #3013475
Lesenswert?

Hy,

da meine erste Frage so schnell und echt klasse beantwortet wurde, das 
sie mir wirklich weitergeholfen hat, Hoffe ich das man mir nochmal auf 
die Sprünge helfen kann :)

Bin immernoch dabei mich mit Hilfe eines Lehrbuchs in Assembler 
einzuarbeiten, da ist jetzt im quelltext ein hochkanter strich "|" 
(Siehe bild) aber leider nirgens ne erklärung was da mit den beiden 
Variablen passiert, :-(

habe das ganze mal auf den ATmege gebrant und er macht auch das was er 
soll.


mfg
Theo
Angehängte Dateien:
#3013479
Lesenswert?

Das ist ein bitweises Oder und wird vom Assembler aufgelöst.

Du kannst ja auch schreiben

   ldi   r16,  2 + 3

und der Assembler rechnet 2+3 aus und erzeugt Code für

   ldi   r16, 5

Und hier ist es eben keine Addition, sondern ein bitweises Oder mit dem 
die beiden Konstanten zusammengeführt werden um zu bestimmen mit welchem 
Wert r16 geladen werden soll.

   TWINT   ist eine Konstante mit einem 1 Bit an einer Stelle
   TWEN    ist eine Konstante mit einem 1 Bit an einer anderen Stelle

die Veroderung ergibt dann ein Byte, in dem genau diese beiden 1 Bits 
gesetzt sind.


Und das nächste mal bitte kein Bild vom Code, sondern den Code in 
Textform. Dann kann man sich nämlich in der Antwort aus dem Original 
auch die Teile rauskopieren, die man zur Erklärung benötigt und muss 
nicht den halben Code neu tippen.
#3013486
Lesenswert?

Hi,

1. bitte Codeschnipsel anstatt als Bild direkt in die Nachricht mit den 
Code-TAGS [ c ] und [ /c ] einfügen.

2. Das "|" steht für eine bitweise ODER-Verknüpfung der beiden Werte, 
diese wird zur übersetzungszeit vom Assembler vorgenommen und die daraus 
resultierende Konstante dann in den Code geschrieben.

Aber das hättest Du mit Google auch leicht finden können, dritter 
Treffer bei der Suche nach "avr assembler operands":

http://support.atmel.com/knowledgebase/avrstudiohelp/mergedprojects/avrasm/Html/expressions.html

Solltest Du den gcc-as verwenden, musst Du mal einen Blick in dessen 
Manual werfen (aber die Basisoperatoren sind die gleichen).

Grüße
Markus

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