【问题标题】:MASM x86 How to print multi-lined string variable?MASM x86 如何打印多行字符串变量?
【发布时间】:2017-11-28 02:31:58
【问题描述】:

我在将多行字符串打印到控制台窗口时遇到了一些问题。运行程序以显示菜单后,只有字符串的第一行会打印到控制台窗口。

如何创建一个多行显示的字符串变量?

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

【问题讨论】:

    标签: string x86 masm irvine32


    【解决方案1】:

    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,这是一个 2 字节的 CR LF 序列(ASCII 码 1013)。

    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 来终止字符串,我就可以在一行上键入所有内容。感谢您的信息。我以为有办法做到这一点,但找不到任何关于如何做到的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2016-04-08
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多