Archiv verlassen und diese Seite im Standarddesign anzeigen : Assembler: Sprünge ohne Labels
Unregistriert
21.06.2004, 18:52
Hallo,
weiss jemand, wie ich in Assembler die relative Sprungweite angeben kann, ohne ein Label zu verwenden?
Beispiel:
Label1:jnb invert,label2
cpl a
label2: ....
soll geändert werden in:
Label1:jnb invert,<Sprungweite>
cpl a
...
Hintergrund ist der, dass ich in einigen Routinen sehr viele solcher Konstrukte brauche, und vor lauter Labels wirds nun doch etwas unübersichtlich.
Weiss jemand, ob das geht.
Thx a lot
Irgendeiner
21.06.2004, 19:08
Is zwar keine Antwort auf deine Frage, aber ich empfehle dir, die Sprungmarken nicht mit 'label' zu bezeichnen, sondern sie sinnvoll zu benennen. zum beispiel wie folgt:
init_lcd:
...
...
init_keys:
...
...
delay_lcd:
...
...
loop_routine1:
...
...
loop_routine2:
...
...
usw.
jeder hat da so seinen eigenen stil. viele programmierer rücken den code auch dementsprechend ein (vom linken rand weg) damit man gleich sieht, wo die unterroutine beginnt und endet.
hi
ich dachte ein label sei eine erleichterung fuer den programmierer.du kannst natuerlich direkt auf eine (entsprechende) adresse springen...oder einfach nach aa01,aa02...az99....zz99.reicht das?Solange es fuer dich uebersichtlich ist/bleibt....OK...aber nach 12 Monaten hast du dann wahrscheinli viel zu raetseln.So wie ''Irgendeiner'' vorschlaegt finde ich es gut...sebstkommentierend..sonst geht es womoeglich ''Irgendwohin''......amen.
ed
Genau, ED, das ist ja der Sinn der modernen Programmieresprachen, dass man sich nicht mehr mit Berechnungen von Sprungweiten und Offsets herumschlagen muss. Warum also wieder Rückwärts?
Machs wie @Irgendeiner :rolleyes:
Na Mädels, wer hat denn da wieder geschlafen? Der 'Irgendeiner' sowieso und ihr macht es nach?!?!?!:p
Ich habe die Frage:
>>weiss jemand, wie ich in Assembler die relative Sprungweite angeben kann, ohne ein Label zu verwenden?
eher so verstanden, dass er die direkte Weite der Sprünge von -128 bis 127 angeben will?!?!?!
Ausserdem steht das Wort Label nur als Beispiel oder als Platzhalter. Ich glaube kaum dass jemand alle Sprünge mit Label1 bis Label(n) bezeichnet?!?!?
Das (n) steht für eine Zahl, aber nicht Rübezahl.
Leider habe ich aber bei Batronix nichts gefunden in dieser Richtung.
Gruß Winnie
Irgendeiner
24.06.2004, 11:22
Der Autor dieses Threads schrob:
> [...]und vor lauter Labels wirds nun doch etwas unübersichtlich.[...]
Das deutet auf eine unorganisierte Labelstruktur hin. Der Autor findet sich in seinem eigenen Programm nicht mehr zurecht. Die Eingabe von relativen Sprungweiten ist nicht zu empfehlen. Man kann sich ja vorstellen, was jede kleinste Programmänderung (und sei es nur ein NOP) zwischendrin, für Konsequenzen hat...
und Gott schuf Adam ein Weib (damit er nicht mehr an sich selbst...) - (so alleine war).
Dumm gelaufen! Hätte Gott gleich gewusst, dass Adam es lieber sich selbst...:)
Der Autor dieses Threads schrob:
> [...]und vor lauter Labels wirds nun doch etwas unübersichtlich.[...]
Das deutet auf eine unorganisierte Labelstruktur hin. Der Autor findet sich in seinem eigenen Programm nicht mehr zurecht. Die Eingabe von relativen Sprungweiten ist nicht zu empfehlen. Man kann sich ja vorstellen, was jede kleinste Programmänderung (und sei es nur ein NOP) zwischendrin, für Konsequenzen hat...
Da hast Du natürlich recht, ich mache das ja auch wie Du, aber wenn der Leut' oben es so haben will? :)
Gruß Winnie
André Bauer
24.06.2004, 12:47
Hallo!
In der Prog-Studio Software kann man anstatt der Label auch einfach eine Zahl für ein relatives Sprungziel angeben...
Beispiel:
INCLUDE 8051.mc
CJNE A,#11,03h ;springt 3 Bytes nach vorne...
NOP
NOP
NOP
NOP
NOP
Grüße
André
Hallo!
In der Prog-Studio Software kann man anstatt der Label auch einfach eine Zahl für ein relatives Sprungziel angeben...
Beispiel:
INCLUDE 8051.mc
CJNE A,#11,03h ;springt 3 Bytes nach vorne...
NOP
NOP
NOP
NOP
NOP
Grüße
André
Ich habe das gerade nochmal ausprobiert, aber mit einem - Zeichen vor der Zahl kann man nicht zurückspringen. Obwohl ich in der ganzen Sache ohnehin noch keinen wirklichen Sinn gefunden habe? Hast Du eine Idee wozu das nützlich ist? Speicher spart man auch nicht da der Assembler ja die Werte ohnehin als Zahl einsetzt.
Gruß Winnie
Unregistriert
24.06.2004, 23:55
Ich habe das gerade nochmal ausprobiert, aber mit einem - Zeichen vor der Zahl kann man nicht zurückspringen. Obwohl ich in der ganzen Sache ohnehin noch keinen wirklichen Sinn gefunden habe? Hast Du eine Idee wozu das nützlich ist? Speicher spart man auch nicht da der Assembler ja die Werte ohnehin als Zahl einsetzt.
Gruß Winnie
Und vor allem wird das Programm unwartbar, einmal irgendwo eine kleine Änderung und schwups sind alle nachfolgenden Sprungziele falsch, grässliche Vorstellung. Ich erinnere mich noch an meine allerersten Programmierversuche, EIgenbau-Z80, da habe ich so programmiert, direkt in Hex :-)
Aber man könnte ja erst mit labels abeiten, dann assemblieren, danach dann anhand des listings die Absolutadressen wieder in den Assemblercode eintragen und die labels wieder löschen :-)
Und vor allem wird das Programm unwartbar, einmal irgendwo eine kleine Änderung und schwups sind alle nachfolgenden Sprungziele falsch, grässliche Vorstellung.
Zumindest die im nächsten 127/-128 Byte-Bereich.
Aber man könnte ja erst mit labels abeiten, dann assemblieren, danach dann anhand des listings die Absolutadressen wieder in den Assemblercode eintragen und die labels wieder löschen :-)
:eek: Hört sich an wie eine Zahnbehandlung durch den After.:eek: Aber wem's gefällt.:p
Ich habe das gerade nochmal ausprobiert, aber mit einem - Zeichen vor der Zahl kann man nicht zurückspringen.
Auch nicht wenn man davon ausgeht das Zahlen >127 ohnehin negativ sind und das Minuszeichen wegläßt kommt ein 'Run Time Error'.
Gruß Winnie
André Bauer
25.06.2004, 17:22
Hallo Winnie,
Ich habe das gerade nochmal ausprobiert, aber mit einem - Zeichen vor der Zahl kann man nicht zurückspringen. Obwohl ich in der ganzen Sache ohnehin noch keinen wirklichen Sinn gefunden habe? Hast Du eine Idee wozu das nützlich ist? Speicher spart man auch nicht da der Assembler ja die Werte ohnehin als Zahl einsetzt.
Gruß Winnie
Das ganze macht auch keinen wirklichen Sinn, man sollte immer aussagekräftige Labels verwenden... Es ist halt nur der Vollständigkeit halber drin geblieben (ev. für Leerzwecke, siehe auch MCS-51 Befehlsreferenz). Ich habe das hier nur erwähnt, da danach gefragt wurde... Rückwärts springen geht übrigens auch:
INCLUDE 8051.mc
NOP
NOP
NOP
CJNE A,#11,251
NOP
Grüße
André
Wenn er unbedingt will, kann er ja feste Sprungadressen angeben:
(0008h):
Ob es Sinn macht, sei dahin gestellt.
Hallo André
Das ganze macht auch keinen wirklichen Sinn, man sollte immer aussagekräftige Labels verwenden... Es ist halt nur der Vollständigkeit halber drin geblieben
So seh' ich das eigentlich auch. Danke für die Antwort.
Gruß Winnie
Powered by vBulletin® Version 4.1.12 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.