2011-09-25 2 views
1

이 예제를 실행하면 오류가 발생합니다. PROC1 PROC FAR을 제거한 후 "기호 유형 충돌"오류가 발생합니다./coff : "시작 주소가 필요한 시작 밑줄 : START"윈도우 7의 masm32에서 "error A2006 : undefined symbol"이 (가) 64 비트입니까?

Microsoft (R) Macro Assembler 버전 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. 판권 소유.

조립 : D : \ 리눅스 \ test1.asm의 D : \ 리눅스 \의 test1.asm (28) : 오류 A2006 : 정의되지 않은 기호는 : \ 리눅스 \의 test1.asm (16) :
D를 시작 오류 A2004을 : 기호 유형 충돌
D : \ 리눅스 \의 test1.asm (28) : 오류 A2148 : 식에 잘못된 기호 유형 : STAR

 TITLE EXAMPLE 
DATA SEGMENT 
VARX DW   6 
VARY DW   7 
RESULT DW   ? 
DATA ENDS 
STACK1 SEGMENT PARA STACK 
     DW   20H DUP(0) 
STACK1 ENDS 
COSEG SEGMENT 
PROC1 PROC FAR 
     ASSUME CS:COSEG, DS:DATA, SS:STACK1 
START: PUSH DS 
     MOV  AX, 0 
     PUSH AX 
     MOV  AX, DATA 
     MOV  DS, AX 
     MOV  DX, VARX 
     MOV  DX, VARY 
     MOV  CL, 3 
     SAL  DX, CL 
     SUB  DX, VARX 
     SAR  DX, 1 
     MOV  RESULT, DX 
     RET 
PROC1 ENDP 
COSEG ENDS 
     END START 

부록 :

시작을 제거한 후에는 왼쪽 오류 왜이 오류가 발생합니까? MOV AX, DATA?

Microsoft (R) Macro Assembler 버전 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. 판권 소유.

조립 : D : \ 리눅스 \ test1.asm의 D : \ 리눅스 \의 test1.asm (16) : 오류 A2004 : 심볼 유형 충돌

답변

2

START는 절차 내에 정의되어 있기 때문에, 그렇지 않은 유효한 식별자.

또한 작동했다면 버그가 발생합니다. PROC는 스택 프레임을 설정하기 위해 확장되는 매크로이므로 레이블 START는 실제로 코드의 시작 부분이 아니며 END START는 프로그램의 시작점이 START임을 나타냅니다. 프로그램을 주 프로 시저로 시작하려면 END PROC1과 같이 END 다음에 해당 프로 시저의 이름 만 사용해야합니다.

진입 점을 프로 시저의 어딘가에 설정하려는 경우 OPTIONS NOSCOPED 및 OPTION SCOPED로 레이블을 묶을 수 있으므로 레이블은 프로 시저 내에서 공개되지 않도록 공개됩니다.

+0

16 행에서 시작, 왼쪽 오류 제거 mov ax, data, 기호 유형 충돌 –

+0

조립할 때/coff 옵션을 사용하고 있습니다. 이는 실제로 Win32 개발에만 필요합니다. Win32에서는 세그먼트 주소를 사용하지 않으므로 사용할 수 없습니다. –

관련 문제