我有不同的“* .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
答案 0 :(得分:2)
使用本地标签。本地标签以点开头。
Someproc:
.Somelabel:
Ret
Anotherproc:
.Somelabel:
Ret
它们对于它们所处的过程是可见的。您可以通过在它们前面添加proc名称来从任何地方访问它们。
Someproc:
.Somelabel:
Ret
Anotherproc:
.Somelabel:
jmp Someproc.Somelabel