Ich möchte die Benutzereingabe im Register si
mit einer anderen Zeichenfolge vergleichen.
Übrigens benutze ich FASM. Hier ist mein Code so weit nach der Benutzereingabe.
Wenn ich den Befehl repe cmpsb
benutze, weiß ich, dass ich das zusätzliche Segment verwenden muss, aber ich weiß nicht wie. Und der Befehl repe cmpsb
funktioniert nicht mit diesem Code.Wie zwei Strings in x86-Assembly mit FASM zu vergleichen?
.input_done:
cmp si, 0
je no_input
jmp short .compare_input
.compare_input:
mov cx, 20 ;For the repe cmpsb command.
cld
mov di, info ;The string I want to compare.
mov es, di
mov di, info
repe cmpsb
cmp cx, 0
je showinfo
.showinfo:
... ;The output string if both string are the same.
info db "info", 0
Sie müssen nicht nur Assembler, sondern auch Zielplattform angeben. Zum Beispiel in Linux ist dies einfach falscher Code, da es weder 32b noch 64b Zeiger verwendet. Wenn Sie also sagen würden, dass dies DOS 16b ist, müssten wir sehen, wie Sie die Daten definiert haben, und um gute Fragen zu stellen, sollten Sie versuchen, [MCVE] selbst zu erzeugen, zum Beispiel setzt Ihr aktueller Code 'di' zweimal, aber es ist nicht klar, was in 'si' ist (entweder einstellen, oder einen klaren Kommentar hinzufügen). – Ped7g
Und hier ist ein Artikel, der 'Segment: Offset'-Adressierung im 16B Real-Modus erklärt (für Sie, um eine bessere Vorstellung zu bekommen, wofür' es' und 'ds' sind): http://thestarman.pcmministry.com/asm/ debug/Segments.html – Ped7g