2014-02-26 2 views
0

가능한 한 많이 C로 포트하려고하는 어셈블리에 간단한 (극단적 인 단순한) 리얼 모드 커널이 있습니다. 이를 위해 OpenWatcom 컴파일러를 16 비트 바이너리 코드로 사용하고 있습니다.OpenWatcom을 사용하여 C의 바이너리 리얼 모드 OS에 컴파일 및 연결

char msg[50];

을하지만이 할 경우 : :이 라인을 작성하는 경우 내 파일 "os.c"에서

, 그것은 작동 아래

char msg[50] = "hello";

을 그냥하지 않습니다 작업. 매번 문자열을 쓸 때마다 깨집니다. 나는 사방을 수색하고, 말도 안되는 것들을 많이 시도했다.

실마리가있는 사람이 있습니까?

2 개 이상의 링크를 게시 할 수 없으므로 필요한 4 개의 링크가 모두 pastebin에 있습니다. 미리 감사드립니다.

예 : http://pastebin.com/xz96N91A

+0

생성 된 어셈블리 또는 기계 코드를 검사하십시오. 권장할만한 도구 체인을 사용하는 것이 좋습니다. – Jester

+0

어셈블리보다 읽기 쉽도록해야하며 리얼 모드 여야합니다. 그 일을하기 위해 다른 컴파일러를 찾지 못했습니다. :( – rtmc

+0

터보 C는 우수한 16 비트 코드를 생성합니다. 무료 버전은 http://turbo-c.soft32.com/입니다. – wallyk

답변

1

내가 openwatcom 설치 한 그래서 그것을주는 것을 볼 수 있었다. 분명히 모든 것이 엉망입니다. 데이터 섹션은 코드 중간에 적용되는 것 같습니다.

대신 COM 형식 파일을 만드는 것이 좋습니다. 그건 적어도 작동하는 것 같습니다. os.bin 대신 사용한 을 사용하여 os.com을 생성했습니다. 또한 com 진입 점을 고려하여 로더의 멀리뛰를 jmp far 0x0040:0x0100으로 업데이트했습니다. 일부 세그먼트 레지스터를 설정해야 할 수도 있지만이 테스트에서는 세그먼트 레지스터가없이 작동합니다.

나는 COM 파일에 64k의 제한이 있다고 생각하는데, watcom이이를 시행하는지는 알 수 없습니다. 그렇다면 64k 이상이 필요합니다. 더 조사해야합니다.

실제 모드를 사용하지 않는 한, 아마 시간을 낭비하지 않아도됩니다.