faecher:informatik:oberstufe:techinf:assembler:hallowelt:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
faecher:informatik:oberstufe:techinf:assembler:hallowelt:start [22.07.2021 11:20] sbelfaecher:informatik:oberstufe:techinf:assembler:hallowelt:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
-====== Hallo Welt! ====== 
  
-Traditionell betrachtet man bei der Annhäherung an eine neue "Computersprache" oft ein Hallo-Welt-Programm.  
- 
-Damit die Codebeispiele funktionieren müssen die folgenden Voraussetzungen erfüllt sein: 
- 
-     * Linux als BS 
-     * 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 ; db - 1 Byte 
-                              ; 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,msg  ; Adresse des ersten Zeichens (msg) 
- mov edx,len  ; Laenge der Zeichenkette (berechnet als len) 
- int 80h      ; Softwareinterrupt 0x80, um den Syscall  
-              ; (write(1,msg,len)) auszufuehren 
-; 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 
- 
-</code> 
- 
----- 
-{{:aufgabe.png?nolink  |}} 
-=== (A1) === 
- 
-Kopiere den Code in eine Text-Datei (''hello.asm''). Übersetze den Code mit dem Befehl 
- 
-  nasm -f elf hello.asm 
- 
-Du erhältst eine Datei ''hello.o'' ein sogenanntes Object File. Dieses enthält bereits die Maschinenbefehle, allerdings kann es nicht vom Betriebssystem ausgeführt werden, dazu fehlen noch weitere Informationen (wohin wird das Programm im Speicher geschrieben, an welcher Adresse beginnt es, wo endet es u.ä.). Um ein ausführbares Programm zu erhalten muss man das Object-File mit dem folgenden Befehl "linken": 
- 
-  ld -m elf_i386 -s -o hello hello.o 
- 
-Die Ausgabe dieses Befehls ist eine ausführbare Datei ''hello'', die du mit dem Befehl ''./hello'' starten kannst. 
- 
----- 
-{{:aufgabe.png?nolink  |}} 
-=== (A2) === 
- 
-  * Verändere die Zeile ''mov edx,len'' zu ''mov edx,13'', übersetze und linke das Programm erneut und teste. 
-  * Teste mit ''mov edx,2'' - mache dir klar, was das zweite Argument für eine Bedeutung hat. 
-  * Gib nur "Hello" aus. 
-  *  
----- 
-{{:aufgabe.png?nolink  |}} 
-=== (A3) === 
- 
-Gib einen eigenen Text aus. 
  • faecher/informatik/oberstufe/techinf/assembler/hallowelt/start.1626945643.txt.gz
  • Zuletzt geändert: 22.07.2021 11:20
  • von sbel