How do I get user input with NASM?
Solution 1
You're only reading the characters without storing them. Instead of storing into that 'input', you should store AL either directly into StudentID/InBoxID/Assignment/Version. You could take advantage of their relative positions in memory and write a single loop to fill all of them, as in a contiguous space.
It could go like this:
; 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
I didn't test, so it might have mistakes in it.
Or you could use other DOS functions, specifically INT21h/0Ah. It could be more optimal and/or easier.
Solution 2
It looks like you aren't using a proper buffer to store the users input.
This site has a large x86 tutorial split up into 23 sections, one for each day you are suppose to do that section.
Here on day 14 he shows an example of reading in a string from the user and storing it into a buffer, then printing it back out again.
Jonsij
Updated on June 04, 2022Comments
-
Jonsij almost 2 years
The program needs to take in a simple string from the user and display it back. I have gotten the program to take input from the user but I can't seem to store it. Here is what I have so far:
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
I am assembling this using NASM.