Assembler, Analyse und Ausführung

Neue Frage »

Auf diesen Beitrag antworten »
deppensido Assembler, Analyse und Ausführung

hallo,

bei folgendem Aufgabentyp bräuchte ich dringend Hilfe, da nächsten Dienstag Klausur ist und so eine Aufgabe 20 - 25 Punkte bringt, was bei 90 erreichbaren Punkten nicht wenig ist. Es geht in der Regel darum einen Assemblercode zu verstehen, was ich mit der Funktionsskizze versucht habe (siehe Anhang) ich mir jedoch total unsicher bin, ob das so stimmt. Vermutlich eher nicht. Danach soll man in der Regel einen Assemblercode ausführen und die Werte des Stackpointer etc. in einer Tabelle eintragen (siehe Anhang). Hier habe ich überhaupt keine Ahnung, wie ich da vorgehen muss.

Meine Idee bisher: Assemblercode kommentieren, was mir allerdings nicht weitergeholfen hat.

Wie würdet ihr so eine Aufgabe angehen, von der Logik her etc.? Gibt es vielleicht einen Trick oder ähnliches? Ich hoffe mir kann jemand anhand dieser Aufgabe weiterhelfen, bin langsam echt verzweifelt. Es handelt sich übrigens um MIPS-Assemblersprache.
 
Auf diesen Beitrag antworten »
eulerscheZahl

Nachdem ich von MIPS noch nichts gehört habe, würde ich damit anfangen, es in eine für mich lesbare Sprache zu übersetzen (ohne Gewähr):
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
#include <iostream>

using namespace std;

int v0;
int s0;

int lcs(int* a0, int* a1) {
	cout << "a0 = " << *a0 << "   a1 = " << *a1 << "   v0 = " << v0 << endl;
	if (*a0 == 0 || *a1 == 0) //lcs 2. Absatz
		return 0;
	if (*a0 != *a1) { //lcs 3. Absatz 1. Zeile
		//case 2
		a0++; //Zeiger erhöhen
		lcs(a0, a1);
		s0 = v0;
		a0--;
		a1++;
		lcs(a0, a1);
		a1--;
		if (v0 == s0) return 0;
		v0 = s0;
	}
	else { //lcs 3. Absatz ab Zeile 2
		a0++;
		a1++;
		lcs(a0, a1);
		v0++;
		a0--;
		a1--;
		cout << "increment v0:  a0 = " << *a0 << "   a1 = " << *a1 << "   v0 = " << v0 << endl;
	}
}

int main() {
	int a0[] = {2, 1, 4, 0};
	int a1[] = {1, 4, 0};
	v0 = 0;
	lcs(a0, a1);
}

Und dann hilft es mir meist, das Programm auszuführen (bzw. in der Prüfung von Hand durchzugehen).
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
a0 = 2   a1 = 1   v0 = 0
a0 = 1   a1 = 1   v0 = 0
a0 = 4   a1 = 4   v0 = 0
a0 = 0   a1 = 0   v0 = 0
increment v0:  a0 = 4   a1 = 4   v0 = 1
increment v0:  a0 = 1   a1 = 1   v0 = 2
a0 = 2   a1 = 4   v0 = 2
a0 = 1   a1 = 4   v0 = 2
a0 = 4   a1 = 4   v0 = 2
a0 = 0   a1 = 0   v0 = 2
increment v0:  a0 = 4   a1 = 4   v0 = 3
a0 = 1   a1 = 0   v0 = 3
a0 = 2   a1 = 0   v0 = 3
Auf diesen Beitrag antworten »
deppensido

Vielen Dank für deine Hilfe. Ich bin jetzt alles nochmal Schritt für
Schritt durchgegangen und komm auf die gleichen Werte. smile
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »