저는 리얼 모드 OS에서 작업 중이며 어셈블리 작성과 NASM을 사용한 플랫 .bin 실행 파일로 컴파일하고 있습니다.
나는 C의 OS의 일부를 작성, 그리고 내가 첫 번째 문자 문자열을 액세스하고 인쇄하고자하는 실험 프로그램 (ctest.c) 쓴 것 :이 컴파일
16 비트 .com 리얼 모드 OS에서의 C 프로그램
void test();
int main() { test(); return 0; }
char msg [] = "Hello World!";
void test() {
_asm
{
mov si, word ptr [msg]
mov al, [si]
mov ah, 0eh
int 10h
}
for(;;);
}
을 Open Watcom v1.9는 wcl ctest.c -lr -l=COM
을 사용합니다. 이렇게하면 ctest.com이 생성됩니다. NASM 어셈블리에서 작성한 커널은 0x2010 : 0x0000에이 프로그램을로드하고 DS와 ES를 0x2000 : 0x0000으로 설정 한 다음 0x2010 : 0x0000으로 점프합니다. 이것은 내가 어셈블리에서 쓰여지고 nasm -f bin test.asm -o test.com
으로 컴파일 된 .COM 프로그램을 호출 한 방법입니다.
Bochs를 사용하여 OS를 테스트하면 ctest.com을 성공적으로로드하지만 msg []의 일부가 아닌 의미없는 문자가 인쇄됩니다.
누구에게이 제안이 있습니까? 문자열이 잘못된 위치에서 초기화되고 있다고 생각합니다. 나는 이것을 16 비트 OS로 유지하고 싶다.
감사합니다.
.com 메모리 이미지의 처음 128 바이트에는 CP/M과 비슷한 운영 체제 데이터가 들어 있습니다. DOS는 그것에 달려있다. 다음 128 바이트는 명령 행을 포함합니다. 0x100에서 실행이 시작됩니다. –