c언어에서 어셈블리의 in, out 명령어의 역할을 할 수 없을까요?
글쓴이: csm4338 / 작성시간: 일, 2013/03/31 - 6:01오후
운영체제를 만들고 있는 중인데
A20 gate를 활성화하려면 어셈블리에서 in, out명령으로 포트의 값을 읽고 쓴다고 하는데요.
제가 c에서 했던 방법은
char *port64=(char*)0x64;
unsigned char status;
do
{
status=(unsigned char)*port64;
}while(status & 0x02);
이런식으로 0x64라는 포트의 값을 읽어오려고했습니다.
여기서 문제가 0x64포트에서 값을 읽었을 때 입력버퍼가 비어있다면 읽은 값과 0x02를 and연산을 했을 때 0이 나와서 while문을 빠져나가야되는데
무한루프를 돌고있는 상황입니다.
만약 이경우처럼 포트의 값을 읽고 쓸때는 어셈블리로 하는수 밖에 없는건가요?
Forums:
메모리 어드레스 영역과 I/O 어드레스 영역에 대한
메모리 어드레스 영역과
I/O 어드레스 영역에 대한 명령이 다릅니다.
따라서 예를 드신 코드는 0x64 메모를 접근할 뿐입니다.
어셈블리, 혹은 인라인 어셈블리를 사용하여 만드시거나,
사용하고 계신 라이브러리에 i/o 에 사용할 수 있는
함수나 api가 있는지 알아보세요.
gilgil.net
상기 코드는 while loop안에 들어 갈 때 0x64번지의 내용을 한번만 읽고 그 다음부터는 확인하지 않을 수가 있네요(최적화로 인해서).
이 부분을
이렇게 바꿔 보세요.
www.gilgil.net
댓글 달기