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:54] – [Tabelle] sbel | faecher: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/ | Das kann man sich ein wenig wie eine Funktion/ | ||
- | Es gibt weitere | + | ---- |
+ | {{: | ||
+ | === (A1) === | ||
+ | |||
+ | * Gib 12 Sterne aus | ||
+ | * Gib 4 Sterne aus | ||
+ | * Sorge dafür, dass das Eingabeprompt in der Zeile unter den Sternen angezeigt wird | ||
+ | |||
+ | |||
+ | === Weitere | ||
+ | |||
^ 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 - " | ||
+ | |||
+ | Damit das funktioniert muss man mehrere Dinge beachten: | ||
+ | |||
+ | * Man benötigt einen reservierten, | ||
+ | * 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 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/ | ||