PIC Assembler : #define in header und main

Gast #3232300
Lesenswert?

Hallo,

ich habe hier ein kleines Programm, das in Assembler geschrieben ist.
In der Header Datei steht  #define STAT PORTB,5
und in der source File also der main steht nochmals #define OUT PORTB,5.
Wie ihr seht ist mein PORTB,5 nun mit zwei verschiedenen Variablen 
belegt.
Das Programm lässt sich aber ohne Probleme kompalieren. Welche Variabel 
wird denn nun auf den PORTB,5 sozusagen übertragen ? Oder kann ich nun 
beides anstatt PORTB,5 schreiben ?
#3232376
Lesenswert?

exone schrieb:
> Hallo,
>
> ich habe hier ein kleines Programm, das in Assembler geschrieben ist.

Sicher?
#define ist ein Begriff aus der C Welt. Allerdings spricht auch nichts 
dagegen, dass der Erfinder deines Assemblers die Syntax übernommen hat

> In der Header Datei steht  #define STAT PORTB,5

Schön.
Wenn ich mal C-Regeln anwende, dann steht da:
überall dort, wo in weiterer Folge der Text 'STAT' auftaucht, ersetze 
den Text 'STAT' mit dem Text 'PORTB,5'

> und in der source File also der main steht nochmals #define OUT PORTB,5.

OK.
Also noch eine Vereinbarung:
Überall, wo in weiterer Folge der Text 'OUT' auftaucht, ersetzte den 
Text 'OUT' durch den Text 'PORTB,5'

> Wie ihr seht ist mein PORTB,5 nun mit zwei verschiedenen Variablen
> belegt.

Nö.
#define vereinbart einfach nur Textersetzungen. So wie du in deinem 
Editor einen Menüpunkt hast 'Text suchen und ersetzen'. Ein #define ist 
im Grunde nicht viel mehr, nur dass trickreicherweise die 
Textersetzungsoperation in den Text selbst eingebettet ist.
Mit Variablen hat das alles überhaupt nichts zu tun.

> Das Programm lässt sich aber ohne Probleme kompalieren. Welche Variabel
> wird denn nun auf den PORTB,5 sozusagen übertragen ?

Da wird überhaupt nichts 'übertragen'.
Du kannst ja auch zu deiner Freundin Anita 'Schatzi' und wahlweise 
'Hasi' sagen
1
#define SCHATZI  Anita
2
#define HASI     Anita
Die 'Prozessorin', die eine von dir gemachte Wortspende bearbeitet, 
ersetzt dann intern für sich jedes 'SCHATZI' mit 'Anita' und auch jedes 
'HASI' mit 'Anita' ehe dann der Bearbeitungsprozess losgeht, der einem 
'SCHATZI hol bitte Bier' eine Bedeutung zuweist. Zuerst wird die 
Textersetzung gemacht, durch die SCHATZI durch Anita ersetzt wird, 
wodurch aus dem von dir abgegebenem Satz ein 'Anita hol bitte Bier 
wird'. Und erst dann entscheidet die Bearbeiterin, ob der Satz Sinn 
ergibt und was damit zu machen ist.
Gast #3233144
Lesenswert?

Hallo exone,
Dass es ganz klar rüberkommt: mit #define kannst Du Deinen Assemblercode 
viel besser lesbar machen!
Z.B. "bsf PORTB,5" oder "bcf PORTB,5" sagt zunächst nicht sonderlich 
viel über die dahinter verborgene Funktion des Befehls aus. Sobald Du 
aber am Beginn Deines Programms dies einfügst:
1
#define LED_EIN    bsf PORTB,5
2
#define LED_AUS    bcf PORTB,5
brauchst Du z.B im nachfolgenden Code nur noch zu schreiben
1
LED_EIN 
2
LED_AUS
Die Ersetzung der Label mit Assemblercode "bsf PORTB,5" oder "bcf 
PORTB,5" erfolgt dann wie vom Karl Heinz beschrieben beim assemblieren. 
Du weißt auch noch nach Jahren auf den ersten Blick in den Quellcode 
(das *.ASM-File) was Du damals beim programmieren verwirklicht/gedacht 
hast.

mfG GroberKlotz

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