Anfängerfrage



  • In mein Lehrbuch stehen nur Beispiele für das Betriebssystem Windows. Ich habe versucht ein einfaches Programm für das Betriebssystem Linux zu schreiben. Bestimmt sind hier ein paar Fehler drinnen. Könnte man das ein bisschen vereinfachen? Und wie bekomme ich es hin, dass das Programm nur zehn Zeichen annehmen kann, also das nach dem dem zehnten Tastendruck Schluss ist?

    ;Ein Beispiel-Datei für AMD64
    
    section .data
    frage: db 'Wie heißt Du?'
    laenge: equ $-frage
    meldung: db 'Hallo '
    laenge2: equ $-meldung
    
    section .bss
    buffer resb 10
    
    section .text
    global _start
    
    _start:
    ;Ausgeben
    mov rax, 4
    mov rbx, 1
    mov rcx, frage
    mov rdx, laenge
    int 80h
    
    ;Eingeben
    mov rax, 3
    mov rbx, 0
    mov rcx, buffer
    mov rdx, 10
    int 80h
    
    ;Ausgeben
    mov rax, 4
    mov rbx, 1
    mov rcx, meldung
    mov rdx, laenge2
    int 80h
    
    ;Ausgeben
    mov rax, 4
    mov rbx, 1
    mov rcx, buffer
    mov rdx, 10
    int 80h
    
    ;Programm beenden
    mov rax, 1
    mov rbx, 0
    int 80h
    


  • Bestimmt sind hier ein paar Fehler drinnen.

    Ich habe dein Programm nach 32 Bit und in AT&T Syntax umgeschrieben. Lief soweit auf Anhieb. Kann den Code noch mal posten, wenn du möchtest.

    Könnte man das ein bisschen vereinfachen?

    Ne, ich glaube, man kann in dem Codestück nichts vereinfachen und man kann es so lassen, wie es ist: geradlinig, ohne Schleifen, ohne Sprungmarken (was kann man sich denn noch wünschen ;).

    Und wie bekomme ich es hin, dass das Programm nur zehn Zeichen annehmen kann, also das nach dem dem zehnten Tastendruck Schluss ist?

    Ich glaube, am besten mit ner Schleife, die max. 10 mal durchläuft, und in der Schleife kann man noch eine Abbruchbedingung vorsehen für "Enter"-Taste.



  • Das funktioniert zwar, aber sobald ich mehr als 10 Zeichen eingebe, werden die restlichen Buchstaben, in der Shell-Konsole, als Befehl angesehen. Wie kann ich das Problem am geschicktesten lösen?


Anmelden zum Antworten