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 ?
Kauf Dir ein C-Buch, das den Präprozessor beschreibt. Dir fehlt wichtiges Grundlagenwissen. Das sind Präprozessormacros und keine Variablen.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.