2010-11-25 8 views
4

운영 체제없이 실행될 수있는 C 또는 C++ 프로그램을 만들 수있는 방법이 있습니까? 그러면 왼쪽 위 모서리에 빨간색 픽셀과 같은 것을 그릴 수 있습니까? 나는 항상 이러한 유형의 응용 프로그램이 어떻게 만들어 졌는지 궁금해했습니다. Windows는 C로 작성되었으므로이를 수행하는 방법이 있다고 상상해보십시오.X86 용 기본 응용 프로그램 만들기?

감사

당신은 부트 스트 래퍼하고, 인터럽트에 의해 수동으로 VGA 모드를 설정 기본 비디오 버퍼에 대한 핸들을 잡고 다음 0 번째 바이트에 값을 쓰는 포함하는 페이로드에 이어 로더 조합을 작성해야

답변

3

도서관 지원이 전혀없는 베어 프로세서 용으로 작성하는 경우 하드웨어 설명서를 모두 얻고 비디오 메모리에 액세스하는 방법을 파악한 다음 하드웨어에서 필요한 모든 작업을 수행해야합니다 디스플레이에 그려지는 픽셀 (또는 신호음의 소리 또는 디스크에서 읽은 메모리 블록 등).

운영체제를 사용하는 경우 장치 드라이버를 사용하여이 모든 것을 알 수 있습니다. 운영 체제가없는 플랫폼의 경우에도 프로그램이 매일 작성되지만 맨손으로 프로세서를 사용하는 경우는 거의 없습니다. 많은 소규모 MPU에는 지원 라이브러리 (일반적으로 지원하는 주변 장치를 조작 할 수있는 루틴 집합)가 있습니다.

0

운영체제 없이는 더 동적 libc의 의미하지 않는다 로더를 가지고하기는 어렵습니다. 정적으로 링크해야 할뿐만 아니라 어셈블리어에 꽤 많은 양의 부트 스트랩 코드를 작성해야합니다 (링크 할 수있는 오브젝트 파일로 제공 될 수도 있음). 또한 시스템이 무엇이든 상관없이 VESA 비디오 모드를 사용할 수 있습니다 (자신의 그래픽 드라이버와 서브 시스템을 쓰지 않으려는 경우는 제외).

1

확실히 할 수 있습니다. 일반적으로 C로 코드를 작성하면 표준 라이브러리가 없어도 모든 것을 직접해야합니다. 픽셀을 설정하려면 대개 화면의 실제 주소에 대한 포인터를로드하고 해당 포인터에 올바른 값을 쓰십시오. 또는 PC에서 VESA BIOS 사용을 고려할 수 있습니다. 모든 정직한면에서 MS-DOS를위한 대부분의 코드가 작성된 방법과 매우 비슷합니다 (대부분 MS-DOS를 사용하여 디스크의 데이터를 읽거나 쓰지 만 그 밖의 경우는 거의 없습니다).

0

OS에는 일반적으로 존재하지 않지만 존재하지는 않습니다. 처음에는 드라이브의 MBR에서 실행되는 asm 스텁입니다. MBR을 참조하십시오. x86 프로세서의 경우 일반적으로 16 비트 처리 코드이며 일반적으로 여기에서 운영 체제 코드로 이동하고 운영 체제 및 칩셋에 따라 32 비트/64 비트 모드로 업그레이드합니다.

1

코어 부트 로더와 OS를 부트 스트랩하는 커널 부분이 어셈블리로 작성됩니다. 운영 체제가 부팅되는 방법에 대한 간단한 글은 http://en.wikipedia.org/wiki/Booting을 참조하십시오. 어셈블리를 사용하지 않고 순수하게 C 나 C++ 같은 상위 레벨 언어로 부트 로더 또는 커널을 작성하는 방법은 없습니다.

+0

Linux/x86에는 첫 번째 C 문 앞에 7 개의 어셈블리 인스턴스가 있으므로 분명히 중요합니다. GRUB도 역시 C 언어입니다. 그래서 여러분은 아주 가깝게 될 수 있습니다. 게다가, 이것에 대한 근본적인 이유가 없습니다. 컴파일러는 이미'main'을위한 특별한 코드를 생성합니다; 거기에 필요한 어셈블리를 포함 할 수 있습니다. – MSalters