0 Daumen
399 Aufrufe

Aufgabe:

Rechts ist ein Speicher m : K6 → K6 tabellarisch dargestellt. Dabei sind Adressen und Werte im Zweierkomplement angegeben. Leerzeichen und Zeilenreihenfolge dienen ausschließlich der Übersicht. An nicht explizit aufgeführten Adressen a´ sei stets m(a´) = 000 000.

Geben Sie in den folgenden Teilaufgaben den durch Ausführung der jeweiligen Operationen resultierenden Speicher mi
jeweils als Tabelle mit Werten im Zweierkomplement an. Heben Sie Zeilen mit mi(a) ≠ m(a) (z.b. farblich) hervor.

Anmerkung: Jede Teilaufgabe beginnt ausgehend von m.

Adresse aSpeicherinhalt m(a)
 000 000 110 010
 001 001 111 111
 101 101 010 111
 111 111 010 010

a) m1 = memwrite(m, 111 111, memread(m, 001 001))

b) m2 = memwrite(memwrite(m, 000 001, 010 011), 000 000, 000 000)

c) m3 = memwrite(m, m´,v) ,mit:
m´ = memread(m, 000 000) + memread(m, 101 101)
v = memread(m, 110 110) − 000 001

Geben Sie auch m´ und v explizit an.

Hinweis: a − b = a + (−b)


Ansatz/Problem:

Ich weiß, dass gilt: memwrite: (m,a,v)↦m´

memread: (m,a)↦m(a)

also z.B bei der a) ist denk ich mal memread(m, 001 001)=111 111

demnach: memwrite(m, 111 111, 111 111) =?

Avatar von

memwrite gibt quasi die Tabelle m aus, mit dem Unterschied, dass an der Adresse 111 111 der zugehörige Wert überschrieben wird. Der neue Wert ist ,statt 010 010, 111 111.

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Teilaufgabe a) m1 = memwrite(m, 111 111, memread(m, 001 001))

Wie angegeben, beginnt jede Teilaufgabe mit dem ursprünglichen Speicherzustand \(m\).
Für Teilaufgabe a) sieht die Operation wie folgt aus:

1. Ausführen von \(memread(m, 001 001)\) gibt uns den Speicherinhalt an der Adresse \(001 001\), der \(111 111\) ist.
2. Durchführen von \(memwrite(m, 111 111, 111 111)\) ersetzt den Wert an der Adresse \(111 111\) im Speicher mit \(111 111\).

Da der Wert an der Adresse \(111 111\) bereits \(010 010\) ist, wird er nach der Operation \(111 111\) sein.

Ursprünglicher Speicherzustand \(m\):

| Adresse | Speicherinhalt |
|----------|----------------|
| 000 000 | 110 010 |
| 001 001 | 111 111 |
| 101 101 | 010 111 |
| 111 111 | 010 010 |

Speicherzustand \(m1\):

| Adresse | Speicherinhalt |
|----------|----------------|
| 000 000 | 110 010 |
| 001 001 | 111 111 |
| 101 101 | 010 111 |
| 111 111 | 111 111 |

Teilaufgabe b) m2 = memwrite(memwrite(m, 000 001, 010 011), 000 000, 000 000)

Für Teilaufgabe b) führen wir zwei memwrite-Operationen hintereinander durch, beginnend mit dem ursprünglichen Speicher \(m\).

1. \(memwrite(m, 000 001, 010 011)\) fügt eine neue Zeile hinzu oder ersetzt eine vorhandene Zeile (abhängig von der Implementierung, da \(000 001\) in der ursprünglichen Tabelle nicht erwähnt ist), der Wert \(010 011\) wird an der Adresse \(000 001\) gespeichert.
2. \(memwrite(..., 000 000, 000 000)\) ersetzt den Wert an der Adresse \(000 000\) mit \(000 000\).

Speicherzustand \(m2\):

| Adresse | Speicherinhalt |
|----------|----------------|
| 000 000 | 000 000 |
| 000 001 | 010 011 |
| 001 001 | 111 111 |
| 101 101 | 010 111 |
| 111 111 | 010 010 |

Teilaufgabe c) m3 = memwrite(m, m´,v), mit:

\(m´ = memread(m, 000 000) + memread(m, 101 101)\)
\(v = memread(m, 110 110) − 000 001\)

Für Teilaufgabe c):
1. \(m´ = 110 010 + 010 111\). Da die Werte im Zweierkomplement sind, müssen wir sie zuerst in Dezimal umwandeln, addieren und wieder ins Zweierkomplement zurückwandeln (falls erforderlich).

\(110 010_{(2C)} = -17_{10}\)
\(010 111_{(2C)} = 23_{10}\)

\(m´ = -17 + 23 = 6_{10}\)
Im Zweierkomplement ist \(6_{10} = 000 110\).

2. \(v = memread(m, 110 110) − 000 001\): Da \(m(110 110)\) nicht explizit angegeben ist, nehmen wir \(000 000\) als den Wert an dieser Adresse. Daher:

\(000 000_{(2C)} - 000 001_{(2C)} = -1_{10}\)

Im Zweierkomplement ist \(-1_{10} = 111 111\).

3. Durchführen von \(memwrite(m, 000 110, 111 111)\) ersetzt den Wert an der Adresse \(000 110\), der nicht in der ursprünglichen Tabelle enthalten ist, deshalb fügen wir eine neue Zeile hinzu.

Speicherzustand \(m3\):

| Adresse | Speicherinhalt |
|----------|----------------|
| 000 000 | 110 010 |
| 001 001 | 111 111 |
| 101 101 | 010 111 |
| 111 111 | 010 010 |
| 000 110 | 111 111 |

und v explizit sind also \(000 110\) für \(m´\) und \(111 111\) für \(v\).
Avatar von 2,9 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community