Anfängerfrage zur Eingabe von Texten



  • Guten Morgen allerseits 🙂
    Habe wieder Zeit Assembler zu lernen und stoße auf ein warscheinlich simples Problem. Hier ist der Code von meinem kleinen Porgramm

    .section .data
      eingabe: .ascii ""
      ausgabe: .ascii "Geben Sie einen Text ein: "
    
    .section .text
    .globl _start
    _start:
      mov $4, %eax
      mov $1, %ebx
      mov $ausgabe, %ecx
      mov $26, %edx
      int $0x80
    
      mov $3, %eax
      mov $0, %ebx
      mov $eingabe, %ecx
      mov $80, %edx
      int $0x80
    
      mov $4, %eax
      mov $1, %ebx
      mov $eingabe, %ecx
      mov $26, %edx
      int $0x80
    
      mov $1, %eax
      mov $0, %ebx
      int $0x80
    

    Und hier ist die entsprechende Ausgabe. Das Problem liegt jetzt daran, dass er nach der Ausgabe "Hallo" wieder den Text
    "Sie einen Text ein: " ausgibt. Das liegt warscheinlich daran dass ich
    die Länge des Strings nicht genau bestimmen kann aber wie mache ich das?
    Hier die Ausgabe:

    Andy@linux-57s7:~> cd /home/Andy/Programmierung
    Andy@linux-57s7:~/Programmierung> as hallo.asm -o hallo.o
    hallo.asm: Assembler messages:
    hallo.asm:0: Warning: end of file not at end of a line; newline inserted
    Andy@linux-57s7:~/Programmierung> ld hallo.o -o hallo
    Andy@linux-57s7:~/Programmierung> ./hallo
    Geben Sie einen Text ein: Hallo
    Hallo
    Sie einen Text ein: Andy@linux-57s7:~/Programmierung>
    

    PS: Programmiere unter Linux!

    Danke 🙂



  • Der Buffer eingabe ist zu klein. Genauer gesagt, hat dieselbe Adresse wie der Buffer ausgabe (weil er leer ist).

    Du musst folgendes machen:

    .section .bss
    .lcomm eingabe, 80
    
    .section .data
    ausgabe: .ascii "Geben Sie einen Text ein: "
    
    ...
    


  • Du kannst es auch so machen:

    statt nix schreibst du für die Eingabe einen Dummytext wie "Politik in den Medien ist nicht viel mehr als nur Kasperletheater für Erwachsene". Dann kompilierst du dein Programm und lädst es in einen Hexeditor. Die betreffenden Dummytextzeichen ersetzt du mit 00. Dann musst du noch darauf achten, dass die Eingabe nicht zu lang wird, sonst überschreibt sie Programmcode. Also Eingabezeichenzahl mitzählen und die Eingabe bei Überzahl abbrechen bzw. nix mehr machen bis EOF oder so 😉



  • nachtfeuer schrieb:

    ... Hexeditor ...

    Das ist verrückt.



  • abc.w schrieb:

    nachtfeuer schrieb:

    ... Hexeditor ...

    Das ist verrückt.

    nicht wenn man Multipass wartet 🙂



  • Den hier?
    *scnr* 😃



  • 😃


Log in to reply