ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 시스템 프로그래밍 01 - 사실상 어셈블리어 공부
    쾌락없는 책임 (공부)/시스템프로그래밍 2021. 4. 18. 17:33
    반응형

    본 포스트는 강동완 교수님의 '시스템프로그래밍' 강의를 듣고

    이해한 것들을 정리한 포스트입니다.

    - 강의자료는 올리지 않습니다


    <32비트 프로세서의 레지스터>

     32비트의 경우 8개의 범용 레지스터(32bit), 6개의 세그먼트 레지스터(16bit), Flag 레지스터, EIP를 가지고 있습니다.

     

    범용 레지스터

     8개의 범용 레지스터는 32비트 x86 프로세서에서는 32bit의 용량을 가지고 있으며 이 안에 들어가 있는 데이터들은 각종 산술 연산에서 '피연산자'가 되어줍니다. 이전 16비트에서는 이런 역할을 하는 레지스터들이 16bit의 용량을 가지고 있었으며 이의 영향으로 16비트 버전 프로그램들의 하위호환을 위해서 32비트의 레지스터들은 16비트, 8비트로 나뉠 수 있습니다.

    이런 식으로 레지스터를 나누어서
    이전 버전의 프로그램들도 작동할 수 있게 해준다
    AH AL
    AX
    EAX

     - 이 범용 레지스터의 종류로는 EAX, ECX, ESP, ESI, EDI, EBP가 있습니다.

    EAX 곱셈, 나눗셈 연산시 자동으로 사용되는 레지스터
    ECX loop문의 카운터용으로 사용됨
    ESP stack 데이터들의 포인터로 사용되며 연산에는 잘 참여하지 않는다
    ESI / EDI 메모리 전송에 사용
    EBP 고수준 언어의 함수/지역변수를 레퍼런스 하는데 사용된다

     

    세그먼트 레지스터

     이전 16비트 체계의 Real-mode (32비트는 protected-mode)에서 16비트의 세그먼트 레지스터가 있고 이것들이 가리키는 base주소가 있었는데 이를 세그먼트라고 불렀습니다. 32비트는 16비트보다 용량적인 측면에서 자유롭습니다. 

     각 세그먼트는 데이터와 코드 등의 주소를 가르키고 있습니다.

     

    Flag 레지스터

     CPU의 동작이나 연산 결과 등을 처리하는 레지스터로 이후 더 자세하게 배우게 됩니다.

     

    EIP

     다음 실행될 명령어의 주소를 가리키는 레지스터

     

    MMX (XMM)

     MMX 레지스터의 경우 32비트에서 추가된 레지스터로 멀티미디어 등의 작업을 하기 위해서 있습니다. 8개의 64비트 레지스터가 있으며 XMM은 MMX를 확장해서 나온 버전이라고 생각하면 됩니다.

     

     

    <X86 프로세서들의 모드>

    x86 프로세서는 지금 64비트로 발전해온 만큼 각 비트들에 따라 버전이 있습니다.

    Real Mode 이전 16비트까지 사용한 모드로 프로그램이 실제 주소에 접근이 가능했습니다.
    Protected Mode 리얼모드와 다르게 메모리 직접 접근을 제한했습니다. (그래서 Protected)
    Virtual 8086 가상 모드로 하위 버전을 독립된 창으로 띄울 수 있게 해줍니다.

     virtual 8086의 경우 비트수가 높은 프로세서에서 하위 버전에서 만들어진 프로그램들을 지원하기 위해서 만들어진 것으로 현재 arm 아키텍쳐 맥에서 사용되는 '패러렐즈'와 비슷한 느낌입니다. 또는 컴퓨터로 모바일 게임의 에뮬을 돌리는 것이죠. 하위호환을 지원해주는 이유는 새 프로세서에서 돌릴 수 있는 프로그램들이 없다면 사람들이 이주할 가능성이 없기 때문입니다. 플레이스테이션 / 엑스박스에서 유저들 초반 유치를 위해 이전 기종의 게임을 지원하는것과 같은 맥락입니다.

     

     또한 Real모드의 경우 근본이 16비트지만 실제 주소값은 20비트까지 표현이 가능했고 이 때문에 메모리가 1MB 까지만 지원을 했습니다. Protected모드에 와서는 주소값이 32비트까지 가능했으며 이 덕분에 메모리를 4GB 까지 쓸 수 있다고 합니다.

    (자주 사용하느 64비트의 경우 메모리를 테라바이트 단위로 지원이 가능하다고 합니다)

     

    <64비트 x86프로세서>

     현재 사용하고 있는 대부분의 컴퓨터들이 해당되며 32비트에서 작동하던 프로그램들의 하위호환도 해줍니다. (이전 인텔이 안되는 프로세서를 내놓았다가 AMD에서 하위호환 버전을 내 왕창 기운적이 있다고 합니다) 

     64비트의 모드로는 Compatibility모드와 64비트 모드로 Compatibility모드는 이전 16, 32비트의 프로그램들을 컴파일 없이 호환해주는 모드고 64비트 모드는 말 그대로 64비트에서 만들어지는 프로그램들을 위한 모드입니다.

    반응형

    댓글

Designed by Tistory.