www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Technische Informatik" - CPU Programm schreiben
CPU Programm schreiben < Technische Inform. < Praktische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Technische Informatik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

CPU Programm schreiben: Aufgabe Probleme
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 16:59 Sa 02.12.2006
Autor: diecky

Aufgabe
1) Betrachten Sie folgende Speicherinhalte von Adresse 0 mit einschließlich Adresse 21 und interpretieren Sie ihn als ein Programm. Was wird durch dieses Programm berechnet?
2) Schreiben Sie ein Programm, das für zwei Zahlen x,y
s = x*y / x +y
berechnet. Das Ergebnis s soll bei Adresse 4 gespeichert werden, wobei x bei Adresse 2 und y bei Adresse 3 gespeichert sei und das Programm selbst bei Adresse 5 beginnt. Kommentieren Sie ihr Programm ausführlich!

zu 1) die Tabelle:

Adresse a            Inhalt RAM[a]
      0                            2
      1                           22
      2                            5
      3                            2
      4                           23
      5                            7
      6                            4
      7                            1
      8                           24
      9                           11
     10                          25
     11                           3
     12                         100
     13                            5
     14                            2
     15                           24
     16                            9
     17                            4
     18                            1
     19                           24
     20                           10
     21                           25

zu 2) die Tabelle:

Adresse a                Inhalt RAM[a]
     0                                 10
     1                                  5
     2                                  x
     3                                  y
     4                                  s

Ich weiß irgendwie gar nicht so recht wie ich wo anfangen muss?!?
Wär echt super,wenn ihr mir helfen könntet!!!
Habe zusätzlich noch eine Tabelle mit den Operationscodes bzw Wirkungen der Operation hinzugefügt,die man dafür wohl benötigt.
Vielen Dank!!

[Dateianhang nicht öffentlich]

Dateianhänge:
Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
        
Bezug
CPU Programm schreiben: Antwort
Status: (Antwort) fertig Status 
Datum: 21:53 Sa 02.12.2006
Autor: Martin243

Hallo,

mach dir bitte die Rolle der einzelnen Komponenten der CPU klar.
Was enthalten die einzelnen Register Reg, Akku und PC?
Was steht im RAM?

Angefangen wird bei RAM-Adresse 0. Du schaust in der Tabelle nach der Bedeutung der 2: Es wird Reg beschrieben. Womit Reg beschrieben wird, ist RAM[RAM[PC+1]], also RAM[RAM[1]]=RAM[22]. Das Register Reg wird also mit dem Wert in Speicherzelle 22 beschrieben. Konkreter geht es nicht, weil uns nur der Speicherinhalt bis 21 bekannt ist.
Dann wird laut Tabelle der PC um 2 hochgezählt, also PC=2.

Die nächste Instruktion steht also in Speicherzelle 2 (PC gibt aktuelle Programmposition an!). Wir schauen nach: Die Instruktion ist 5. Tabelle sagt: Inhalt von Reg in Akku schreiben.
Schließlich wird PC um 1 hochgezählt. PC=3.

Weiter: Instruktion in Speicherzelle 3 ist 2. Tabelle sagt: Reg beschreiben mit RAM[RAM[PC+1]]=RAM[RAM[4]]=RAM[23].
Dann PC hochzählen um 2.

usw...


Am besten ist, du schreibst dir nach jeder abgearbeiteten Instruktion den Inhalt aller Register und den Inhalt der ggf. veränderten Speicherzelle des RAMs auf. Also z.B. so

Start: PC=0, Akku=unbekannt, Reg=unbekannt

nach Instruktion in RAM[0] --> Akku=unbekannt, Reg=RAM[22], PC=2

nach Instruktion in RAM[2] --> Akku=RAM[22], Reg=RAM[22], PC=3

nach Instruktion in RAM[3] --> Akku=RAM[22], Reg=RAM[23], PC=5

nach Instruktion in RAM[5] --> Akku=RAM[22]-RAM[23], Reg=RAM[23], PC=6

