【问题标题】:Assembly programming - "variables" defined using (what looks like) labels, or variable names?汇编编程 - 使用(看起来像)标签或变量名称定义的“变量”?
【发布时间】:2013-07-28 21:51:39
【问题描述】:

我在“定义”的程序集中看到了使用两种语法的“变量”,第一种看起来像标签,第二种看起来像变量名。两者可以互换使用吗,或者每个使用都有特定的原因?

例如:

msg db "Hello World",0x0a

看起来有点像 C/C++ 中的变量名,而

msg: db "Hello World",0x0a

看起来有点像 asm 或 C/C++ 中的标签。

  1. 是否有理由使用其中一种语法?

  2. 它们有什么区别?

  3. 如果我msg: db "Text",0x0a,那么我可以mov rax, [msg] 还是需要mov rax, [msg:]

【问题讨论】:

    标签: assembly nasm intel-syntax


    【解决方案1】:

    来自NASM documentationThe colon after a label is also optional. 我猜这意味着两段代码都会创建一个名为msg 的标签。

    1. 代码风格、可读性和一致性是使用其中之一的原因。但鉴于语义相同,我想这是唯一的原因。

    2. 鉴于x: db 0x db 0,似乎两者都创建了一个名为x 的标签。

    3. 我会说你会做mov rax, [msg]。这是因为在 NASM 中,当您创建标签时,名称中不包含末尾的分号,而是提示汇编器已到达标签名称的末尾。

    【讨论】:

    • 再次感谢 JesusPlusPlus,这是一个很好的答案 - 简短而清晰
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多