2009-02-07 7 views
2

프로그램은 사용자로부터 간단한 문자열을 가져 와서 다시 표시해야합니다. 사용자로부터 입력을받는 프로그램을 얻었지만 저장하지 못했습니다. 다음은 내가 지금까지 가지고있는 것입니다 :NASM에서 사용자 입력을 얻으려면 어떻게해야합니까?

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 

NASM을 사용하여 이것을 조합 중입니다.

답변

4

문자를 저장하지 않고 읽고있을뿐입니다. 그 'input'에 저장하는 대신 AL을 StudentID/InboxID/Assignment/Version에 직접 저장해야합니다. 연속적인 공간 에서처럼 메모리에서 상대 위치를 활용하고 모든 루프를 채우기 위해 단일 루프를 작성할 수 있습니다.

그것은 같이 갈 수 :

; 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 

내가 테스트하지 않았기 때문에 그것은 실수가있을 수 있습니다.

또는 다른 DOS 기능, 특히 INT21h/0Ah을 사용할 수 있습니다. 보다 최적의 방법 일 수 있습니다.

+0

내 질문에 그 부분이 될 것 같아. 어떻게하면 알의 내용을 어떤 종류의 문자열로 저장하는 방법을 알 수 있을까요? – Xill

+0

좋아, 몇 가지 예제 코드를 추가했습니다. –

4

사용자 입력을 저장하는 데 적절한 버퍼를 사용하지 않는 것 같습니다.

이 사이트의 크기는 x86 tutorial 개이고 23 섹션으로 나누어 져 있습니다. 하루에 하나씩 섹션이 만들어집니다.

여기 day 14에 그는 사용자로부터 문자열을 읽고 버퍼에 저장 한 다음 다시 인쇄하는 예를 보여줍니다.

+0

나는 명백하게 질문에 답할 것이지만 MIPs 어셈블리에만 익숙하고 x86 어셈블리에는 몇 가지 뚜렷한 차이점이 있습니다. 그 날 튜토리얼을 따르면 원하는 결과를 얻을 수 있습니다. – mmcdole

관련 문제