[ 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를 해주면 에러가 안 나요. 음냐. 설명이 너무 조잡한데...씨 도사님들께서 선처를 베푸소서~ @ 하씨 |