본문 바로가기
  • _^**_
무근본 IT 지식 공유/무근본 운영체제(OS)

[무근본 OS 만들기] CPU 세그먼트 레지스터에 대해

by 크리드로얄워터 2023. 3. 26.
반응형

http://cotkdrl1.blog.me/10148671907

내가 써놨던 글.

참조하고

 

1. 별다른 처리 없이 메모리에 접근하면 암묵적으로 DS 세그먼트 레지스터가 사용된다.

 => 예를 들어..

 

 

 

 

 

 

 

 

 

이 예시를 보면 알 수 있을 거다..

무슨 말인지..

 

2. 그런데 운영체제를 만드는 과정에서..

바이오스가 부트로더를 0x07C0 번지로 갖다 놓으므로

DS와 CS는 0x07C0으로 초기화를 하는 게 좋다.

=> 부트로더의 코드(Code Segment)와 데이터(Data Segment)는 0x7C00부터 512바이트 범위에 존재하므로.

따라서 초기화를 해주는데,

DS는 mov 명령어로 초기화 해주면 되고,

CS는 mov 명령으로 초기화 할 수 없음에 주의한다.

CS는 jmp 명령어를 사용하여 초기화 한다.

jmp 0x07C0:START      ; CS 세그먼트 레지스터에 0x07C0을 복사하면서 START 레이블로 이동하라는 뜻.

이런 식으로 jmp 명령어 사용시 CS 레지스터가 자동으로 초기화 된다.

(이건 책 125p 참조)

또한 이제 DS 값이 바뀌었으므로...(위의 예시와는 다르게....)

비디오 메모리에 접근하기 위해서는

ES 레지스터에 0xB800을 넣고

ES:0x00

이런 식으로 비디오 메모리에 접근한다!

 

이게 가능한 이유는 세그먼트 레지스터 접두사를 사용하면 해당 명령을 수행하는 동안 일시적으로 세그먼트를 교체하기 때문이다.

 

 

 

 

반응형

댓글