Ich habe mich jetzt neu eingearbeitet in Assembler, da ich das für die Firma brauche. Ich bin neulich auf die Makros gestoßen und habe festgestellt, dass das Makro .equ sehr oft verwendet wird, jetzt habe ich mich näher damit beschäftigt und habe folgende Beschreibung gefunden: .EQU: Defines a symbol and sets its value (later changes of this value remain possible, syntax: .EQU test = 1234567, internal storage of the value is 4-byte- Integer) Heißt das, dass ich hier 4Bytes reinschreiben kann? kann ich auch nur zB 1 Byte verwenden und dann auf Ports ausgeben oder müssen es 4 Byte sein? Gibt es für jedes .equ im Programm 4 Byte? Wenn ja, kann man damit den Speicher vollschreiben? Und dann habe ich auch gesehen, dass man IF Bedingungen stellen kann. Und darunter steht dann, dass alle Makros in Wirklichkeit keinen Code produzieren, was soll das eigentlich heißen? Heißt das, ich kann kein Programm oder ein Problem mit Makros lösen? Grüße Peter
Schreibst du .EQU test = 1234 wird überall im restlichen Programm, wo test vorkommt, dieses vom Assembler durch 1234 ersetzt. Damit wird auch kein Programmcode im eigentlichen Sinne erzeugt. D.h. du kannst da theoretisch reinschreiben, was du willst, es müssen keine 4 Byte sein. grüssse w.
.equ ist kein Macro, sondern eine Assembler-Direktive. Es weist einem Symbol einen Wert zu. Später kannst Du statt dieses Wertes das Symbol hinschreiben. Es erzeugt keinen Code, also kannst Du damit auch nicht den Speicher vollschreiben.
Hi >Und dann habe ich auch gesehen, dass man IF Bedingungen stellen kann. Ja. >Und darunter steht dann, dass alle Makros in Wirklichkeit keinen Code >produzieren, was soll das eigentlich heißen? Heißt das, ich kann kein >Programm oder ein Problem mit Makros lösen? Selbsverständlich erzeugen Makros Code. Wenn sie benutzt werden. Das Schreiben eines Makros erzeugt allerdings noch keinen Code. MfG Spess
Was das IF anbelangt: damit erzeugst Du nicht im späteren Code eine Wenn-Bedingung. Sondern es ist ebenfalls eine Direktive, diesmal zur bedingten Assemblierung. Hiermit bestimmst Du zur Assemblierzeit, was von deinem Quellcode berücksichtigt wird. Eine Beispielanwendung wäre: Du hast ein Programm, von dem es zwei Versionen geben soll. einmal soll es auf dem Display ausgeben und einmal auf der seriellen Schnittstelle. Du möchtest also aus demselben Quellcode zwei verschiedene Object-Codes erzeugen können. Oder dasselbe Programm soll auf zwei oder mehr verschiedenen µC derselben Familie laufen. Die Teile, die unterschiedlich sind, kapselst Du in IF-Direktiven ein. Vor dem Übersetzen musst Du dann nur ein .equ ändern, und schon wird die gewünschte Version erzeugt. Übrigens: Die IF-Syntax ist (wie die von equ) zwischen den verschiedenen Assemblern unterschiedlich. Es muss nicht mal beides vorhanden sein.
Aber was hat das für einen Sinn wenn ich .equ TT = 6597 hinschreibe, wenn der Prozessor nur ein 8 Bit Prozessor ist und mehr als 8 Bit nur über 2 Register gehen?
Hi >Aber was hat das für einen Sinn wenn ich .equ TT = 6597 hinschreibe, >wenn der Prozessor nur ein 8 Bit Prozessor ist und mehr als 8 Bit nur >über 2 Register gehen? Beispiel:
1 | .equ TT = 6597 |
2 | |
3 | ldi XL, Low(TT) |
4 | ldi XH,High(TT) |
MfG Spess
Es kommt durchaus häufig vor, dass mal Zahlen hat, die größer als 255 sind und denen man einen aufschlussreichen Namen geben will. Natürlich kannst Du die nicht in ein einziges Register schreiben. Aber der Assembler verfügt über genügend mathematischen Funktionen, um sie sich später so zurecht zu biegen wie man sie braucht, z.B. um sie in High und Low Byte aufzuteilen.
Hc Zimmerer schrieb: > Eine Beispielanwendung wäre: Du hast ein Programm, von dem es zwei > Versionen geben soll. einmal soll es auf dem Display ausgeben und > einmal auf der seriellen Schnittstelle. Du möchtest also aus demselben > Quellcode zwei verschiedene Object-Codes erzeugen können. Oder dasselbe > Programm soll auf zwei oder mehr verschiedenen µC derselben Familie > laufen. > > Die Teile, die unterschiedlich sind, kapselst Du in IF-Direktiven ein. > Vor dem Übersetzen musst Du dann nur ein .equ ändern, und schon wird die > gewünschte Version erzeugt. Wenn ich jedoch alle Programme in einem File schreibe, dann wird doch das ganze erst recht unübersichtlich oder? Dann hätte ich zB: .equ Version = Wert .if Version = 1 //Progamm Version 1 . . . .endif .if Version = 2 //Progamm Version 2 . . . .endif Dann habe ich 2 Versionen in einem Programm. PS: Danke für die bisherigen guten Tipps! Grüße Peter
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.