문제

나는 임베디드 시스템 프로젝트를 진행하고 있으며 패러다임 C ++ IDE에 프로그래밍 방식으로 컴파일러가 포함 된 문제를 해결했습니다. 건물을 자동화하고 싶습니다.

프로세서는 AMD186E입니다. 나는 OS와 함께 일하지 않습니다 - 단지 Barremetal 물건. C ++에서 Real-Mode 16 비트 8086 기계 코드를 생성해야합니다.

내 인터넷 검색은 G ++가 그러한 코드를 구축 할 수 있음을 나타냅니다.

내 질문은 다음과 같습니다.

이 기계 코드를 빌드하도록 G ++를 구성 할 수 있습니까?

이를 수행 할 수있는 다른 C ++ 컴파일러가 있습니까?

도움이 되었습니까?

해결책

나는 현재 GNU를 사용하고 있습니다 as (Binutils와 GCC에 사용 된 어셈블러의 일부)와 나는 다음과 함께 16 비트 어셈블리 코드를 성공적으로 조립했습니다.

as <file>
ld --oformat binary -Ttext 0x0 -e start <file>

내 어셈블리 파일로 시작합니다.

.code16
.globl start
.text
start:

평범한 바이너리가 선을 생략하기 때문에

.globl start
start:

평평한 바이너리는 진입 점이 필요하지 않더라도 단순히 경고를 산출합니다.


내가 어려운 방법을 배운 것;

-Ttext 0x0

그렇지 않으면 중요합니다 .text 세그먼트는 16 비트 주소 지정 범위 외부에서 푸시됩니다 (이유를 묻지 마십시오)

나는 개인적으로 여전히 어셈블리를 배우고 있으므로 이것은 반드시 최선의 방법이 아니라 저의 방식 일뿐입니다.


편집하다: 부트 코드를 작성하는 경우 변경해야합니다.

-Ttext 0x0

에게

-Ttext 0x7c00

이것은 당신의 메모리 주소를 상쇄합니다 0x7c00 부팅 코드는 일반적으로로드되므로 0x7c00 BIOS에 의해.

다른 팁

당신의 최선의 방법은 아마도입니다 OpenWatcom, C ++ 컴파일러가 포함됩니다. 90 년대 초반까지, 나는 이것이 최고의 C/C ++ 컴파일러라고 생각합니다. 몇 년 전에 오픈 소스였습니다.

칩 벤더 (AMD, 나는 추측) 칩의 컴파일러에 대한 포인터가 없습니까?

그렇지 않은 경우 16 비트 DOS 컴파일러를 사용할 수 있지만 몇 가지 큰 문제가 있습니다.

  1. BIOS 또는 MS-DOS에 의존하지 않는 컴파일러 용 라이브러리 받기
  2. 디버깅
  3. 임베디드 시스템의 링커는 일반적으로 특정 메모리 영역에서 코드를 찾는 데 특정 지원이 있습니다. 일반적으로 DOS 용 컴파일러에는 포함되어 있지 않지만 트릭을 수행 할 링커/로케이터를 찾을 수 있습니다.

여전히 지원되고 16 비트 코드를 생성하는 몇 가지 컴파일러는 다음과 같습니다.

이 Google 검색 GCC를 크로스 컴파일러로 설정하기위한 일련의 링크를 보여줍니다. 표준 엘프 바이너리 이외의 것을 목표로하려면 출력을 프리그 할 수 있습니다. 이 링크 표준 라이브러리를 제외하고 출력 형식을 사용자 정의하는 것에 대해 논의합니다. 당신은 그것을 일하기 위해 약간의 충격을 받아야 할 수도 있습니다.

대안으로 OpenWatcom.org Watcom C 컴파일러의 오픈 소스 버전이 있으며 원하는 작업을 수행 할 수도 있습니다.

2014 년에 따라 가장 최근의 것입니다 Dev86.

GCC 4.3에 대한 패치가 있습니다. 새로운 백엔드 IA16 : 16 비트 인텔 x86

그리고 여기에 대한 업데이트가 있습니다. 예를 들어 업데이트 된 게시물은 "생성자와 소멸자는 이제 지원되지만 어떤 이유로 든 ELKS 구성 만 작동합니다"라고 말합니다.

이 도커 컨테이너는 다음과 같습니다. https://registry.hub.docker.com/u/ysangkok/ia16-gcc-rask

나는 아직 도스 바이너리를 만들지 않았다 : 가스 어셈블리를 조립하고 Open Watcom C 라이브러리와 연결하려면 어떻게해야합니까?

보세요 BCC, 16 비트 x86 C 컴파일러입니다. 예를 들어, 또한 있습니다 데비안 패키지.

확실하지 않지만 Borland C ++의 오래된 버전이 그렇게 할 수 있다고 생각합니다. 버전 5.5 T를 다운로드 할 수 있습니다. 여기행운을 빕니다

내가 패러다임을 보았을 때 이후 오랜 시간이 지났습니다 (여전히 주변에 있습니까?)-컴파일러에 대한 명령 줄에 해당하는 것이 확실합니까? 저의 기억은 그들이 Borland의 컴파일러 툴체인 위에 세워 졌다는 것입니다. 그래서 Borland 컴파일러의 오래된 사본이 트릭을 할 수 있습니까?

- 아, 조금 더 냄새가 나는 패러다임이 여전히 x86 도구를 판매하는 (www.devtools.com) 주변에 있다는 것을 알았습니다. (현금 소가되어야합니다!)

그들의 전문 제품은 스크립팅을 포함합니다 ... 당신이해야 할 일의 양에 따라, 총알을 물고 전체 제안을 사는 것이 가치가있을 것입니다 ...

행운을 빕니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top