faecher:informatik:oberstufe:techinf:assembler:beispiele1:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:techinf:assembler:beispiele1:start [13.09.2021 16:54] – [Tabelle] sbelfaecher:informatik:oberstufe:techinf:assembler:beispiele1:start [14.09.2021 06:30] (aktuell) – [Hallo Welt reloaded] sbel
Zeile 46: Zeile 46:
 Das kann man sich ein wenig wie eine Funktion/Methode mit Argumenten vorstellen: Man befüllt zunächst die Register mit den Argumenten und ruft dann den Systemaufruf auf. Das kann man sich ein wenig wie eine Funktion/Methode mit Argumenten vorstellen: Man befüllt zunächst die Register mit den Argumenten und ruft dann den Systemaufruf auf.
  
-Es gibt weitere System-Calls:+---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A1) === 
 + 
 +    * Gib 12 Sterne aus 
 +    * Gib 4 Sterne aus 
 +    * Sorge dafür, dass das Eingabeprompt in der Zeile unter den Sternen angezeigt wird 
 + 
 + 
 +=== Weitere System-Calls: === 
 + 
 ^ Name   ^ %eax  ^ %ebx                          ^ %ecx                    ^ %edx            ^ %esx  ^ %edi  ^ ^ Name   ^ %eax  ^ %ebx                          ^ %ecx                    ^ %edx            ^ %esx  ^ %edi  ^
 | Exit   | 1     | int (Exit Code)               | -                       | -               | -     | -     | | Exit   | 1     | int (Exit Code)               | -                       | -               | -     | -     |
Zeile 54: Zeile 65:
 | Open   | 5     | const char *                  | int                     | int             | -     | -     | | Open   | 5     | const char *                  | int                     | int             | -     | -     |
 | Close  | 6     | unsigned int                  | -                       | -               | -     | -     | | Close  | 6     | unsigned int                  | -                       | -               | -     | -     |
 +
 +==== Benutzereingabe ====
 +
 +
 +Mit dem Sys-Call 3 lässt sich also eine Eingabe realisieren - "Read".
 +
 +Damit das funktioniert muss man mehrere Dinge beachten:
 +
 +  * Man benötigt einen reservierten, beschreibbaren Speicherbereich im .bss-Abschnitt des Programms
 +  * Ins Register eax muss der Wert 3 geschrieben werden
 +  * Ins Regsiter ebx muss der Filedescriptor, von dem gelesen werden soll. Wenn man das in einer Shell ausführt: 0, 1 oder 2.
 +  * Ins Register ecx muss die Adresse des in .bss reservierten Bereichs
 +  * Ins Register edx muss die Länge der zu lesenden Informationen
 +  * Dann wird der Syscall durch den Interrupt 0x80 ausgelöst
 +
 +<code asm>
 +section .data                           ;.data Abschnitt
 +    userMsg db 'Bitte Zahl eingeben: ' ; Eingabeprompt
 +    lenUserMsg equ $-userMsg           ; Laenge 
 +    dispMsg db 'Du hast die folgende Zahl eingegeben: '    ; Ausgabeprompt
 +    lenDispMsg equ $-dispMsg           ; Laenge      
 + 
 +
 +
 +section .bss           ; Beschreibbarer Speicher, vobelegt mit 0-en
 +    antwort resb 5      ; 5 Byte 
 + 
 + section .text          ; coe Abschnitt
 +    global _start
 + 
 + _start:
 + 
 +    ;User prompt ausgeben
 +    mov eax, 4
 +    mov ebx, 0
 +    mov ecx, userMsg
 +    mov edx, lenUserMsg
 +    int 80h
 + 
 +    ;Neu: Benutzereingabe lesen
 +    mov eax, 3       ; syscall Nummer: 3
 +    mov ebx, 0       ; lesen von stdin
 +    mov ecx, antwort  ; antwort adresse in ecx
 +    mov edx, 5        ; 5 bytes lang
 +    int 80h           ; Syscall!
 + 
 +    ;Ausgabe
 +    mov eax, 4
 +    mov ebx, 0
 +    mov ecx, dispMsg
 +    mov edx, lenDispMsg
 +    int 80h
 + 
 +    ;Ausgabe der eingegebenen Zahl
 +    mov eax, 4
 +    mov ebx, 0
 +    mov ecx, antwort
 +    mov edx, 5
 +    int 80h
 + 
 +    ; Exit code
 +    mov eax, 1
 +    mov ebx, 0
 +    int 80h
 +
 +</code>
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A2) ===
 +
 +Übersetze und teste das Programm. Was passiert, wenn man weniger/mehr als 5 Ziffern eingibt? Beobachte genau.
  
  
  • faecher/informatik/oberstufe/techinf/assembler/beispiele1/start.1631552064.txt.gz
  • Zuletzt geändert: 13.09.2021 16:54
  • von sbel