An dieser Stelle wollen wir einen Ausflug in die Niederungen des Rechners machen – das Wissen, wie (jedenfalls ungefähr) ein normaler Rechner aufgebaut ist (man spricht dabei gerne von einem Von-Neumann-Rechner, im Gegensatz zu einem Harvard-Rechner, in dem Code und Daten in separaten Speichern liegen) wird helfen, das Design von C zu verstehen.
Stark vereinfachte Skizze eines modernen Rechners:
Er besteht aus dem
Dieses Bild ist beliebig vereinfacht, ist aber genau genug, um uns später zu helfen, das Verhalten von C-Programmen und auch klassische Kompromisse, die beim Programmieren so anfallen, zu verstehen.
Was sind die Spezialregister?
Vieles kommt in diesem Modell nicht vor, etwa Memory Management (die Übersetzung von logische in physikalische Adressen, Speicherschutz) und Interrupts, mit denen z.B. die Peripherie die CPU über Wünsche informieren kann. Fürs erste soll das aber reichen.
Wir werden uns nachher (leider) an der x86-Architektur von Intel orientieren, wenn wir uns CPUs genauer ansehen. Auf dieser haben auch die nicht-speziellen Register lustige Namen, die zum Teil nur noch historische Bedeutung haben.
An für uns relevanten Registern gibt es in solchen CPUs ax (gern auch als Akkumulator bezeichnet, woran noch eine Unzahl von Befehlen erinnert, die nur mit ax gehen), bx, cx (das c sollte mal an Counter erinnern), dx, si (das soll an Source Index errinnern), di (analog Destination Index) und bp (Base Pointer). Diese Register existierten schon in den alten Tagen des 8086, der 16-bit breite Register hatte. Die Namen, wie ich sie jetzt hingeschrieben habe, beziehen sich dann auch nur auf die “unteren” 16 bit dieser Register. Seit dem 80386 haben aber alle x86-Prozessoren (mindestens) 32-bittige Register, die durch Voranstellen eines “e” gekennzeichnet werden, aus ax wird also eax. Im Fließtext werde ich keinen Unterschied zwischen ax und eax machen, im Code natürlich schon.
Tatsächlich gab es etliche dieser Register schon im längst vergessenen 8-bit-Prozessor 8080. Der hat z.B. das ax-Register nochmal zerlegt in ah und al (a high und a low, die oberen und unteren 8 bit). Es ist kaum zu glauben, aber auch der neueste und schickste Pentium 27 kennt noch ah und al von 1974.
Schon das ist alles absurd genug, um zu bedauern, dass die x86-Architektur nicht mit dem 80286 untergegangen sind.
Ihr solltet euch wenigstens an den rötlich unterlegten Aufgaben versuchen
(1)
Schraubt euren Rechner auf (ich bin nicht verantwortlich, wenn ihr etwas kaputt macht) und seht (ggf. anhand eines Handbuchs zum Motherboard oder geeigneter Hilfen aus dem Netz, die ihr euch vorher besorgt habt), ob ihr darin die CPU und den Hauptspeicher, vielleicht auch Hinweise, dass es etwas wie einen Bus gibt, vielleicht auch einen Cache findet.