2010-07-17 4 views
3

이 소형 콘센트 부트 로더는 Tutorial에서 가져 왔습니다. 부트 로더 코드는 here입니다. 이 부트 로더에서 C++을 실행할 수 있는지 알고 싶습니다. 나는 다음과 같은 간단한 일을하고 싶다 :어셈블리 부트 로더에서 C++을 호출하십시오.

#include <iostream> 
using namespace std; 

int main() { 
cout << "Hello World!\n"; 
return 0; 
} 

그러나 나는 그것이 2 가지 이슈를 제기한다. 먼저 C++ 파일을 컴파일 된 bin 파일에 포함시켜야합니다. 또한 #include <iostream> ... iostream은 컴파일 된 C++ 파일에 포함되었거나 부트 로더의 일종의 라이브러리에 포함시켜야합니까?

어떤 도움을 주셔서 감사합니다. 정말 고마워요.

+0

대부분이 이전 질문에서 이미 답변되었습니다. – greyfade

+0

질문을 링크 할 수 있습니까? – nosedive25

답변

2

어셈블리 코드에서 C 함수를 호출하기 위해 개략적이다 : 여기, 총회에서 메인 함수를 호출에 관해서는

당신이 할 줄거야. gcc 대신 g ++을 사용하면 C++ 코드를 사용할 수 있습니다. 그러나 나는 당신의 질문에 대한 이전의 대답 중 일부가 분명히 지적했듯이 라이브러리 함수를 사용할 수 없기 때문에 얼마나 많은 'C++'을 쓸 수 있을지 궁금해합니다. 마침내 C++ 코드에서 어셈블리를 작성할 수 있습니다!

cboot.c

void bootcode(void) { 
/* code */ 
} 

boot.asm

# some where you have this line 
call bootcode 
# more code to follow 

당신은 컴파일하고 실행 음식물를 만드는 그들에게이 방법을 연결합니다.

nasm -f boot.o boot.asm 

gcc -c cboot.c 

gcc -o prog cboot.o boot.o 
+0

잘 모르겠습니다. g ++하지만 잘 보지 못합니다. 감사 – nosedive25

3

외부 종속성이나 시스템 호출이있는 코드를 실행할 수 없습니다. 그들은 모두 시스템이 가지고 있지 않은 커널에 호출을하다 어떤 식 으로든를 호출 할

  1. 때문에, 표준 라이브러리 함수, 즉 모든 IO 기능 (C의 표준 입출력, IOSTREAMS)을 많이 바 프로그램 은 커널입니다.
  2. 사용자 공간에 동적 링커가 필요한 외부 공유 라이브러리 (예 : libc, libstdC++) 형태로 제공됩니다.

특정 하드웨어의 커널 공간에서 작동하는 표준 라이브러리를 롤업해야합니다.

+0

흠 "일종의"시작 라이브러리가 있거나 OS 의존적이어야합니까? – nosedive25

+0

@ happyCoding25, 나도 몰라요. 예를 들어,이 문서에는 "hello world"를 작성하는 예제가 포함되어 있습니다. 문자열을 x86의 비디오 메모리에 넣으십시오. http://www.osdever.net/tutorials/pdf/ckernel.pdf (화면에 표시하십시오) –

+0

오, 고마워요. libstdC++에 대해 불량 구글이라고 생각합니다. – nosedive25

0

우선, iostream이나 cout을 구현하거나 STL을 부트 로더에 정적으로 연결하지 않으면 사용할 수 없습니다. STL은 아마도 booloader 특정해야합니다. 여기,

extern _main 
;... 
call _main 
관련 문제