[OS만들기] AT-BIOS
출처 : http://nambaxa.springnote.com/pages/1593418 INT(0x10) : 비디오 관련 비디오 모드 설정 AH = 0x00 AL = 모드(자주 사용되는 화면 모드만 설명) 0x03:16색 텍스트, 80x25 0x12:VGA 그래픽스, 640 x480x4bit 칼라 0x13:VGA 그래픽스, 320 x200x8bit 칼라, Packed Pixel 0x6a:확장 VGA 그래픽스, 800 x600x4bit 칼라 반환값:없음 커서 모양 설정 AH = 0x01 CH = 시작 라인 CL = 종료 라인 CH CL라면 2개의 부분으로부터 되는 커서 CH == 0x20이면 커서는 표시되지 않는다 반환값:없음 커서 위치 지정 AH ..
2011.08.12
[DanguriaOS]C코드와 어셈블러.. 그 사이에서..
학교 수업 진도를 마추려다 보니 밤늦게 건드리기 시작 했네요ㅠㅠ 어제 C언어로 개발 하기 위한 기반을 구축한다고 했는데 그리 만만한것 같진 않습니다. C언어를 컴파일 하고 어셈블러와 링크 하는 거야 문제가 없지만.. VC기반이 아닌 djgpp 기반으로 구현하려보니 명령어나, AT&T형식의 어셈블러의 이해 등등 여기저기 공부해야 할 부분이 나오네요( VC에서도 알아야 하지만..VC가 다 알아서 해주니까 몰랐군요..역시 다 알아서 해주는 건 별로야^^ ) 일단 어셈블러와 C언어사이의 공백을 채워 넣어야 겠습니다.^^ 기존에 나온 책들을 그냥 따라가지 않고 메뚜기 식으로 개발 하려니까 역시 저의 헛점이 많이 노출 됩니다.. 좋은 것이겠죠^^ 오늘은 일단 djgpp컴파일해서 나온 어셈코트를 만드는 것에 만족해야..
2008.09.26
[어셈블러] 어셈블러로 함수의 호출 원리를 알아보자!! 3탄
시작하기 전에... 사외교육을 갔다가 너무 내용이 좋아서 정리하면서 글을 올리게 되었다. 교육내용을 모두 올린건 은 아니고 일부분을 재구성해서 올렸다. 강석민 강사님께 감사 드립니다^^ cafe.naver.com/cppmaster 반복문과 jmp 이번에는 간단한 반복문을 어셈코드로 짜보도록 하자..이를 통해 어셈의 제어문에 대해서 아주 간단하게나마 알 수 있을 것이다. 다음은 일반적인 C코드이다 무엇을 하는지는 쉽게 알 수 있을 것이다. int func(int start, int end) { int i; for( I = start; I < end; I++); return i; } void main() { printf("%d\n", func(1, 10) ); } 위의 코드에서 func함수를 어셈코드로 작성..
2008.08.30
[어셈블러] 어셈블러로 함수의 호출 원리를 알아보자!! 2탄
시작하기 전에... 사외교육을 갔다가 너무 내용이 좋아서 정리하면서 글을 올리게 되었다. 교육내용을 모두 올린건 은 아니고 일부분을 재구성해서 올렸다. 강석민 강사님께 감사 드립니다^^ cafe.naver.com/cppmaster 3. 교시 - 어셈으로 함수 호출과 스택프레임, calling convention 이번에는 어셈코드를 본격적으로 짜보면서 어셈으로 함수 호출방법에 대해 알아 보도록 하자. 2교시때와 마찬가지로 함수호출할 때 인자 전달 방법과 리턴방법에 대해 알아 볼 것이고, 함수가 호출될 때 스택의 관리에 대해 고민해 볼 것이다. 마직막으로 이를 토대로 calling convention에 대해 알아 보고, inline함수에 대해 간단히 알아 보도록 하자. 그전에!! 어셈을 컴파일 하고 obj파..
2008.08.30
[어셈블러] 어셈블러로 함수의 호출 원리를 알아보자!! 1탄
시작하기 전에... 사외교육을 갔다가 너무 내용이 좋아서 정리하면서 글을 올리게 되었다. 교육내용을 모두 올린건 은 아니고 일부분을 재구성해서 올렸다. 강석민 강사님께 감사 드립니다^^ cafe.naver.com/cppmaster C언어의 함수 호출 원리 함수를 호출할 때 인자값과 리턴값이 있기 마련이다. C언어에서는 어떤방법으로 인자값와 리턴값을 처리할까? 결론부터 말하면 인자값은 스택에 넣어서 함수로 가고, 리턴값은 eax레지스터에 넣어 돌려 보내준다. int add(int a, int b) { return 10; } void main() { add(1, 2); } add(1,2)의 함수를 호출 할 때 인자값은 스택에 넣는다고 했다. 스택이라는 자료구조의 특성상 인자값은 뒤에서부터 스택에 쌓이게 된다..
2008.08.30
no image
[WinDbg] vmware와 함께 사용하기
참조 : http://silverstr.ufies.org/lotr0/windbg-vmware.html 커널 영역에서 프로그램을 하다보면 디버깅이 반드시 필요하다.. 디바이스 드라이버를 공부하다가 WinDbg라는 디버깅 툴을 알게 되었고 컴퓨터에 세팅을 해보았다. 전에 선배가 해주었는데 오는 인터넷을 뒤적거리면 하나하나 내 손으로 해 보았다. 먼저 vmware의 guest os에 시리얼 포트를 만들어 주어야 한다. guest os를 우클릭 해보면 settings를 클릭하면 나오는 화면이다. 여기서 Add를 눌러서 Serial port를 추가 해준다. "Output to named pipe"를 클릭하고 각 항목을 위의 그림과 같이 설절해 준다. 설정이 다 되면 마지막으로 "I/o mode "에서 Yield ..
2008.08.27
[ OS ] differences among short term, mid term, long term scheduling
Long-term scheduler : 프로세스가 실행되면, 레디큐에 들어갈 수 있는지 없는지를 결정한다.결정 방법으로 프로세스가 I/Orequest를 많이 하는지 cpu computation을 많이 하는지 보고 둘을 절절히 조절해간다. 하지만 실제 OS가 실행될 프로세서가 어떤 자원을 많이 사용하는지 알 수가 없기때문에 실제로 구현 할 수는 없다. Mid-term scheduler : Long-term scheduler를 구현 하기 위해 메인 메모리에 있는 프로세스 중에 자주 할당이 안되거나 priority가 낮은 것들은 잠시 하드디스크나 보조 기억장치에 보관한다. virtual memory system에서 사용되며, 현재 대부분의 os에서 구현하고 있다. short-ter scheduler : 레디큐..
2008.03.25