이론적으로는 모든 언어로 BIOS를 작성할 수 있지만, 현대는 대부분의 BIOS가 Assembly, C 또는이 둘의 조합을 사용하여 작성됩니다 .
BIOS는 실제 하드웨어 시스템에서 이해할 수있는 머신 코드로 컴파일 할 수있는 언어로 작성해야합니다 . 이것은 직접 또는 중간 해석 언어 (Perl, Python, PHP, Ruby, Java, C #, JavaScript 등)를 BIOS 작성에 적합한 것으로 제거합니다. (이론적으로는 정적 머신 코드로 직접 컴파일하거나 어떤 식 으로든 BIOS에 인터프리터를 내장하기 위해 이러한 언어 중 하나를 구현할 수 있습니다. 예를 들어 Java 용 포기 GCJ 프로젝트 가 있습니다.)
대부분의 OEM은 American Megatrends 및 Phoenix Techologies 같은 회사의 독점적 인 일반 BIOS 구현을 확장하여 BIOS를 구현합니다 . (아마도 그 회사 중 하나가 컴퓨터의 첫 부팅 화면에 표시되어있는 것을 보았을 것입니다.) 이러한 구현에 대한 소스 코드는 공개적으로 제공되지 않지만 일부 유출되었습니다. 나는 이것을 C 및 어셈블리 소스 코드에 직접 연결하고 싶지 않지만 인터넷 에이 소스 코드가 논의 되는 사람들을 위해 논의되는 곳이 있습니다.
고성능 및 게임 시장을 목표로하는 하드웨어 제조업체와 같은 일부 하드웨어 제조업체는 정확한 구현을 위해 설계된 사용자 지정 기능, 통계 및 매력적인 사용자 인터페이스로 BIOS 구현을 포화시킵니다. 이러한 기능 중 다수는 American Megatrends 및 기타 업체에서 생산 한 일반 제품에서 제공되는 기능을 뛰어 넘습니다. 불행히도, 이들 회사는 종종 소스 코드의 릴리스를 보안 위험으로 간주 하므로 이들 하이 엔드 구현에 대해서는 알려진 것이 거의 없습니다. 물론 그러한 BIOS 구현에 액세스하고 디 컴파일하는 방법을 찾을 수 있지만 그렇게하는 것은 어렵고 불법 일 수 있습니다.
원래 기계 코드를 생성해야하기 때문에 원래 질문으로 돌아가서 BIOS는 원시 기계 코드 컴파일러가 지원하는 프로그래밍 언어 로 구현되어야 합니다 . 그러한 언어가 많고 지난 수십 년 동안 확신 할 수 있지만 여러 언어가 실험에 사용되어 왔으며, 공개 된 모든 BIOS 구현은 C 및 / 또는 어셈블리의 조합에 구체적으로 의존합니다. 이 결론을 내리기 위해 살펴본 오픈 소스 BIOS 구현에는 OpenBIOS , tinyBIOS , coreboot , Intel BIOS 및 Libreboot가 포함됩니다. 또한 오늘날에는 관련이 없지만 C 및 / 또는 어셈블리 규칙을 따르는 매우 오래된 BIOS 구현을 살펴 보았습니다.
하드웨어와 직접 상호 작용하도록 만들어진 다른 소프트웨어를 보는 것도 관련이 있다고 생각합니다. 예를 들어, Linux Kernel , OS X 커널 및 Windows 커널 은 특정 작업에 대한 일부 어셈블리 및 일부 고급 언어를 사용하는 C입니다. 우리는 또한 알고 리눅스에서 하드웨어 드라이버 및 Windows에서 하드웨어 드라이버는 C.에 크게 기록 된
BIOS로 돌아가서 선택한 프로그래밍 언어의 경제성을 고려하는 것도 중요하다고 생각합니다. BIOS는 일반적으로 하드웨어 판매를 보완하기 위해 필요합니다. 최신 BIOS 시스템은 C 및 / 또는 어셈블리로 크게 작성된 것으로 알려져 있습니다. 다른 도구로 이동하면 일반적으로 판매에 부정적인 영향을 줄 수있는 상품 제품으로 간주되는 비용에 상당한 비용이 추가됩니다. Economics 101에 들어 가지 않고도 OEM이 수십 년 동안 입증 된 검증 된 도구에서 벗어나는 것이 가치가 없다는 것을 확신 할 수 있습니다.
물론 BIOS를 작성하는 취미 프로젝트도 있습니다. 이것들도 지금까지 C 및 / 또는 어셈블리를 선택하는 것으로 보입니다. 아마도 언젠가 다른 기술이 사용될 것입니다. 그러나 오늘날의 선택은 잘 정의되어 있습니다.