3

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

例如:

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:]

4

1 回答 1

3

NASM 文档The colon after a label is also optional.我猜这意味着两段代码都创建了一个名为msg.

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

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

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

于 2013-07-28T23:01:14.770 回答