CS/운영 체제

[운영체제] 주소지정 방식!(이거만 하고 진짜 컴퓨터구조와 운영체제를 봅시다)

장아장 2024. 3. 11. 14:27

서론

실질적 하드웨어를 다루기 전에, 마지막으로 명령어와 주소지정방식에 대해서 정리해봐야겠다는 생각이 들었다.

이후의 기본 구조를 공부할 때 이 부분이 이해가 더욱 잘 되는 것도 있었고,

컴퓨터 구조의 기본을 공부할 때 오히려 이 부분을 알고보니

"아 이래서 이렇구나?"라는 생각이 더 공부하기 재밌었다고 느꼈기 때문이다.

또한, 이전의 소스코드의 어셈블리어의 파생내용이라고 생각했다.


0과 1로는 우리가 명령어를 다 외울 수 없다. 그렇다면 어셈블리어는 어떻게 쓰는걸까?

소스코드에서도 0과 1로 우리가 애플리케이션, 프로그램을 만드는 것은 너무 어렵다.

컴퓨터의 명령어도 마찬가지다.

우리가 학습하고, 필요에 따라 활용하기에는 어셈블리어가 더 이해가 쉽다.

이러한 어셈블리어는 어떻게 생겼고, 우리는 어떻게 사용할까?

연산코드 오퍼랜드

이런 구조로 명령어가 만들어진다.
이 때 오퍼랜드는 0, 1, 2, 3개가 존재할 수 있다.

아까 말했듯이, 이러한 명령어는 어셈블리어다.

어셈블리어의 특성상, 0과 1로 되어있는 기계어로 다시 한번 파싱되어야 하는 필요가 있다.

이 때 오퍼랜드영역에 실제 데이터를 여러 개 입력하면 어떻게 될까?

정해진 비트 크기 내에서 명령어를 작성할 때, 입력할 수 있는 데이터의 크기가 한정되는 문제가 있다.

그래서 오퍼랜드에 데이터의 주소를 담아 연산을 수행시킬 수 있다.

이러한 방식을 통해 특정 주소값에 오퍼랜드에 담을 수 있는 크기 이상의 값을 활용할 수 있다.

주소 지정 방식(오퍼랜드에 주소를 어떻게 넣을 수 있을까?)

즉시 주소

  • 연산에 사용할 데이터를 오퍼랜드 필드에 바로 제공하는 경우

직접 주소

  • 메모리 유효 주소를 바로 알려주는 경우

간접 주소

  • 메모리 유효주소를 줬는데, 걔도 주소임. 거기에 데이터 있음

레지스터 주소

  • 레지스터의 해당 주소로 가면 데이터가 있다.

레지스터 간접 주소

  • 레지스터의 해당 주소로 가면 메모리 주소가 있고, 메모리로 가면 데이터가 있다.

변위 주소 지정 방식

  • 연산코드 레지스터 오퍼랜드의 구조로 명령이 온다.
  • 이때 어떤 레지스터가 사용되는가에 따라 다른 주소 지정 방식이 된다.
  • 상대 주소 지정 방식
    • 프로그램 카운터를 이용한 주소 지정 방식이다.
    • 오퍼랜드와 프로그램 카운터를 더한 값을 메모리 주소로 사용한다.
    • 그러면 직/간접 주소가 되겠죠?
  • 베이스 레지스터 주소 지정 방식
    • 말 그대로 베이스 레지스터를 사용한다.
    • 오퍼랜드와 베이스 레지스터를 더하여 유효 주소를 얻는다.
    • 베이스 레지스터를 기준 주소로, 오퍼랜드만큼 떨어진 주소값으로 메모리에 접근한다.
    • 일반적으로 프로그래머는 코드에서 사용하는 메모리 영역 중 일부를 기준(base)으로 삼아 이를 베이스 레지스터에 저장합니다.
      • 예를 들어, 데이터 배열이나 구조체의 시작 위치를 베이스 레지스터에 저장할 수 있습니다.
    • 이제 레지스터 주소/레지스터 간접주소가 되겠죠?