Theoretische und technische Informatik - ganz praktisch
Herzlich willkommen auf der Question/Answer-Plattform zu Grundlagen der Informatik II. Wir wünschen Ihnen viel Spaß beim Lernen und Diskutieren!
Loggen Sie sich mit Ihrem KIT-Account (u...) ein, um loszulegen!
Beachten Sie auch diese Informationen zum Schnelleinstieg.
(Nicht-KIT-Studierende beachten bitte diese Informationen.)

Was genau passiert bei Assemblersprachen z.B. bei DIV #10?

0 Punkte
105 Aufrufe
Hallo,
ich werde aus der Theorie der Assemblersprachen leider nicht ganz draus ob bei den Befehlen:
LOAD R1
DIV #10
direkt schon das Ergebnis von R1/10 in R1 abgespeichert wird oder ob man noch den Befehl STORE R1 benötigt.
Vielen Dank im Vorraus!
Gefragt 31, Jan 2017 in Band II, Kapitel 7 von Anonym  

Eine Antwort

0 Punkte
Hallo,

es gibt bei Assemblersprachen grundsätzlich 3 Befehlsarten:

1-Adressbefehle wie zB DELETE R1. Dadurch wird der Wert der sich in R1 befindet gelöscht.

Hier entspricht R1 deiner (einzigen) Quelle, ein Ziel gibt es nicht.

2-Adressbefehle wie zB STORE #1, R1. Hierdurch wird der Wert 1 im Register R1 gespeichert.

Hierbei entspricht die Zahl 1 deiner Quelle, das Ziel ist R1. Es gibt also eine Quelle und ein Ziel.

3-Adressbefehle wie zB MULTIPLY R1, R2, R1. Hierdurch wird R1 mit R1 multipliziert und wieder in R1 gespeichert.

Hier hast du nun zwei Quellen mit denen die Operation durchgeführt (R1 und R2) und ein Ziel (R1). Es gibt also zwei Quellen und ein Ziel.

Für einen Befehel bei dem der Wert von R1 durch 10 geteilt werden soll und wieder in R1 gesüeichert brauchst du einen 3-Adressbefehl:

DIV R1, #10, R1.

Ich hoffe das hilft weiter!

Viele Grüße

Lukas (Tutor)

 

.
Beantwortet 31, Jan 2017 von uxdui Tutor(in) (103,050 Punkte)  
Hallo Lukas,

Danke für die schnelle Antwort!
Ich meine aber einen 1-Adressbefehl (wie zum Beispiel bei Aufgabe 83 b) des zweiten Buches).
Wenn es nämlich so ist, dass der Befehl DIV #10 das Ergebnis direkt wieder in R1 speichert (und somit die alte Zahl überschreibt), dann verstehe ich die Lösung der Aufgabe nämlich nicht. Denn dann würde man ja schon die letzte Ziffer der Zahl abschneiden bevor man sie überhaupt mit dem Modulo-Befehl auslesen kann.
Oder ist es so, dass durch DIV #10 nur das Ergebnis berechnet wird und dann erst durch den zweiten Befehl STORE R2 in R2 gespeichert wird und somit R1 nicht verändert wird (also R1 noch den ursprünglichen Wert hat, aber R2=R1/10)?
Ich hoffe es war verständlich wo mein Problem liegt.

Viele Grüße
Ah jetzt verstehe ich dein Problem.
In solchen Fällen wird der Wert in dem sog. Akkumulator (AKk) gespeichert bzw aus ihm geladen. (Vergleiche Folie 9-12)
Für LOAD #1 wird der Wert 1 in Akk gespeichert.
Für STORE R3 wird der Wert des Akk in R3 gespeichert.
Für SUBTRACT #1 wird der Wert 1 vom Wert des Akk abgezogen usw.

Hilft dir das?
Hallo, ich verstehe den Code zur Aufgabe 83b) folgendermaßen:
x= 4112
R1: 4112

1.Schlaifendurchgang:

Dann wird der Wert 0 in R3 gespeichert.
Dann R1 Div 10 = 411 und das in R2 gespeichert.
Dann R1 Mod 10 = 2, dann 2+R3 = 2+0 =2 und die 2 wird in R3 gespeichert.
Dann wird R1 mit dem Ergebnis von R2 überschrieben: also R1 = 411.

2. Schleifendurchgang:
 411 Div 10 = 41, wird in R2 gespeichert R2: 41
Dann 411 Mod 10 = 0, danch wird 0+R3 = 0+2=2 gerechnet und in R3 gespeichert.
Dann wird R1 wieder durch den Wert in R2 ersetzt: R1= 41
usw.

Ich komm dann auf den Wert 5 und nicht 8

Wo liegt mein Fehler?
4112 MOD 10 = 2
411 MOD 10 = 1
41 MOD 10 = 1
4 MOD 10 = 4

Alles aufsummiert in R3 ergibt 8 :)
...