2011-09-03 2 views
0

64 비트 OS X 컴퓨터에서 nasm을 사용하여 this OS을 컴파일하려고합니다. 그러나 어셈블러는이 코드가 32 비트가 아니라 64 비트라는 사실을 알지 못하는 데서 오는 오류를 알려주고 있습니다. 어떻게하면 코드를 수정하지 않고도이 문제를 해결할 수 있습니까?이 코드가 64 비트임을 인식하려면 어떻게해야합니까?

오류는 :

$ nasm kernel64.asm -o kernel64.sys 
init_64.asm:153: error: symbol `lodsq' redefined 
init_net.asm:38: error: symbol `stosq' redefined 
init_net.asm:40: error: symbol `stosq' redefined 
init_net.asm:42: error: symbol `stosq' redefined 
init_net.asm:49: error: symbol `stosq' redefined 
init_net.asm:51: error: symbol `stosq' redefined 
init_net.asm:53: error: symbol `stosq' redefined 
syscalls/string.asm:363: error: parser: instruction expected 
syscalls/screen.asm:264: error: symbol `jrcxz' redefined 
syscalls/screen.asm:264: error: parser: instruction expected 
syscalls/debug.asm:23: error: symbol `pushfq' redefined 
syscalls/misc.asm:119: error: symbol `jrcxz' redefined 
syscalls/misc.asm:119: error: parser: instruction expected 
syscalls/misc.asm:126: error: symbol `jrcxz' redefined 
syscalls/misc.asm:126: error: parser: instruction expected 
syscalls/misc.asm:132: error: symbol `jrcxz' redefined 
syscalls/misc.asm:132: error: parser: instruction expected 
syscalls/misc.asm:326: warning: numeric constant 0x23D8AD1401DE7383 does not fit in 32 bits 
syscalls/smp.asm:121: error: symbol `stosq' redefined 
syscalls/smp.asm:123: error: symbol `stosq' redefined 
syscalls/smp.asm:179: error: symbol `lodsq' redefined 
syscalls/smp.asm:181: error: symbol `lodsq' redefined 
drivers/net/rtl8169.asm:219: error: symbol `stosq' redefined 
drivers/net/i8254x.asm:195: error: symbol `stosq' redefined 
drivers/net/i8254x.asm:200: error: symbol `stosq' redefined 
interrupt.asm:102: error: symbol `iretq' redefined 
interrupt.asm:116: error: symbol `iretq' redefined 
interrupt.asm:166: error: symbol `iretq' redefined 
interrupt.asm:239: error: symbol `iretq' redefined 
interrupt.asm:307: error: symbol `iretq' redefined 
interrupt.asm:322: error: symbol `iretq' redefined 
interrupt.asm:537: error: symbol `lodsq' redefined 
cli.asm:22: error: symbol `jrcxz' redefined 
cli.asm:22: error: parser: instruction expected 
cli.asm:26: error: symbol `jrcxz' redefined 
cli.asm:26: error: parser: instruction expected 
+0

오류는 무엇 – phoxis

+0

당신의'nasm' 버전은 무엇입니까? – phoxis

+0

@phoxis :'NASM version 0.98.40' – Adrian

답변

1

나는 당신의 NASM 버전이 너무 오래 생각합니다. BareMetal OS 설치 지침 페이지에 2.9.10 (현재) 인 NASM의 최신 릴리스가 사용 중이며 버전 0.98.40을 사용 중입니다.

NASM 2 시리즈 지원 - 64, 그리고 2007 년

이후 NASM의 생산 버전과 BareMetal OS installation manual는 말한다 : 또한 NASM 설명서는 말한다

NASM 것 Assembly 소스 파일을 실행 가능 바이너리 파일로 컴파일하십시오. NASM은 또한 Assembly에서 작성된 모든 응용 프로그램을 컴파일하는 데 사용됩니다. 이전 버전의 NASM이 올바르게 작동하지 않는 경우 최신 버전의 NASM을 사용하고 있는지 확인하십시오.

따라서 최신 버전을 설치하십시오.

http://www.nasm.us/

http://www.nasm.us/doc/nasmdocc.html

+0

내 컴퓨터에 이미있는 버전을 어떻게 덮어 씌울 수 있습니까? – Adrian

+0

다른 문제. 나는 OSX를 사용 해본 적이 없으며, win and * nix 만 사용합니다. nasm에서 소스를 다운로드하고 컴파일하고 설치하십시오 (제공된 스크립트 사용). Checkout : http://www.neuraladvance.com/2009/08/19/compiling-and-installing-nasm-on-mac-os-x/ – phoxis

+1

확인. 고마워. – Adrian