-
Notifications
You must be signed in to change notification settings - Fork 0
/
intro.html
170 lines (170 loc) · 12 KB
/
intro.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<!DOCTYPE html>
<html lang="de" dir="ltr">
<head>
<meta charset="utf-8"/>
<title>Einführung in die Assemblerprogrammierung und Anwendung im AssemblerStudioWeb</title>
</head>
<body style="max-width: 60rem; margin-inline: auto; padding: 1rem;">
<h1><font face="Segoe UI" size="6" style="font-weight: normal;">Assemblerprogrammierung: Grundlagen und Umsetzung im
AssemblerStudioWeb</font></h1>
<h2><font face="Segoe UI" size="5" style="font-weight: normal;"><i><br></i></font></h2>
<p><font face="Segoe UI" size="5" style="font-weight: normal;"><i>1. Rechnerarchitektur: Der
von-Neumann-Rechner</i></font></p>
<p><span style="font-family: 'Segoe UI';">Programme befinden sich (wie die zu bearbeitenden Daten) im Speicher des Rechners. Die Rechnerstruktur ist dadurch universal einsetzbar.</span>
</p>
<p><span style="font-family: 'Segoe UI';">Die fünf Grundeinheiten des Rechners:</span></p>
<p></p>
<ul>
<li><b style="font-family: 'Segoe UI';">ALU (=Arithmetic Logic Unit) / Rechenwerk: </b><span
style="font-family: 'Segoe UI';">arithmetische & logische Operationen auf den Daten</span></li>
<li><b style="font-family: 'Segoe UI';">Control Unit / Steuerwerk: </b><span style="font-family: 'Segoe UI';">Koordination & Steuerung der Komponenten; Bearbeitung der Programmanweisungen</span>
</li>
<li><b style="font-family: 'Segoe UI';">Speicherwerk:</b><span style="font-family: 'Segoe UI';"> Speicher für Programme & Daten; In fortlaufend nummerierte (Speicheradresse) Speicherzellen unterteilt</span>
</li>
<li><b style="font-family: 'Segoe UI';">Eingabewerk:</b><span style="font-family: 'Segoe UI';"> ermöglicht die Eingabe in den Speicher</span>
</li>
<li><b style="font-family: 'Segoe UI';">Ausgabewerk:</b><span style="font-family: 'Segoe UI';"> gibt Daten aus dem Speicher nach außen</span>
</li>
</ul>
<p></p>
<p></p>
<h2><font face="Segoe UI" style="font-weight: normal;"><i><br></i></font></h2>
<h2><font face="Segoe UI" style="font-weight: normal;" size="5"><i>2. Aufbau einer einfachen Registermaschine</i></font>
</h2>
<p><font face="Segoe UI">Die Zentraleinheit einer Registermaschine besteht neben Rechen- und Steuerwerk aus folgenden
Registern: <br>(Register = schnelle Hilfsspeicherzelle)</font></p>
<p></p>
<ul>
<li><font face="Segoe UI"><b>Akkumulator:</b> Register zum Speichern einer Ganzzahl</font></li>
<li><font face="Segoe UI"><b>Befehlszählerregister: </b>Speicheradresse des nächsten Befehls</font></li>
<li><font face="Segoe UI"><b>Befehlsregister:</b> Aktueller Befehl</font></li>
<li><font face="Segoe UI"><b>Statusregister:</b> Jedes Bit des Registers hat als Flag eine bestimmte Bedeutung,
z.B.:</font></li>
<ul>
<li><font face="Segoe UI"><i>N-Flag:</i> Wert der letzten Rechenoperation war negativ</font></li>
<li><font face="Segoe UI"><i>Z-Flag:</i> Wert der letzten Rechenoperation war Null (zero)</font></li>
<li><font face="Segoe UI"><i>O-Flag:</i> Ein überlauf (overflow) ist aufgetreten (=Ergebnis zu groß
für den Speicherplatz)</font></li>
</ul>
</ul>
<p><font face="Segoe UI">Diese vier Register sind auch im AssemblerStudioWeb vorhanden und auf der linken Seite oben zu
finden. Sie werden, ihrer eben beschriebenen Funktion gemäß, vom ASW (AssemblerStudioWeb) automatisch
gesetzt, können aber teilweise auch manuell bearbeitet werden.</font></p>
<h2><font face="Segoe UI" size="5" style="font-weight: normal;"><i><br></i></font></h2>
<p><font face="Segoe UI" size="5" style="font-weight: normal;"><i>3. Befehlssatz einer
1-Adress-Registermaschine</i></font></p>
<p><font face="Segoe UI">Ein Befehl besteht aus zwei Teilen: dem Operations- und dem Operandenteil. Der Operationsteil
gibt die auszuführende Operation an und steht im ASW in der jeweils ersten Speicherzelle jeder Zeile. Die
zweite Speicherzelle beinhaltet im ASW den Operandenteil, der stets eine Ganzzahl ist und entweder einen Wert oder
eine Speicheradresse repräsentiert.</font></p>
<p><font face="Segoe UI">Für viele Befehle werden zwei Operanden benötigt. Bei 1-Adress-Registermaschinen ist
aber nur einer davon im Operandenteil eines Befehls gegeben. Aus diesem Grund stellt der Akkumulator den ersten und
der Operandenteil des Befehls den zweiten Operanden dar.</font></p>
<p><font face="Segoe UI">Die Befehle, die im ASW in vier Kategorien unterteilt sind, werden im Folgenden kurz erklärt:</font>
</p>
<p>
<ul>
<li><font face="Segoe UI"><b>Transportbefehle</b></font></li>
<ul>
<li><font face="Segoe UI"><i>LOAD: </i>Laden eines Wertes aus einer Speicherzelle in den Akkumulator
(Speicheradresse des zu ladenden Wertes wird als Operand angegeben)</font></li>
<li><font face="Segoe UI"><i>LOADI: </i>Direktes Laden eines Wertes in den Akkumulator (Wert wird als
Operand angegeben)</font></li>
<li><font face="Segoe UI"><i>STORE:</i> Schreiben des Akkumulatorwertes in eine Speicherzelle
(Speicheradresse als Operand)</font></li>
</ul>
<li><font face="Segoe UI"><b>Arithmetische Befehle</b></font></li>
<ul>
<li><font face="Segoe UI"><i>ADD:</i><b> </b>Der Wert einer Speicherzelle wird auf den Akkumulatorwert
addiert</font></li>
<li><font face="Segoe UI"><i>ADDI: </i>Ein direkt definierter Wert wird auf den Akkumulatorwert
addiert</font></li>
<li><span style="font-family: 'Segoe UI';"><i>SUB:</i> Der Wert einer Speicherzelle wird vom Akkumulatorwert subtrahiert</span>
</li>
<li><span style="font-family: 'Segoe UI';"><i>SUBI:</i> Ein direkt definierter Wert wird vom Akkumulatorwert subtrahiert</span>
</li>
<li><span style="font-family: 'Segoe UI';"><i>MUL: </i>Der Akkumulatorwert wird um den Wert einer Speicherzelle vervielfacht</span>
</li>
<li><span style="font-family: 'Segoe UI';"><i>MULI: </i>Der Akkumulatorwert wird um einen direkt definierten Wert vervielfacht</span>
</li>
<li><span style="font-family: 'Segoe UI';"><i>DIV:</i><b> </b>Der Akkumulatorwert wird durch den Wert einer Speicherzelle dividiert</span>
</li>
<li><span style="font-family: 'Segoe UI';"><i>DIVI:</i> Der Akkumulatorwert wird durch einen direkt definierten Wert dividiert</span>
</li>
</ul>
<li><font face="Segoe UI"><b>Sprungbefehle</b></font></li>
<ul>
<li><font face="Segoe UI"><i>JUMP:</i> Definiert die Speicheradresse des nächsten auszuführenden
Befehls</font></li>
<li><font face="Segoe UI"><i>JUMPZ:</i><b> </b>Definiert die Speicheradresse des nächsten auszuführenden
Befehls, wenn der Akkumulator 0 ist</font></li>
<li><font face="Segoe UI"><i>JUMPP: </i>Definiert die Speicheradresse des nächsten auszuführenden
Befehls, wenn der Akkumulator positiv ist</font></li>
<li><font face="Segoe UI"><i>JUMPN: </i>Definiert die Speicheradresse des nächsten auszuführenden
Befehls, wenn der Akkumulator negativ ist</font></li>
</ul>
<li><font face="Segoe UI"><b>Sonstige Befehle</b></font></li>
<ul>
<li><font face="Segoe UI"><i>HOLD: </i>Beendet die Programmabarbeitung</font></li>
</ul>
</ul>
<h2><font face="Segoe UI" size="5"><br></font></h2>
<p><font face="Segoe UI" size="5"><i>4. Befehlszyklus einer Registermaschine</i></font></p>
<p><font face="Segoe UI">Die Abarbeitung der einzelnen Befehle orientiert sich an einem festen Schema, das für
jeden Befehl wiederholt wird, bis das Programm durch `hold` beendet wird. Die dafür typischen Schritte werden
auch vom ASW ausgeführt.</font></p>
<p>
<ol>
<li><font face="Segoe UI"><i>Fetch:</i> Der Operator wird aus dem Speicher geholt</font></li>
<li><font face="Segoe UI"><i>Decode: </i>Der Operator wird decodiert</font></li>
<li><font face="Segoe UI"><i>Fetch Operand: </i>Der Operand wird aus dem Speicher geholt</font></li>
<li><font face="Segoe UI"><i>Execute: </i>Der Befehl wird ausgeführt</font></li>
<li><font face="Segoe UI"><i>Update Instruction Pointer: </i>Der Befehlszähler wird erhöht</font></li>
</ol>
<h1><font face="Segoe UI"><br></font></h1>
<h2><font face="Segoe UI" size="5"><i style="font-weight: normal;">5. Assemblerprogramme im ASW</i></font></h2>
<h3><font face="Segoe UI" size="4"><i style="font-weight: normal;">5.1 Schreiben</i></font></h3>
<p><font face="Segoe UI">Ein Programm beginnt in der ersten Speicherzelle des Speichers an der rechten Seite des ASWs.
Durch Klicken/Anwählen dieser Speicherzelle können Sie mit dem Schreiben des Programms beginnen. Die
Befehle und ihre Funktionsweise müssen Sie sich nicht merken, da sie alle links als Buttons aufgeführt
sind (Erklärungen werden als Tooltip beim hovern über einen Button angezeigt). Durch drücken eines
der Buttons, wird der Befehl in die ausgewählte Speicherzelle eingefügt und die Speicherzelle des zugehörigen
Operanden ausgewählt. Haben Sie den Operanden durch eine Ganzzahl definiert, können Sie direkt den Button
des nächsten Befehls drücken, der daraufhin automatisch in die folgende Speicheradresse eingefügt
wird.</font></p>
<p><font face="Segoe UI">Zu verarbeitende Daten werden in den selben Speicher, für gewöhnlich nach dem
Programmcode, eingegeben (oder vom ASW durch STORE geschrieben). </font><span style="font-family: 'Segoe UI';">Sollte Ihr Programm mehr als 40 Speicherzellen benötigen, können Sie mit dem Button "Add Cells" neue Speicherzellenpaare hinzufügen.</span>
</p>
<p><span style="font-family: 'Segoe UI';"><br></span></p>
<h3><font face="Segoe UI" size="4"><span style="font-weight: normal;"><i>5.2 Ausführen</i></span></font></h3>
<p><font face="Segoe UI">Zum Ausführen Ihres Programms dienen die vier Buttons in der oberen linken Ecke:</font>
</p>
<p>
<ul>
<li><font face="Segoe UI">RUN: Startet die Programmabarbeitung, die bis zum Befehl `HOLD` ausgeführt
wird.</font></li>
<li><font face="Segoe UI">HOLD: Gibt Ihnen die Möglichkeit das Programm manuell zu beenden, ohne dass der
HOLD-Befehl erreicht wird.</font></li>
<li><font face="Segoe UI">STEP: Führt nur den nächsten Schritt, also einen Befehlszyklus, aus. Damit können
Sie Ihr Programm langsam durchgehen, um z.B. Fehler zu finden.</font></li>
<li><font face="Segoe UI">RESET: Setzt die Registerwerte zurück, sodass das Programm im Speicher erneut ausgeführt
werden kann.</font></li>
</ul>
<div><font face="Segoe UI"><br></font></div>
<h3><font face="Segoe UI" size="4"><i style="font-weight: normal;">5.3 Importieren und Exportieren: Speichern und
Laden Ihrer Programme</i></font></h3>
<p><font face="Segoe UI">Mit der Exportfunktion, die Sie mit dem Button "Export" unter den Speicherzellen starten, können
Sie Ihr sich aktuell im Speicher befindliches Programm in Form einer Textdatei exportieren. Diese Textdatei können
Sie natürlich dann mit externen Editoren beliebig bearbeiten.</font></p>
<p><font face="Segoe UI">Um ein exportiertes Programm wieder in den Speicher zu importieren, wählen Sie die zu
ladende Datei im Import-Feld aus oder ziehen Sie die Datei auf dieses Feld.</font></p>
<p><font face="Segoe UI">Einige Beispielprogramme, die Sie importieren können, sind bereits im example Ordner (auf
GitHub) enthalten.</font></p>
<p></p>
<p></p>
<div style="position:fixed;bottom:4px;left:50%;text-align:center;transform:translate(-50%,0%);-webkit-transform:translate(-50%,0%);">
<a style="text-decoration:none" href="https://github.com/timlg07/W0RD" target="_blank" rel="noopener">
<font face="Source Code Pro Black" size="2" color="#f2f2f2" style="background-color: rgb(51, 51, 51);"> This
file was created with W0RD - a free, fast and simple text editor by Tim Greller </font></a></div>
</body>
</html>