Eingabebuffer



  • Hallo zusammen,
    ich habe letztlich diese Anleitung gefunden: www.m-hoeppner.de/projects/asm_ws.pdf um mal wieder in Assembler reinzukommen.
    Übrigens gutes Dokument!

    Jetzt gibt es darin dieses Beispiel für eine Texteingabe über die Konsole:

    .section .data
    gruss:   .ascii "bitte eingeben: "
    buffer:  .ascii ""
    
    .section .text
    
    .global _start
    _start:
        mov $4, %eax
        mov $1, %ebx
        mov $gruss, %ecx
        mov $15, %edx
        int $0x80
    
        mov $3, %eax
        mov $0, %ebx
        mov $buffer, %ecx
        int $0x80
    
        mov $1, %eax
        mov $0, %ebx
        int $0x80
    

    Man beachte, dass der Eingabe-Buffer des read-Befehls keinen Länge hat. Soviel ich weis ist das aber notwendig. Wenn ich das Programm assembliere und linke, kann ich Text eingeben so viel ich will (klar) aber wenn ich return drücke, werden die ersten 15 Zeichen geschluckt und der Rest von der Konsole als neue Eingabe interpretiert:

    chris@elric:~/assm$ eingabe 
    bitte eingeben:12345678901234567890
    chris@elric:~/assm$ 67890
    bash: 67890: Kommando nicht gefunden.
    

    meine Frage: warum genau 15 Zeichen? Weil die immer noch vom write-Befehl davor in %edx steht? Werden die Register nicht zurückgesetzt, nach dem Soft-Interrupt?

    Danke

    Gruss Christian


Anmelden zum Antworten