汇编编程 - 使用(看起来像什么)标签或变量名定义的“变量”?

时间:2013-07-28 21:51:40

标签: assembly nasm intel-syntax

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

例如:

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

1 个答案:

答案 0 :(得分:3)

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

  1. 代码风格,可读性和&一致性浮现在脑海中作为使用其中一种的原因。但是看到语义是一样的,我想这是唯一的原因。

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

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