2017-11-28 25 views
0

콘솔 창에 여러 줄의 문자열을 인쇄하는 데 문제가 있습니다. 프로그램을 실행하여 메뉴를 표시하면 문자열의 첫 번째 줄만 콘솔 창에 인쇄됩니다.MASM x86 줄 바꿈 문자열 변수를 인쇄하는 방법?

어떻게 여러 줄에 표시되는 문자열 변수를 만들 수 있습니까?

INCLUDE Irvine32.inc 
.386 
.model flat,stdcall 
.stack 4096 

ExitProcess proto,dwExitCode:dword 
.data 
    prompt BYTE "Please choose and option below.",0 
    menu BYTE "Option 1",0  
    BYTE "Option 2",0  
    BYTE "Option 3",0  
    BYTE "Exit", 0 

.code 
main proc 
    mov edx, OFFSET prompt 
    call WRITESTRING 
    call CRLF 
    mov edx, OFFSET menu 
    call WRITESTRING 
    call CRLF 
    invoke ExitProcess,0 
    main endp 
end main 

답변

0

WRITESTRING은 0으로 끝나는 문자열을 인쇄합니다. "Option 1" 다음에 0 바이트를 포함 했으므로 여기서 멈 춥니 다.

asm 소스의 별도 라인은 중요하지 않습니다.. 당신이 쓴 것은


대신, 하는 것입니다 필요

; assembles the same as what you did menu BYTE "Option 1",0, "Option 2",0, "Option 3",0 

로 오브젝트 파일로 동일한 바이트를 조립하여 문자열
에 줄 바꿈을 포함한다. 도스의 경우 CR LF (ASCII 코드 1013)의 2 바이트 시퀀스입니다.
menu BYTE "Option 1", 10, 13, "Option 2", 10, 13 
    BYTE "Option 3", 10, 13, 0 

; break this up into multiple lines in the source however you want 
; I made this intentionally inconsistent to make a point 

(문자열의 끝에 CR의 LF 포함하면 별도에 call CRLF이없는 것을 의미).

+0

문자열을 끝내기 위해 0을 사용하는 한 모든 내용을 한 줄에 입력 할 수 있다는 것을 알지 못했습니다. 정보 주셔서 감사합니다. 나는 그것을 할 수있는 방법이 있다고 생각했지만 어떻게해야하는지에 대한 정보를 찾을 수 없었다. – Maenielwolf