OS 개발하기 - 2 : 레지스터 크기 와 세그먼트
나만의 운영체제를 만든다는 것은, 아마 컴퓨터를 하시는 분들의 로망중 하나가 아닐까 사료 됩니다.
그만큼 고생스러운 일이면서도 보람찬 일이 아닐까요? ^^
지난 시간에는 'X'를 출력하는 것으로 간단한 실습을 했습니다.
이번 시간에는 지난시간에 다루지 못했던 부족한 이론을 공부 해 보겠습니다.
아직 우리는 초짜 이고 아는 것이 아무것도 없는 백지 상태이기 때문에 공부해야 될 부분이 무척 많지만
천리길도 한걸음 부터 라는 말도 있듯이 기초적인 부분부터 하나씩 step by step 으로 나아 갑시다.
레지스터의 크기
위의 그림을 토대로 살펴보면 EAX 32 Bit, AX 16 Bit , AH,AL은 각 8Bit 라는 것을 알 수 있습니다.
그리고 지난 시간에 어셈블리 코딩할떄도 잠깐 언급했지만 '0Xb800' 이라는 주소는 반드시
숙지하고 있어야 합니다. 무슨 주소 이냐구요?
바로 '비디오 메모리가 매핑 된 주소' 입니다. 이곳으로 값을 전달한다면 비디오 장치로 출력
하게 됩니다.
그런데 여기서 의문점이 생깁니다.
0xb8000? 16비트 최대 값은 0xFFFF가 아닌가요?
네 맞습니다 16비트 최대 값은 0xFFFF 입니다. 더 큰 주소 값을 사용하기 위해서는
어떻게 해야 할까요?
Segment 와 OFFSET 계산방법
위의 방법대로 '미션'을 드릴테니 한번 풀어 보시길 바랍니다^^
[ 미션 ]
: 세그먼트와 오프셋을 계산 하시오
* Segment : 0x1234
* Offset : 0x3030
[ 정 답 ]
* 1234
3030
----------
15370