使用程序范围来避免本地标签?

时间:2015-11-11 18:30:17

标签: nasm

我将一些MASM代码移植到NASM。除了需要本地标签外,该港口相当轻松。需要本地标签,因为MASM代码有多个程序,并且一些标签对于程序是通用的。例如

;; MASM code
_FOO PROC
  ...
Exit_Failure:
  ...
Exit_Success:
  ...
  ret
_FOO ENDP

_BAR PROC
  ...
Exit_Failure:
  ...
Exit_Success:
  ...
  ret
_BAR ENDP

在NASM下,我必须使用本地标签。例如:

;; NASM code
  global _FOO
  section .text

_FOO:
  ...
.Exit_Failure:
  ...
.Exit_Success:
  ...
  ret

当代码与调试信息组合在一起时,它会产生眼睛的标签(对我来说)。代码将生成标签_FOO.Exit_Failure_FOO.Exit_Success等。除了是一个眼睛,他们使移植复杂化,因为我必须在每个标签上添加一个点。

我似乎无法找到NASM的名字"命名"代码部分,因此标签可以作为范围。

如何调整程序以避免需要本地标签?

1 个答案:

答案 0 :(得分:2)

NASM提供部分带前缀的本地标签功能,以便您可以制作过程本地标签。没有MASM等效设置使标签始终是程序本地的,因为NASM本身并不真正认识到程序的存在。它只保留标签的记录,我们有时将其用作程序入口点而没有NASM真正能够区分这些标签或任何其他非本地标签。

您可以使用%%而不是句点作为前缀的宏本地标签,允许您在同一个函数中多次使用相同的宏,但就是这样。