Asm과 C 같이 쓰다가 문제가 발생했습니다.
글쓴이: topofgenius / 작성시간: 수, 2007/11/28 - 11:21오전
간단하게 Asm에서 Gdt를 생성하고..
protected모드로 전환한후 C코드로 점프한후에.
C코드에서 화면에 문자를 출력하려고 하는데요.
Gdt 비디오세그먼트를 dd 0x8000FFFF, 0x0040920B 로 주었습니다.
베이스어드레스는 B8000이므로..
C코드에서
unsigned *vs = 0xB8000 + 위치값;
*vs='A';
vs++;
*vs=0x06;
vs++;
이렇게 하면 06바탕화면에 A를 출력해야 하는것 아닌가요?
이부분에서 커널스텍오류가 발생합니다.
여기저기 둘러봐도 모두 0xB8000의 주소에 강제로 쓰기를 하던데요..
뭐가 문제인지 모르겠어요. ㅜㅜ
Forums:
오호 반갑습니다..
저랑 진도가 비슷하시네요...
저도 os를 하나 만들고 있는데 막 C로 넘어가서 printf()함수를 구현하고 있습니다.
쓰신 글만 봐서는 저도 정확하게 어디가 문제다라고 확신하기는 힘들것 같네요
일단 제가 보기에 문제가 생길만한 부분이
1. asm과 C를 연동하는데 assemble및 linking을 재대로 하여 binary 파일을 재대로 생성하셨는지...
2. asm 으로 작성한 bootloader를 통해 C 코드로 jmp가 재대로 이루어 졌는지 확인을 하셔야 하고,
3. protected mode에 맞게 "jmp dword segment:offset" 으로 jmp를 하였나
확인을 해보셔야 할것 같습니다.
댓글 달기