2015-01-20 2 views
3

이 간단한 어셈블리 프로그램 asm1.asm이 있는데 컴파일하려고하면 오류가 발생합니다. 이것은 내가이 오류경고 : 콜론이없는 행의 라벨에만 오류가있을 수 있습니다.

C:\Users\David\Desktop>nasm -f elf asm1.asm 
asm1.asm:23: warning: label alone on a line without a colon might be in error 

나는 그래서 그것을 사소한 뭔가 같아요하지만 누군가가 경고의 원인을 말씀 해주십시오 수있는 어셈블리에 새로 온 사람을 얻는 코드

;--- constant variables --- 
SECTION .data 

    msg: db "Hello World!", 10, 0; 10: carriage return, 0: NULL end of msg (stop) 

;--- dynamic variables --- 
; SECTION .bss 

;--- assembler code --- 
SECTION .text 

extern _printf 
global _main     ; 
_main:       ; void main() { 
    push ebp ;basepointer  ; /* creation of the stack */ 
    mov ebp, esp ;stackpointer ; 

    push msg     ; /* pushing memory address */ 
    call _printf     ; /* call printf */ 

    mov esp, ebp    ; /* function body */ 
    pop ebp      ; 
    return;      ; } 

입니까?

+3

경고가 아닌 오류입니다. 그 뒤에 콜론을 붙이면 NASM은 당신이 라벨을 만들고 싶어한다는 것을 압니다. 콜론없이 레이블을 만들 때 NASM은 다음과 같이 생각합니다. 레이블로 취급 하겠지만 단 하나의 단어로 작동 코드를 잘못 입력 한 것일 수 있습니다. 나는 그것에 대해 사용자에게 경고 할 것이다. http://www.nasm.us/doc/nasmdoc3.html – Blechdose

+1

asm1.asm : 23은 "**이 오류/경고는 ** asm1.asm ** 파일의 ** ** ** 온라인에 있습니다."NASM은 " 나는 이것을 라벨로 취급하고 있지만 콜론이 없으며 지시 사항으로 보이지 않습니다. "- 그래서 경고를 무시하는 것은 안전하지 않습니다 ... – Magoo

+0

예,이 경우에는 의도하지 않았습니다. – Blechdose

답변

8

"반환 값"은 무엇입니까? 선? 이것은 유효한 x86이 아니며 어셈블러가 라벨을 붙이려 고 생각하는 것을 혼동시킬 수 있습니다.

+0

맞습니다. 대신에 'ret'여야합니다. 감사합니다. – sedsiv

+4

@DavidSeres이 질문을 답으로 표시하려면 왼쪽의 체크 표시를 클릭하십시오. 그러면 나머지는 낭비하지 않게됩니다. 'C는'extern _printf'와'global _main'과'_main :'이어야하지만, 기술적으로는 다른 질문입니다. – user3386109

+0

Can 당신은 창문에 대한 좋은 튜토리얼을 추천 해 주시겠습니까? – sedsiv

관련 문제