Funktionsprinzip eines Prozessors

Dome87

Redakteur
Teammitglied
Dabei seit
März 2008
Beiträge
4.699
Nabend,

ich möchte mich mal etwas näher mit dem Grundprinzip einer CPU auseinandersetzen. Ich habe mir die letzten Tage viele Texte und Bilder zu diesem Thema angeschaut, allerdings doch noch ein paar Fragen. (Siehe Abbildung dazu) Ich denke, der Intel 4004 ist eine gut CPU, um sich mit dem Grundprinzip vertraut zu machen. Daher auch folgende Abbild

Klick mich fürs Blockdiagramm :)
Was genau macht der Acumulator (Zwischenspeicher?) oder wie funktioniert das genau mit dem Befehlszähler? (Ich meine, dass so verstanden zu haben, dass in ihm immer der nächste Adressatz des Registers steht?)

Sind die Register und der Cache vom Grundsatz her verhleichbar?

Was ist der "Flag Flip Flop"?

Passiert in einer enfachen CPU wirklich immer alles nach dem Schema "Fetch, Decode, Execute"? Es wäre super, wenn ich mal Jemand die Mühe macht (oder eine Abbildung kennt) und mir in Schritten beschreibt, wie das in einer einfach CPU zum Beispiel abläuft, wenn ich unter DOS den Befehl "date" oder so eingebe. Also quasi den Ablauf vom tippen des "d" auf der Tastaur bis zum erscheinen des Datums (ganz grob natürlich nur)

Danke im Voraus,

Gruß

EDIT:

Da kommt mir grad noch was. So ganz habe ich das mit dem Sprungbefehl und den Programmen noch nicht verstanden. Außerdem wollte ich mal fragen, ob ihr mir eine Programmiersprache empfehlen könnt? (Wäre absoluter Newbee auf dem Gebiet, wäre also toll, wenn ich dazu eine Software 4free downloaden könnte und es am besten noch gute Tutorials im Netz dazu gibt :))

Gruß
 
Zuletzt bearbeitet:
Register und Cache sind was ganz verschiedenes.
Eine Cache ist nicht notwendig, sie beschleunigt aber die Ausführung des Codes.
In den Registern sind die wichtigsten Variablen abgelegt. Von diesen aus kommt man mit genügend Code an jede andere Stelle im Programm.

Das mit date ist schon sehr komplex, da sind Stapelrahmenwechsel und so weiter drin.
Für einfache Beispiele suchst du dir am Besten ein ASM-Tutorial.
Das würde ich dir für das Prozessorverständnis auch empfehlen.

Sprungbefehl: Ein Register hält die Addresse für die nächste Anweisung.
Der Sprungbefehl schiebt die angegebene Addresse in dieses Register -> Als nächstes wird die angegebe Stelle ausgeführt -> also war es ein Sprung.

Programmiersprachen ist schwer, mit Visual C++ (Express Edition kostenlos) kann man schnell kleine Programme schreiben, die ASM-Code verwenden. Aber auch natürlich große Projekte verwirklichen.
 
der akku is glaub ich nen einfacher zwischenspeicher; ein flag ist eine markierung
 
Flags ist wie ein Schalter, an und aus. Realisiert wird das über ein Register (FL bei 16 bit oder EFL bei 32 bit)
Dieses Register kann gelesen und geschrieben werden. Die Flags sind die einzelnen Bits, daher kann dieses Register nicht als Speicher oder Zeiger für etwas verwendet werden.

Jetzt hab ich extra mal FF gestartet um das svg anschauen zu können:
Also das ist schon sehr genau und aussschweifend....

Ich weiß nicht, wie viel Erfahrung du mit Programmieren hast, aber viele Sachen werden beim Betrachten von dem Assemblercode, der von einem Compiler generiert wird klar.

Ein x86-Prozessor hat:
8 Register, viele mit einer Spezialbedeutung, eax,ebx,ecx,edx sind aber praktisch frei verwendbar.
und den Arbeitsspeicher.
Und dann halt ein Prozessor, wo nichts anderes macht, als den Code, auf den eip zeigt, auszuführen.
Wie er es intern macht, ist sehr variabel. Fetch->Ausführung oder Fetch->Decode->resort->y-ops ausführen ist verschieden.
 
Also was programmieren angeht habe ich noch gar keine Ahnung. Aber schonmal interessant, das eine x86 CPU 8 Register hat. Ich kenne allerdings nur 2, also das Befehlszählregister und das Befehlsregister.

Mit welcher Software kann ich mich denn an Assembler versuchen? C++ Express lädt grad runter.

Danke für die Antworten!

Gruß
 
VC++, das was du lädst :)
Einfach ein bisschen Code schreiben und dann links in das Graue am Rand reinklicken, da kommt ein roter Bobbel, wenn jetzt dein Programm beim Ausführen da vorbeikommt, dann hält es an und du kannst in VC++ alle Variablen,Register und das Disassembly angucken.

Zu den Registern: Es sind 10 "Standardregister" (heutige CPUs haben ca. 40...)
eax,ebx,ecx,edx -> Praktisch allgemein verwendbar
ebp -> Base Pointer, ist die Untergrenze des aktuellen Stackframes
esp -> Stack Pointer, Zeigt auf den Stack
eip -> Instruktion Pointer, zeigt auf den nächsten Befehl
efl -> Flag Register, speichert die Flags
esi,edi -> Source Index/destination Index für Stringoperationen

Wenn du dann ein bisschen Asm machen willst, kannst du dir als "Framework" folgenden Code kopieren:
Code:
#include "StdAfx.h"
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc,char*[]argv)
{
int a,b,c;//Das sind 32bit Ganzzahlen
float d,e,f;//32 bit Fließkomma
cin>>d;//Einlesen
cin>>b;
__asm
{
//Hier kommt dein Assemblercode hin
//Bsp:
cpuid 0 //Fragt Infos über die CPU ab (Intel Spec Teil 2 glaub ich)
mov [a],eax
mov [b],ebx
int 3 //Das ist ein Break, also ein Debuggingpoint, ähnlich wie der rote Punkt
}
cout<<a<<","<<b<<"\n";//das gibt a,b<return> aus
system("PAUSE");//Damit es sich nicht gleich beendet
return 0;
}
 
Danke, da hab ich die nächsten Tage erstmal wieder Stoff zum beschäftigen :D Wird aber wohl ein bisschen dauern, da ich noch am Anfang stehe...

Gruß
 
Zurück
Top