Commit bd73e6eb authored by Laeticia Evertz's avatar Laeticia Evertz

Lösung in Readme eingefügt

parent 756fa050
...@@ -29,63 +29,108 @@ Somit ergibt sich für die exemplarische Anweisung der Maschinencode `0x0C30148 ...@@ -29,63 +29,108 @@ Somit ergibt sich für die exemplarische Anweisung der Maschinencode `0x0C30148
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. 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.
```nasm ```nasm
extern printf ; Aufg. 1: Funktionsweise des Programms:
; - Zunächst Sicherung des ebp, sowie Anlegen von Speicher auf dem Stack (4Byte)
global main ; - Lade in ebx 0x39 und auf den Stack lokale Variable mit Wert 0x30
; - Schleife wird solange ausgeführt, bis ebx den Wert der lokalen Variablen hat
SECTION .text ; - In msg wird hinter "=" das Lower-Byte des ebx eingefügt
main: ; - dann printf mit msg ausgeführt, ebx dekrementiert und wiederholt
push ebp ; -> in Schleife wird msg mit den Werten 57,...,48 hinter "=" gedruckt
mov ebp,esp ; - Programmende nach Calling-Convention
sub esp,4 extern exit ;Pseudoop
extern printf ;Pseudoop
mov ebx,0x39
mov dword [ebp-4],0x30 global main ;Pseudoop
schleife: 0000 SECTION .text ;Pseudoop
cmp ebx,dword [ebp-4] 0000 main: ;Pseudoop
je .ende 0000 push ebp ;[2]
0002 mov ebp,esp ;[3]
mov byte [msg+msg_len-3],bl 0005 sub esp,4 ;[7]
push dword msg 000C mov ebx,0x39 ;[7]
call printf 0013 mov dword [ebp-4],0x30 ;[11]
add esp,4
001E.schleife: ;Pseudoop
dec ebx 001E cmp ebx,dword [ebp-4] ;[7]
jmp .schleife 0025 je .ende ;[6]
ende: 002B mov byte [msg+msg_len-3],bl ;[15]
add esp,4
pop ebp 003A push dword msg ;[6]
0040 call printf ;[6]
push dword 0 0046 add esp,4 ;[7]
call exit
add esp,4 004D dec ebx ;[2]
004F jmp .schleife ;[6]
0055 .ende: ;Pseudoop
0055 add esp,4 ;[7]
005C pop ebp ;[2]
005E push dword 0 ;[6]
0064 call exit ;[6]
006A add esp,4 ;[7]
mov eax,1 0071 mov eax,1 ;[7]
mov ebx,0 0078 mov ebx,0 ;[7]
int 0x80 007F int 0x80 ;[6]
0085
SECTION .data
msg db `Hello World! ebx = ?\n`,0 0000 SECTION .data ;Pseudoop
msg_len equ $-msg 0000 CR equ 13 ;Pseudoop
0000 LF equ 10 ;Pseudoop
0000 msg db `Hello World! ebx = ?`, CR, LF, 0 ;[20]
0014 msg_len equ $-msg ;Pseudoop
;Länge Codesemgent: 0x85 = 133
;Länge Datensegment: 0x14 = 20
;Gesamtlänge: 0x99 = 153
``` ```
* Symboltabele * Symboltabele
| Symbol | Typ | Wert | Global sichtbar? (Ja/Nein) | Weitere Attribute | | Symbol | Typ | Wert | Global sichtbar? (Ja/Nein) | Weitere Attribute |
| ------ | --- | ---- | -------------------------- | ----------------- | | ------ | --- | ---- | -------------------------- | ----------------- |
| | | | | | |exit |extern |0000 |J | |
| | | | | | |printf |extern |0000 |J | |
| | | | | | |main |global |0000 |J | |
| | | | | | |.text |SECTION |0000 |J | |
| | | | | | |.schleife |near |001E |N |in .text |
| | | | | | |.ende |near |0055 |N |in .text |
| | | | | | |.data |SECTION |0085 |J | |
| | | | | | |CR |equ |13 |J | |
| | | | | | |LF |equ |10 |J | |
| | | | | | |msg |BYTE |"Hello World! ebx = ?" |J |.data |
|msg_len |equ |14 |J | |
* Objektdatei
```
H |cntdwn |00000000 |00000099
S |.text |00000000 |00000085 |.data |00000085 |00000020
D |_main |00000000
R |_exit |_printf
T |00000000 |0C |0504 0C4050 02500100000004
T |0000000C |07 |0C100100000039
T |00000013 |0B |0C45000000040100000030
T |0000001E |0D |0A104500000004 0B0200000055
T |0000002B |0F |0C020000008500000014FFFFFFFDC0
T |0000003A |0C |050100000085 080100000000
T |00000046 |09 |01500100000004 0410
T |0000004F |0F |07010000001E 01500100000004 0640
T |0000005E |0C |050100000000 080100000000
T |0000006A |07 |01500100000004
T |00000071 |0E |0C000100000001 0C1000000000
T |0000007F |06 |0D0100000080
T |00000085 |14 |48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0D 0A 00
M |0000002D |0004 |+|cntdwn
M |0000003C |0004 |+|cntdwn
M |00000042 |0004 |+|_printf
M |00000066 |0004 |+|_exit
E
```
* Opcodes * Opcodes
...@@ -134,4 +179,4 @@ SECTION .data ...@@ -134,4 +179,4 @@ SECTION .data
| ah | 0xA | | ah | 0xA |
| bx | 0xB | | bx | 0xB |
| bl | 0xC | | bl | 0xC |
| bh | 0xD | | bh | 0xD |
\ No newline at end of file
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