2014-11-17 5 views
0

"main.asm"파일에 포함되어야하는 "* .asm"파일이 다릅니다. 제가 직면 한 문제는 : 많은 파일에서 "루프", "forLoop", "whileTag"등과 같은 레이블을 선언했습니다 ... 동일한 방식으로 (즉, 같은 이름으로) 시도 할 때 %는 "file1.asm"을 포함하고 %는 "file2.asm"을 포함하므로 컴파일 오류가 발생합니다. 동일한 라벨을 두 번 선언 할 수 없다 (즉, file1.asm 및 file2.asm, 둘 다 "loopHere"라벨이 선언되어 있음). 어떻게 해결할 수 있습니까? 감사NASM 어셈블러, 라벨을 두 번 정의하는 방법은 무엇입니까?

지역 레이블 문제는 :

.label1 
;staff 

이제 2 파일 : 내가

이 파일 1이 말

;code that uses label1 
.label1 ; definition after usage 

을 이제 경우 I :

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

결과 main.asm은 다음과 같습니다

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

3 행의 코드가 실제로 수동

NASM에서 라인에서 라인 하나 안 하나에 4

견적을 LABEL1 사용합니다 단일 마침표로 시작하는 레이블은 지역 레이블로 취급됩니다. 이는 이전의 비 국지 레이블과 연관됨을의 L합니다. 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

나는 각 레이블에 대한 새로운 이름을 가지고 올 것입니다,하지만 난 쓰기 각 루프에 대한 새로운 루프 이름을 발명 편안하지 않습니다, 라벨 고유하게 NASM을 알 수있는 방법이 있어야합니다. – Fresco

+0

[local labels] (http://www.nasm.us/doc/nasmdoc3.html#section-3.9)으로 해결할 수 있습니다. – rkhb

+0

링크를 포함하지 말고 링크를 포함 할 수도 있습니다. – Jester

답변

2

:와

액세스를. 지역 레이블은 점으로 시작합니다.

Someproc: 
.Somelabel: 
Ret 

Anotherproc: 
.Somelabel: 
Ret 

그들은 그들이에있는 시저에 볼 수 있습니다. 당신은 시저의 이름을 앞에 붙여 어디서나 액세스 할 수 있습니다.

Someproc: 
.Somelabel: 
Ret 

Anotherproc: 
.Somelabel: 
jmp Someproc.Somelabel