2014-12-09 4 views
-1

32 비트 C++로 작성된 OS 커널에서 작업하고 있습니다. 32 비트 보호 모드를 활성화하고 C++에서 a20 게이트를 활성화하는 방법을 알아야합니다. 그래서 가능하다면 그렇게 말해 줄 수 있습니까? 그렇다면 어떻게 할 수 있습니까? 고맙습니다.C++ - 32 비트 보호 모드

+0

나는 그것이 반 자살과 관련되어 있음을 기억한다. 재설정. 인텔에서 설명서를 찾을 수 있습니다. –

+0

osdev.org의 자료를 참조하십시오. 아마도 어셈블리에서 보호 모드와 a20을 사용 가능하게하고 나중에는 C++ 커널로만 이동합니다. 또는 멀티 부트 로더를 사용하십시오. – Jester

+0

링크가 있습니까? 건배와 hth. - Alf – crank123

답변

5

C 및 C++은 "a20 게이트"가 무엇인지와이를 활성화하는 방법을 알지 못합니다. "32 비트 보호 모드"와 동일합니다. 이것은 특정 기계 코드를 통해 수행되어야합니다. 자, 올바른 질문은 C++ 프로그램에서이 코드를 호출하는 방법입니다.

1) 가장 간단한 방법은 asm, __asm 또는 __asm__ 블록을 사용하여 임베디드 어셈블리 코드를 사용하는 것입니다 : C++ 컴파일러에 따라 그 작업을 수행하는 여러 가지 방법이있을 수 있습니다. 그것을 사용하는 방법에 대한 C++ 컴파일러 문서를주의 깊게 읽으십시오. 모든 컴파일러가이를 지원하는지 확신 할 수 없습니다.

2) 어셈블러를 사용하여 C++ 응용 프로그램에서 호출 할 수 있도록 어셈블리 코드를 사용하여 코드를 작성합니다. extern "C"을 사용하여 C++ 프로그램에서 함수를 선언 할 수 있습니다.

3) 어셈블리 코드를 바이트 배열에 넣고 배열의 주소를 함수 포인터로 변환하여 호출하십시오. 기계 코드와 C/C++ 호출 규칙에 대한 많은 지식이 필요합니다.

+0

정말 고마워요. 이것은 정말로 유용했습니다. 나는 투표를 할 것이지만, 나는 단지 두 번의 반복만을 갖는다. – crank123