2014-04-16 2 views
3

저는이 프로젝트를 가지고 있습니다 : 최신 컴파일러로 CP/M-86 실행 파일 (CMD 파일)로 C/C++ 프로그램을 컴파일하십시오. 대상 아키텍처는 16 비트 x86입니다. 내가 미쳤다고 생각할 수도 있지만 재미있게하고 CP/M-86 및 저급 x86 프로그래밍에 대해 배우기 위해이 작업을 수행하고 있습니다.CP/M-86 실행 파일 (CMD)에 C/C++를 컴파일하려면 어떻게해야합니까?

저는 x86 어셈블러 프로그래밍에 대한 지식이 거의 없지만 ASM86 및 GENCMD를 사용하여 CMD 파일을 생성 할 수있는 "Hello World"예제를 작성했습니다. 그리고 그것은 작동합니다. ASM86은 H86 파일을 생성하는 CP/M-86 용 어셈블러 프로그램입니다 (인텔 아는 바에 따르면 인텔 16 진 코드). GENCMD는이 HEX 파일을 읽고 CMD 실행 파일을 만듭니다. CMD는 DOS와 Windows에서 알 수있는 EXE 실행 파일의 CP/M-86에 해당합니다.

필자는 16 비트 x86 NASM 코드를 컴파일하고 링크하여 CP/M-86 컴퓨터에서 실행할 수있는 작업용 CMD를 출력하는 "최신"도구를 사용합니다. Linux 컴퓨터에서 완전히 빌드하십시오. 그러나 호환 가능한 NASM 코드를 생성하는 C/C++ 컴파일러가 필요합니다. 또는 CMD로 쉽게 변환되는 일종의 편평한 바이너리 일 수도 있습니다.

두 번째로 시스템 호출이 있습니다. 필자는 아마도 인라인 어셈블리를 사용하여 인쇄와 비슷한 기능을 만들고이를 테스트 할 수 있습니다.

int main() 
{ 
    return 0; 
} 

C 컴파일러는 CP/M-86 존재하지만, 이들은 매우이다 : (? 어떤 시스템 호출을하지 않는 희망과) 지금은 그냥 아무것도하지 않고이 프로그램을 컴파일하려면 오래되고 꽤 많이 쓸모없는. 특히 C++을하고 싶다면, 정말로하고 싶다. 그래서 gcc 나 llvm-clang과 같은 최신 컴파일러로 끝내야 만합니다.

최후의 수단은 16 비트 DOS 호환 EXE를 컴파일 한 다음 일부 시스템 호출 번역을 수행하는 것일 수 있지만 이는 부정 행위이며 여전히 많은 시간이 소요됩니다.

목표를 달성하려면 어떻게해야합니까? 미리 감사드립니다. 어떤 조언도 환영합니다 :-)

+2

[Watcom] (http://www.openwatcom.org/index.php/Main_Page)은 여전히 ​​유지 관리되며 16 비트 실행 파일 생성을 지원합니다. 체크 아웃 할 수 있습니다. –

+0

매우 작은 프로세서로 컴파일하는 C 하위 집합이 있습니다. MIT의 미디어 랩에서는이 중 일부를 사용했습니다. – Jiminion

+1

CP/M x86 또는 DOS를 정말로 의미합니까? CP/M은 여러 해 동안 죽었습니다. –

답변

1

어떻게 목표를 달성 할 수 있습니까?

C 컴파일러를 사용하고 있다면 llvm-cbe을 찾고 있다고 생각합니다. 이것은 clang-llvm (그리고 내가 생각하는 모든 llvm 컴파일러)의 백엔드이고, llvm 중간 표현 (IR)을 취하여 C으로 변환합니다. 따라서 컴파일러가 c 인 모든 컴퓨터에서 C++ 17 코드를 컴파일 할 수 있습니다.

약이 코드 때문에 stdout/stderr/stdin, 와 libc 일, open/close (및 기타 파일 관련 재료)를 호출합니다 리눅스에

int main() 
{ 
    return 0; 
} 

또한 약 exit_group, 나는 확실하지 전화 ms-dos,하지만 최소한 시스템에 종료 코드를보고해야합니다.