Ich schreibe demnächst ein Klausur in µ. Ich habe mir selber einen Fragekatalog erstellt, und versucht alle Fragen zu beantworten. Bei zwei Fragen bin ich mir unsicher und würde um eine Korrektur bitten. Weshalb muss man wissen, ob Sprungbefehl mit absoluter oder relativer Adressierung arbeitet? Wird das Hauptprogramm mit Unterprogrammen in Speicher verschoben, würde der der Sprungbefehl mit relative Adressierung immer noch zur richtigen Stelle springen, bei absoluter Adressierung ist es nicht gewährleistet bzw. nicht der Fall. Welche Vorteile bietet die relative Adressierung? Man kann das ganze Programm(mit Unterprogrammen) im Speicher verschieben, und es würde trotzdem noch funktionieren. Danke!
Alex Z. schrieb: > Weshalb muss man wissen, ob Sprungbefehl mit absoluter oder relativer > Adressierung arbeitet? > > Wird das Hauptprogramm mit Unterprogrammen in Speicher verschoben, würde > der der Sprungbefehl mit relative Adressierung immer noch zur richtigen > Stelle springen, bei absoluter Adressierung ist es nicht gewährleistet > bzw. nicht der Fall. Korrekt. Das ist allerdings nur dann relevant, wenn du selber Assembler spielst bzw. selbst den Code an eine andere Stelle verschiebst. Erfolgt die Verschiebung im Source Code dann kümmert sich ja der Assembler bzw Compiler um die Adressberechnung und daher tangiert dich dieser Punkt weniger. > Welche Vorteile bietet die relative Adressierung? > > Man kann das ganze Programm(mit Unterprogrammen) im Speicher > verschieben, und es würde trotzdem noch funktionieren. Ja. Das ist aber meistens nur die halbe Miete. Relative Adressierung ist normalerweise auch Speichersparender, weil es dann Grenzen gibt, bis zu denen relativ adressiert werden kann. Für alles was weiter entfernt ist, muss man dann absolut adressieren. Zb wenn man relativ zu einer Position nur +-128 Bytes adressieren kann, dann braucht man zur Beschreibung einer Adresse nur 1 Byte, während man für eine komplette Sprungadresse bei einem 16 Bit Addresssystem 2 Bytes brauchen würde.
Alex Z. schrieb: > Weshalb muss man wissen, ob Sprungbefehl mit absoluter oder relativer > Adressierung arbeitet? Das muß man nicht wissen, weil der Assembler das schon weiß. Man schreibt immer nur das Ziel-Label hin und der Assembler errechnet daraus den richtigen Befehlscode automatisch. Alex Z. schrieb: > Wird das Hauptprogramm mit Unterprogrammen in Speicher verschoben, würde > der der Sprungbefehl mit relative Adressierung immer noch zur richtigen > Stelle springen, bei absoluter Adressierung ist es nicht gewährleistet > bzw. nicht der Fall. Nein. Wenn man Code einfügt und dann assembliert, werden alle Sprünge wieder richtig berechnet. Ein Sonderfall sind vom OS verschiebbare Programme, z.B. auf dem PC. Da macht dann der Programmloader eine Berechnung der Sprünge ohne neu zu assemblieren. Alex Z. schrieb: > Welche Vorteile bietet die relative Adressierung? Sie erlaubt einen kürzeren Befehlscode. Es muß ja nicht die vollständige Adresse im Befehl stehen, sondern nur der Abstand zum Ziel. Ist der Abstand zu groß, d.h. kann nicht mehr codiert werden, gibt es eine Fehlermeldung. Peter
>Das muß man nicht wissen, weil der Assembler das schon weiß. und >Ist der Abstand zu groß, d.h. kann nicht mehr codiert werden, gibt es >eine Fehlermeldung. passen natürlich super zusammen .... (die Antwort vom "Karl Heinz Buchegger" ist doch eh super, und richtig und ziemlich vollständig, warum antwortest du da überhaupt noch, kann ja nur schlimmer werden...)
Robert L. schrieb: > passen natürlich super zusammen .... Und man sieht daran wieder mal schön, wie aus dem Zusammenhang gerissene Zitate wirken können... > warum antwortest du da überhaupt noch Das habe ich mich beim Lesen deines Beitrags dann auch gefragt...
Robert L. schrieb: > passen natürlich super zusammen .... Ja natürlich paßt das. Niemand zählt sowas nach. Erst wenn die Fehlermeldung kommt, stellt man den Code um (negierte Bedingung + long Jump). Robert L. schrieb: > warum antwortest du da überhaupt noch Weil ich Zeit brauche, um zu schreiben. Es mag zwar uncool scheinen, aber ich überlege mir meine Posts. Es ist völlig normal, daß beim Absenden schon weitere Posts vorliegen können. 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.