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 

として、あなたのオブジェクトファイルに同じバイトを組み立て、あなたの文字列で改行が含まれます。 DOSのために、これは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を使用して1行にすべてを入力することができることを知りませんでした。情報ありがとうございました。私はそれを行う方法があると仮定しましたが、どのように情報を見つけることができませんでした。 – Maenielwolf

関連する問題