NASM Assembler,如何定义标签两次?

时间:2014-11-17 18:05:53

标签: assembly compilation label preprocessor nasm

我有不同的“* .asm”文件需要包含在“main.asm”文件中。 我面临的问题是:在许多文件中,我已经以相同的方式(即使用相同的名称)声明了像“loop”,“forLoop”,“whileTag”等标签... 当我尝试%include“file1.asm”和%include“file2.asm”时,它给我一个编译错误。它说我不能两次声明相同的标签(即file1.asm和file2.asm,两者都声明了“loopHere”标签)。 我该如何解决这个问题? 感谢

本地标签的问题是: 说我有

文件1:

.label1
;staff

现在文件2:

;code that uses label1
.label1 ; definition after usage

现在,如果我:

%include "file1.asm"
%include "file2.asm"

生成的main.asm将是:

.label1
;staff
;code that uses label1
.label1 ; definition after usage

第3行的代码实际上会使用第1行的label1而不是第4行的

来自NASM手册的报价

  

以单个句点开头的标签被视为本地标签,这意味着它与之前的非本地标签相关联。

我的坏,我才意识到,如果我:

文件1:

file1: ; add this label
.label1
;staff

现在文件2:

file2: ; add this label
;code that uses label1
.label1 ; definition after usage

一切都很棒!

使用以下方式访问它们:

file1.label1
file2.label1

1 个答案:

答案 0 :(得分:2)

使用本地标签。本地标签以点开头。

Someproc:
.Somelabel:
Ret

Anotherproc:
.Somelabel:
Ret

它们对于它们所处的过程是可见的。您可以通过在它们前面添加proc名称来从任何地方访问它们。

Someproc:
.Somelabel:
Ret

Anotherproc:
.Somelabel:
jmp Someproc.Somelabel