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:58] – [Benutzereingabe] sbelfaecher:informatik:oberstufe:techinf:assembler:beispiele1:start [14.09.2021 06:30] (aktuell) – [Hallo Welt reloaded] sbel
Zeile 45: Zeile 45:
  
 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.
 +
 +----
 +{{: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: === === Weitere System-Calls: ===
Zeile 66: Zeile 75:
   * Man benötigt einen reservierten, beschreibbaren Speicherbereich im .bss-Abschnitt des Programms   * Man benötigt einen reservierten, beschreibbaren Speicherbereich im .bss-Abschnitt des Programms
   * Ins Register eax muss der Wert 3 geschrieben werden   * 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 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.1631552335.txt.gz
  • Zuletzt geändert: 13.09.2021 16:58
  • von sbel