MASM x86 如何打印多行字符串变量?
Posted
技术标签:
【中文标题】MASM x86 如何打印多行字符串变量?【英文标题】:MASM x86 How to print multi-lined string variable? 【发布时间】: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
【问题讨论】:
【参考方案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 码 10
和 13
)。
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 来终止字符串,我就可以在一行上键入所有内容。感谢您的信息。我以为有办法做到这一点,但找不到任何关于如何做到的信息。以上是关于MASM x86 如何打印多行字符串变量?的主要内容,如果未能解决你的问题,请参考以下文章