Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:techinf:assembler:hallowelt:start [22.07.2021 08:58] – sbel | faecher:informatik:oberstufe:techinf:assembler:hallowelt:start [22.07.2021 09:22] (aktuell) – sbel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Hallo Welt! ====== | ====== Hallo Welt! ====== | ||
- | Traditionell betrachtet man bei der Annhäherung an eine neue " | + | Traditionell betrachtet man bei der Annhäherung an eine neue " |
- | + | ||
- | **Voraussetzungen: | + | |
Damit die Codebeispiele funktionieren müssen die folgenden Voraussetzungen erfüllt sein: | Damit die Codebeispiele funktionieren müssen die folgenden Voraussetzungen erfüllt sein: | ||
Zeile 10: | Zeile 8: | ||
* nasm als Assembler muss installiert sein | * nasm als Assembler muss installiert sein | ||
+ | Hier also ein Hallo Welt für mit Assemblerbefehlen für Linux: | ||
+ | |||
+ | <code asm> | ||
+ | ; Hello World in Assembler | ||
+ | ; | ||
+ | ; Uebersetzen: | ||
+ | ; nasm -f elf hello.asm | ||
+ | ; ld -m elf_i386 -s -o hello hello.o | ||
+ | |||
+ | ; Speichervariablen | ||
+ | SECTION .data | ||
+ | msg: db "Hello World!", | ||
+ | ; 10 - Newline | ||
+ | |||
+ | len: equ $-msg ; Berechnung der Laenge der | ||
+ | ; Speichervariablen msg | ||
+ | ; benoetigt für die Ausgabe | ||
+ | ; Im Beispiel 13 | ||
+ | |||
+ | global _start ; Label fuer den Programmstart | ||
+ | |||
+ | SECTION .text | ||
+ | |||
+ | _start: | ||
+ | ; Initialisieren und ausfuehren des | ||
+ | ; Linux syscalls fuer Ausgabe an STDOUT | ||
+ | mov eax,4 ; Syscall-ID (4 = sys_write) | ||
+ | mov ebx,1 ; Ausgabe-Descriptor (1 = stdout) | ||
+ | mov ecx, | ||
+ | mov edx, | ||
+ | int 80h ; Softwareinterrupt 0x80, um den Syscall | ||
+ | ; (write(1, | ||
+ | ; Programm beenden | ||
+ | mov eax,1 ; Syscall-ID (1 = exit) | ||
+ | mov ebx,0 ; Rueckgabewert 0 (Alles in Ordnung) | ||
+ | int 80h ; Softwareinterrupt 0x80, um den Syscall | ||
+ | ; auszuführen | ||
+ | |||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A1) === | ||
+ | |||
+ | Kopiere den Code in eine Text-Datei ('' | ||
+ | |||
+ | nasm -f elf hello.asm | ||
+ | |||
+ | Du erhältst eine Datei '' | ||
+ | |||
+ | ld -m elf_i386 -s -o hello hello.o | ||
+ | |||
+ | Die Ausgabe dieses Befehls ist eine ausführbare Datei '' | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A2) === | ||
+ | |||
+ | * Verändere die Zeile '' | ||
+ | * Teste mit '' | ||
+ | * Gib nur " | ||
+ | * Was bedeutet es, wenn als 2. Argument Werte größer als 13 eingegeben werden? | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A3) === | ||
+ | |||
+ | Gib einen eigenen Text aus. |