标签,函数的命名约定

时间:2017-01-08 11:08:39

标签: assembly nasm

我有点困惑,但仍未找到明确的答案:我应该将标签命名为" label1"或者用下划线" _label1"?什么是最受欢迎和最容易辨认的方式?我甚至见过一个带点" .label1"如果我没记错的话。

同样的问题适用于功能:" function1"或" _function1"?

2 个答案:

答案 0 :(得分:3)

从代码可维护性的角度来看,前导点和下划线不会向标签添加任何有用的信息,因此如果没有特定需要这些前缀(见下文),您应该摆脱它们。事实上,你可能认为“看起来很花哨”并不足以成为使用它们的理由。

汇编程序有时会使用点来指定标签是 local ,即不将其作为符号导出到目标文件中。这对于不使用您不需要的符号污染全局名称空间非常有用。

其他汇编程序使用点来表示汇编程序指令,并且根本不允许使用符号中的点。

下划线通常由必须与更高级语言集成的汇编程序代码使用。一些C编译器使用下划线为所有导出的符号添加前缀,并且为了能够从C代码调用,汇编程序函数需要遵循此规则。

通常,汇编程序(和/或编译器,如果您与编译代码集成)手册应该能够告诉您特定汇编程序支持或要求的变体。如果手册没有明确告诉您何时以及为什么要使用这些前缀,只需不要使用它们 - 汇编程序标签是自我记录代码的一个(最小和最重要的)部分。如果您不需要,请不要将其浪费在无意义的前缀上。

答案 1 :(得分:0)

对于Microsoft“C”函数,实际函数名称将具有前导下划线。对于32位模式汇编,请在.model指令中包含语言类型:

        .model  flat,c      ;for 32 bit mode only, no underscores needed

这消除了在函数名称中使用下划线的需要。在64位模式下,似乎不允许.model指令,但它似乎默认为.model flat,c。

另一方面,Visual Studio 2015现在“内联”printf(以及其他一些东西),因此尝试从汇编代码调用printf不再有效。我发现将C源文件添加到项目中并将printf放在那里是最容易的,在这种情况下,汇编代码可以调用C源文件创建的printf。