CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): yoke (하일수)
날 짜 (Date): 1994년02월07일(월) 16시38분42초 KST
제 목(Title): [질문] Memory Reference



음. 제가요 Phar Lap DOS Extender상에서 프로그램을 짜는데요.
(컴파일러는 WATCOM C 9.5)

그러니까 제가 짜는 부분은 Relocatable로 linking을 해서 나중에 메인
프로그램에서 이 모듈을 부르거든요.

제가 DC00-DCFF 사이의 메모리를 읽으려고 하는데 (음. dc00:0 부터
앗. 그럼 DC000인가? 암튼요.) 이것은 그냥 short *dc0=(short *) 0x0dc000;
이렇게 해서 읽으면 잘 되는데(relocatable이 아닐때), relocatable일때는
이게 메모리 매핑을 다르게 하는지 reference가 제대로 안 되요.

그리고 MK_FP니 segment를 다시 정해주는 방법으로 했더니 Memory Protection
Fault가 나오더라고요. 사실 전 DOS 프로그래밍은 잘 몰라요.

어떻게 해야 0x0dc000번지를 access할 수 있는지 좀 알려주시면 감사...

음. 정보를 더 추가하면 Phar Lap 386/DOS Extender고...


short  LBPGet(offset)
short offset;
{
__segment LBPseg;
short __based(void) *off;
short ch;

LBPseg = 0xb800;
off=(short *)offset;
ch=*(LBPseg:>off);
_outtext("f**k it!!!!!");
return ch;
}
이건 또 다른 황당한 건데 이게 외부 모듈이거든요. 여기서 세크먼트를 다시 
정의해주고 LBPseg:>off라는 표현은 LBPseg이라는 segment의 off라는 offset
위치에 있는 메모리를 읽어온다는 건데...return ch를 해주면 Memory Protection
Fault가 나오고, return ch를 해주면 에러가 안 나요.

음냐. 설명이 너무 조잡한데...씨 도사님들께서 선처를 베푸소서~

@ 하씨

 
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.