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 17:00] – [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   * 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.1631552404.txt.gz
  • Zuletzt geändert: 13.09.2021 17:00
  • von sbel