Forum: Offtopic Zwei Anfängerfragen (Bitte um Korrektur)


von Alex K. (jbourne)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

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.

von Alex K. (jbourne)


Lesenswert?

Alles klar,

Vielen Dank!

von Peter D. (peda)


Lesenswert?

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

von Robert L. (lrlr)


Lesenswert?

>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...)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.