Commit cc858a39 authored by Martin Kröning's avatar Martin Kröning

Fix typos, improve consistency

parent 756fa050
......@@ -9,9 +9,9 @@ In dieser Aufgabe sollen Sie die Arbeitsweise eines Assemblers anhand des folgen
* Displacement (4 Bytes, optional)
* Immediate (4 Bytes, optional)
Anhand der Anweisung `mov edx, [ebx+8*ecx]` wird die Bildung des Maschinencodes exemplarisch erläutert. Der Opcode wird mit Hilfe der entsprechende Tabelle (siehe unten) bestimmt und entspricht in diesem Fall `0x0C`. Für die beiden Operanden muss anschließend jeweils ihr Register- und Adressmodusbezeichner bestimmt werden, die jeweils in einem Byte codiert werden und ebenfalls aus der entsprechenden Tabelle (siehe unten( ersichtlich sind. Die Bits 0-3 des Bezeichners spezifizieren den Adressmodus, die Bits 4-7 spezifizieren, welches Register als Basis für den Adressmodus verwendet wird.
Anhand der Anweisung `mov edx, [ebx+8*ecx]` wird die Bildung des Maschinencodes exemplarisch erläutert. Der Opcode wird mit Hilfe der entsprechende Tabelle (siehe unten) bestimmt und entspricht in diesem Fall `0x0C`. Für die beiden Operanden muss anschließend jeweils ihr Register- und Adressmodusbezeichner bestimmt werden, die jeweils in einem Byte codiert werden und ebenfalls aus der entsprechenden Tabelle (siehe unten) ersichtlich sind. Die Bits 0-3 des Bezeichners spezifizieren den Adressmodus, die Bits 4-7 spezifizieren, welches Register als Basis für den Adressmodus verwendet wird.
Der erste Operand stellt ein Register dar, so dass die Bits 0-3 den Wert 0x0 annehmen. Da es sich bei dem Register des ersten Operanden um das Register `edx` handelt, nehmen die Bits 4-7 den Wert 0x3 an. Somit besitzt der Register- und Adressmodusbezeichner des ersten Operanden den Wert `0x30`.
Der erste Operand stellt ein Register dar, so dass die Bits 0-3 den Wert `0x0` annehmen. Da es sich bei dem Register des ersten Operanden um das Register `edx` handelt, nehmen die Bits 4-7 den Wert `0x3` an. Somit besitzt der Register- und Adressmodusbezeichner des ersten Operanden den Wert `0x30`.
Der zweite Operand verwendet als Adressierungsmodus *indirekt indiziert*, so dass die Bits 0-3 des Register- und Adressmodusbezeichners den Wert `0x4` annehmen. Die Bits 4 bis 7 nehmen den Wert `0x1` an, der für das Register ebx steht. Somit besitzt der Register- und Adressmodusbezeichner des zweiten Operanden den Wert `0x14`. Anschließend muss im SI-Byte das Index-Register sowie der Skalierungsfaktor des zweiten Operanden codiert werden. Bits 0-3 stehen hierbei für das Index-Register und nehmen wegen des Registers ecx den Wert `0x2` an. Die Bits 4-7 beschreiben den Skalierungsfaktor und nehmen daher hier den Wert `0x8` an.
......@@ -26,7 +26,7 @@ Somit ergibt sich für die exemplarische Anweisung der Maschinencode `0x0C30148
* Generieren Sie die Symboltabelle des Assemblers, verwenden Sie hierzu die nachfolgende Tabelle.
* Geben Sie die Länge des Code- und des Datensegmentes sowie die Gesamtlänge an.
3. Vollziehen Sie nun die Phase 2 des Assemblers nach, indem Sie eine Objektdatei im in der Vorlesung vorgestellten Objektformat erzeugen. Zur Vereinfachung können alle Zahlen im *Big Endian*-Format dargestellt werden, außerdem seien alle Sprünge relativ und alle Funktionsaufrufe absolut. Kodieren Sie, soweit möglich, genau drei Befehle in einem T-Datensatz. Nutzen Sie auch den den S-Datensatz. Gehen Sie davon aus, dass der Dateiname und damit auch der Modulname *cntdwn* lautet.
3. Vollziehen Sie nun die Phase 2 des Assemblers nach, indem Sie eine Objektdatei im in der Vorlesung vorgestellten Objektformat erzeugen. Zur Vereinfachung können alle Zahlen im *Big Endian*-Format dargestellt werden, außerdem seien alle Sprünge relativ und alle Funktionsaufrufe absolut. Codieren Sie, soweit möglich, genau drei Befehle in einem T-Datensatz. Nutzen Sie auch den den S-Datensatz. Gehen Sie davon aus, dass der Dateiname und damit auch der Modulname *cntdwn* lautet.
```nasm
extern printf
......@@ -72,7 +72,7 @@ SECTION .data
msg_len equ $-msg
```
* Symboltabele
* Symboltabelle
| Symbol | Typ | Wert | Global sichtbar? (Ja/Nein) | Weitere Attribute |
| ------ | --- | ---- | -------------------------- | ----------------- |
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment