【问题标题】:MASM (8086) assembly language line continuationMASM (8086) 汇编语言行继续
【发布时间】:2017-01-11 07:34:38
【问题描述】:

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

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

我曾经读过“\”符号用于行继续,但我在 MASM 中遇到错误,因为“\”符号不起作用。

【问题讨论】:

  • 行延续通常是用我知道的编程语言而不是汇编语言完成的(尽管我只与 lc3 进行过交互)。至少对于 lc3 这不是你能做的。我也建议反对它,因为这不会使其更具可读性。
  • 感谢 gabeio 回答我的问题,我也同意它不会使代码更具可读性,但是我要考试了,我想知道它,以防老师问我这样我就知道该说什么了,我想我会确切地告诉他您所说的内容,这不会使代码更具可读性:D。
  • \ 延续应该在MASM 6.0+ 中工作,并且肯定在NASM 中工作。目前尚不清楚您使用的是什么版本...也许将该信息包含在您的问题中。
  • 我使用的是版本 5,我会用谷歌搜索更新的版本,如果你有 MASM 6.0+ 的链接,请把它放在 cmets 中 :),非常感谢 :))跨度>

标签: assembly x86 masm x86-16


【解决方案1】:

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

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

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 编写的旧程序。

无论如何,如果教师在考试中询问这种类型的句法深奥,他们在问题方面真的是在摸底。而且,如果您对其他所有事情都非常了解以至于担心这一点,那么您将通过考试。

【讨论】:

    猜你喜欢
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多