nach Instruktion in RAM[6] --> Akku=RAM[22]-RAM[23], Reg=RAM[22]-RAM[23], PC=7

nach Instruktion in RAM[7] --> Akku=RAM[22]-RAM[23], Reg=RAM[22]-RAM[23], PC=9,  RAM[24]=RAM[22]-RAM[23]

nach Instruktion in RAM[9] ....

usw.


Es ist wirklich nicht schwer, man muss es nur systematisch angehen. Nach Ablauf des Programms kann man dann sehen, was die CPU für Werte im RAM gespeichert hat und/oder, was sie als nächstes tun würde.


Schau dir das in Ruhe an, löse zuerst die erste Aufgabe und überlege dir dann, ob dir das nicht bei der Lösung der zweiten Aufgabe hilft


Gruß
Martin

Bezug
                
Bezug
CPU Programm schreiben: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 10:36 So 03.12.2006
Autor: diecky

Ja ok,das habe ich jetzt gemacht (war auch in der vorherigen Aufgabe gefragt und hatte das halt schon ;)).
Die Frage ist jetzt eben nur WAS genau dieses Programm denn überhaupt macht? Ich habe folgende Überlegung angestellt:

Es finden ja folgende Abläufe statt:
LOAD REG
COPY REG_AKKU
LOAD REG
SUB
COPY AKKU_REG
STORE REG
BRANCH ON ZERO
ASSIGN REG
COPY REG_AKKU
LOAD REG
DIV
COPY AKKU_REG
STORE REG
GO TO

Kann es dann vielleicht sein, dass das Programm dies tut?:
Es lädt eine Zahl in die REG, macht eine Kopie davon und speichert es in Akku, holt sich dann die nächste Zahl und subtrahiert beide Zahlen. Das Ergebnis wird dann in der REG und AKKU gespeichert.
Danach springt der PC 3 Zeilen weiter und kopiert den Wert in die REG und in AKKU, holt sich wieder eine neue Zahl und dividiert die beiden Zahlen diesmal. Das Ergebnis wird wieder in REG und AKKU gespeichert.

GROßES FRAGEZEICHEN?!
Danke

Bezug
                        
Bezug
CPU Programm schreiben: Antwort
Status: (Antwort) fertig Status 
Datum: 13:44 So 03.12.2006
Autor: Martin243

Hallo,

der Ablauf bis zur Subtraktion ist ja so weit ok. Allerdings solltest du immer mitschreiben, was woher wo gespeichert wird, denn nach Ablauf des Programms sollst du sagen können, was die Aufgabe des Programms ist.

Also schreib immer schön mit, wann welche Speicherzelle verändert wurde.

Der Satz "Das Ergebnis wird dann in der REG und AKKU gespeichert" gefällt mir nicht. Bei der Subtraktion wird die Differenz automatisch im Akku gespeichert. Darauf folgen die Befehle COPY AKKU_REG, STORE REG. Ersterer Kopiert den Wert im Akku in das Reg. Letzterer speichert den (neuen) Wert des Reg im RAM (Die Adresse steht direkt dahinter).
Wo der Wert im RAM gespeichert wird, ist wichtig, da dies evtl. für den späteren Programmablauf benötigt wird!

Dann folgt eine Fallunterscheidung. Falls der Wert, der jetzt im Akku steht (also das letzte Rechenergebnis) gleich 0 ist, springen wir zu RAM[25], sonst gehen wir einfach zwei Adressen weiter und machen dort die Division (mit welchen Zahlen?).


Wie kommst du auf "Danach springt der PC 3 Zeilen weiter "?


Es ist wichtig, dass du jede Zuweisung verstehst und aufschreibst. Falls es dir schwerfällt, mit RAM[23] u.ä. zu rechnen, kannst du ja folgende Benennung vornehmen:
RAM[22] = a
RAM[23] = b
RAM[24] = c
Dann kannst du hier mit Variablen rechnen. Die Subtraktion wäre dann a-b usw.


Probier es doch mal.


Gruß
Martin

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Technische Informatik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]