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:beispiele1:start [13.09.2021 16:58] – [Benutzereingabe] sbel | faecher: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/ | Das kann man sich ein wenig wie eine Funktion/ | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (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, | * Man benötigt einen reservierten, | ||
* Ins Register eax muss der Wert 3 geschrieben werden | * Ins Register eax muss der Wert 3 geschrieben werden | ||
+ | * Ins Regsiter ebx muss der Filedescriptor, | ||
* 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 ; | ||
+ | userMsg db 'Bitte Zahl eingeben: ' ; Eingabeprompt | ||
+ | lenUserMsg equ $-userMsg | ||
+ | dispMsg db 'Du hast die folgende Zahl eingegeben: ' | ||
+ | lenDispMsg equ $-dispMsg | ||
+ | |||
+ | |||
+ | |||
+ | section .bss ; Beschreibbarer Speicher, vobelegt mit 0-en | ||
+ | antwort resb 5 ; 5 Byte | ||
+ | |||
+ | | ||
+ | global _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 | ||
+ | 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 | ||
+ | |||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A2) === | ||
+ | |||
+ | Übersetze und teste das Programm. Was passiert, wenn man weniger/ | ||
+ |