我将一些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的名字"命名"代码部分,因此标签可以作为范围。
如何调整程序以避免需要本地标签?
答案 0 :(得分:2)
NASM提供部分带前缀的本地标签功能,以便您可以制作过程本地标签。没有MASM等效设置使标签始终是程序本地的,因为NASM本身并不真正认识到程序的存在。它只保留标签的记录,我们有时将其用作程序入口点而没有NASM真正能够区分这些标签或任何其他非本地标签。
您可以使用%%
而不是句点作为前缀的宏本地标签,允许您在同一个函数中多次使用相同的宏,但就是这样。