|
II-INFORMATIK3 WS04
|
Wie angekündigt, werden sich die ersten Vorlesungen mit dem Thema der Hardwarearchitektur beschäftigen. Am Beispiel eines konkreten Mikroprozessors soll das Zusammenspiel von Hardware und Software untersucht werden. Abschliessend sollen komplexere Architekturen untersucht werden.
Die Überlegungen beginnen heute mit dem Befehlssatz eines einfachen Mikroprozessors, der eine Untermenge der Intel IA32-Architektur darstellt. [BRYAN/O'HALLARON 2003: Chapt.4] nennen diesen Demoprozessor Y86 und sprechen vom Y86-Befehlssatz, der eine ISA bildet, eine Instruction Set Architecture.
Für die folgende Darstellung folgen wir dem Kap.4 des Buches [BRYAN/O'HALLARON 2003] (Siehe auch das Folienmaterial aus dem eLearning-Server für die Woche 18.-23.Okt2004).
Um diese Befehle zu verstehen muss man wissen, welche Struktur auf dem Y86-Prozessor vorausgesetzt werden.
Die Y86-CPU umfasst 8 32-Bit-Register (0,...,7), ein Register für 3 Condition-codes, einen Programmzähler (PC) sowie einen speicherbereich (RAM) als eine sequentielle Abfolge von Bytes sowohl für Daten wie auch Programme.
32-Bit Register | 32-Bit Register |
---|---|
%eax | %esi |
%ecx | %edi |
%edx | %esp |
%ebx | %ebp |
Condition Codes | ||
---|---|---|
ZF | SF | OF |
Byte | 0 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 | 5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
nop | 0 | 0 | ||||||||||
halt | 1 | 0 | ||||||||||
rrmovel rA, rB | 2 | 0 | rA | rB | ||||||||
irmovel V, rB | 3 | 0 | 8 | rB | V | |||||||
rmmovel rA, D(rB) | 4 | 0 | rA | rB | D | |||||||
mrmovel D(rB), rA | 5 | 0 | rA | rB | D | |||||||
OP1 rA, rB | 6 | fn | rA | rB | ||||||||
jxx Dest | 7 | fn | Dest | |||||||||
call Dest | 8 | 0 | Dest | |||||||||
ret | 9 | 0 | ||||||||||
pushl rA | A | 0 | rA | 8 | ||||||||
popl | B | 0 | rA | 8 |
Aufgaben
Übersetzen Sie das folgende C-Programm (evtl. ergänzt um eine main-Funktion) in ein Y86-Programm
/* Find number of elements in null-terminated list */ int len2(int a[]) { int len = 0; while (*a++) len++; return len; }
Erzeugen Sie mit gcc -S zuerst einen IA32-Asembler-Code
Übersetzen Sie den Assemblercode mit as in Objektkode
Erzeugen sie ausführbaren Code mit gcc
Testen Sie ihr Programm
Übersetzen Sie den IA32-Assemblercode in Y86-Assemblercode mit Endung .ys
Übersetzen sie den Y86-Assemblercode mit yas in einen Objektkode mit Endung .yo .
Testen Sie den Assemblercode mit dem Simulatorprogramm ssim
Die Programme "yas" und "ssim" koennen Sie als fertige Binaries fuer Linux von der Homepage des Buches runterladen.
Fragen
Die folgenden Fragen beziehen sich auf die Y86-Architektur (siehe auch Foliensatz auf elearning-Server):
Was versteht man unter der ISA (:= Instruction Set Architecture)?
Welche Funktion haben bei einer CPU die Register?
Welche Funktion hat das Flag-Register, auch Condition-Codes genannt?
Welche Funktion hat der Programmzähler (program counter)?
Welche Funktion hat der Program-Stack?
Was sind die beiden wichtigsten Stack-Befehle?
Welche Beziehung besteht zwischen dem Aufrufen einer Routine und dem Stack?
Welche Veränderungen können Instruktionen im Bereich der CPU auslösen?