我在学习8086的汇编语言,想知道有没有换行符,例如:

    mov ah,\
    09
    mov dx,offset msg
    int 21h

我读过一次,'\' 符号用于行延续,但我在 MASM 中遇到错误,因为 '\' 符号不起作用。

最佳答案

MASM 5.1 中引入了换行符。它是单个反斜杠字符 ( \ ),并且必须作为行中的最后一个非空格字符放置。这与您在问题中建议的语法基本相同,将单个逻辑行分解为两个或多个物理行。

从 MASM 6.1(可能是 6.0;我找不到该版本的手册副本)开始,您可以在行继续反斜杠后放置注释。这些被有效地视为空格,允许您编写如下代码:

mov ah,  \          ; continue onto the next line
    09
mov dx, offset msg
int 21h

但我同意评论者的意见——这不太可能提高代码的可读性。我用汇编语言编写了很多代码,但从未发现需要这样做。汇编语言助记符足够短,我无法想象为什么即使保持 80 列的宽度,您的指令空间也会用完。

另请注意,在 MASM 6.1 中,初始值设定项中的尾随逗号意味着该行继续到下一行。因此,以下声明是合法的:
EvenNumbers DB  02h, 04h, 06h, 08h,
                0Ah, 0Ch, 0Eh, 0Fh

OutputStr DB  "Hello ",
              "world!"

这是换行到第二行可能有意义的唯一地方,并且无需繁琐的语法即可支持。

此版本还将每行的最大字符数从 128 个提高到 512 个。确实没有理由使用早于 6.1 的 MASM 版本。即使您需要编译分段的 DOS 程序,MASM 6.1 也会这样做,并且与用 MASM 5.1 编写的旧程序完全兼容。

无论如何,如果教师在考试中询问这种句法秘诀,他们真的是在问问题。如果您对其他一切都非常了解以至于担心这一点,那么您将通过考试。

关于assembly - MASM (8086) 汇编语言行延续,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41585136/

10-12 18:42