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 码 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 来终止字符串,我就可以在一行上键入所有内容。感谢您的信息。我以为有办法做到这一点,但找不到任何关于如何做到的信息。

以上是关于MASM x86 如何打印多行字符串变量?的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助使用 masm 以 80x86 汇编语言连接两个字符串

如何在程序集的循环内打印字符串(MASM)

masm x86 程序集崩溃中的 DOS 中断

在汇编 (MASM) 中显示字符串的偶数字符

需要从MASM转换到NASM

MASM 8086 在文本前出现乱码