Frage

Das Programm muss in einem einfachen String vom Benutzer zu übernehmen und sie wieder anzuzeigen. Ich habe das Programm zu nehmen Eingaben vom Benutzer bekommen, aber ich kann nicht scheinen, um es zu speichern. Hier ist, was ich habe, so weit:

BITS 32
global _main
section .data

prompt db "Enter a string: ", 13, 10, '$'
input resd 1 ; something I can using to store the users input.

name db "Name: ******", 13, 10,'$'
StudentID db "********", 13, 10, '$'
InBoxID db "*************", 13, 10, '$'
Assignment db "************", 13, 10, '$'
version db "***************", 13, 10, '$'

section .text
_main:

mov ah, 9
mov edx, prompt
int 21h
mov ah, 08h
while:
    int 21h
            ; some code that should store the input.
    mov [input], al
    cmp al, 13
    jz endwhile
    jmp while
endwhile:

mov ah, 9
    ; displaying the input.

mov edx, name
int 21h
mov edx, StudentID
int 21h
mov edx, InBoxID
int 21h
mov edx, Assignment
int 21h
mov edx, version
int 21h
ret

ich dies mit NASM bin Montage.

War es hilfreich?

Lösung

Sie lesen nur die Zeichen, ohne sie zu speichern. Statt in diesem ‚Input‘ zu speichern, sollten Sie AL speichern entweder direkt in StudentID / InBoxID / Assignment / Version. Sie könnten die Vorteile ihrer relativen Positionen im Speicher nehmen und eine einzige Schleife schreiben alle von ihnen, wie es in einem zusammenhängenden Raum zu füllen.

Es könnte so gehen:

; For each string already padded with 13, 10, $
; at the end, use the following:
mov ah, 08h
mov edi, string
mov ecx, max_chars
cld
while:
        int 21h
        stosb         ; store the character and increment edi
        cmp ecx, 1    ; have we exhausted the space?
        jz out
        dec ecx
        cmp al, 13
        jz terminate  ; pad the end
        jmp while
terminate:
        mov al, 10
        stosb
        mov al, '$'
        stosb
out:
        ; you can ret here if you wish

habe ich nicht getestet, so dass es Fehler in ihm haben könnten.

Oder könnten Sie andere DOS-Funktionen verwenden, speziell INT21h / 0Ah . Es könnte sein, mehr optimal und / oder zu erleichtern.

Andere Tipps

Es sieht aus wie Sie nicht einen richtigen Puffer werden mit dem Benutzer Eingabe zu speichern.

Diese Seite hat eine große x86 Tutorial in 23 Abschnitte aufgeteilt, eine für jeden Tag Sie vermuten, dass Abschnitt zu tun.

Hier auf Tag 14 er von dem Benutzer ein Beispiel für das Lesen in einer Reihe zeigt, und Speichern sie in einen Puffer, den Druck anschließend wieder heraus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top