서론
실질적 하드웨어를 다루기 전에, 마지막으로 명령어와 주소지정방식에 대해서 정리해봐야겠다는 생각이 들었다.
이후의 기본 구조를 공부할 때 이 부분이 이해가 더욱 잘 되는 것도 있었고,
컴퓨터 구조의 기본을 공부할 때 오히려 이 부분을 알고보니
"아 이래서 이렇구나?"라는 생각이 더 공부하기 재밌었다고 느꼈기 때문이다.
또한, 이전의 소스코드의 어셈블리어의 파생내용이라고 생각했다.
0과 1로는 우리가 명령어를 다 외울 수 없다. 그렇다면 어셈블리어는 어떻게 쓰는걸까?
소스코드에서도 0과 1로 우리가 애플리케이션, 프로그램을 만드는 것은 너무 어렵다.
컴퓨터의 명령어도 마찬가지다.
우리가 학습하고, 필요에 따라 활용하기에는 어셈블리어가 더 이해가 쉽다.
이러한 어셈블리어는 어떻게 생겼고, 우리는 어떻게 사용할까?
연산코드 오퍼랜드
이런 구조로 명령어가 만들어진다.
이 때 오퍼랜드는 0, 1, 2, 3개가 존재할 수 있다.
아까 말했듯이, 이러한 명령어는 어셈블리어다.
어셈블리어의 특성상, 0과 1로 되어있는 기계어로 다시 한번 파싱되어야 하는 필요가 있다.
이 때 오퍼랜드영역에 실제 데이터를 여러 개 입력하면 어떻게 될까?
정해진 비트 크기 내에서 명령어를 작성할 때, 입력할 수 있는 데이터의 크기가 한정되는 문제가 있다.
그래서 오퍼랜드에 데이터의 주소를 담아 연산을 수행시킬 수 있다.
이러한 방식을 통해 특정 주소값에 오퍼랜드에 담을 수 있는 크기 이상의 값을 활용할 수 있다.
주소 지정 방식(오퍼랜드에 주소를 어떻게 넣을 수 있을까?)
즉시 주소
- 연산에 사용할 데이터를 오퍼랜드 필드에 바로 제공하는 경우
직접 주소
- 메모리 유효 주소를 바로 알려주는 경우
간접 주소
- 메모리 유효주소를 줬는데, 걔도 주소임. 거기에 데이터 있음
레지스터 주소
- 레지스터의 해당 주소로 가면 데이터가 있다.
레지스터 간접 주소
- 레지스터의 해당 주소로 가면 메모리 주소가 있고, 메모리로 가면 데이터가 있다.
변위 주소 지정 방식
연산코드 레지스터 오퍼랜드
의 구조로 명령이 온다.- 이때 어떤 레지스터가 사용되는가에 따라 다른 주소 지정 방식이 된다.
- 상대 주소 지정 방식
- 프로그램 카운터를 이용한 주소 지정 방식이다.
- 오퍼랜드와 프로그램 카운터를 더한 값을 메모리 주소로 사용한다.
- 그러면 직/간접 주소가 되겠죠?
- 베이스 레지스터 주소 지정 방식
- 말 그대로 베이스 레지스터를 사용한다.
- 오퍼랜드와 베이스 레지스터를 더하여 유효 주소를 얻는다.
- 베이스 레지스터를 기준 주소로, 오퍼랜드만큼 떨어진 주소값으로 메모리에 접근한다.
- 일반적으로 프로그래머는 코드에서 사용하는 메모리 영역 중 일부를 기준(base)으로 삼아 이를 베이스 레지스터에 저장합니다.
- 예를 들어, 데이터 배열이나 구조체의 시작 위치를 베이스 레지스터에 저장할 수 있습니다.
- 이제 레지스터 주소/레지스터 간접주소가 되겠죠?
'CS > 운영 체제' 카테고리의 다른 글
[운영체제] 리눅스 패키지(내가 맨날 헷갈린 apt쓸 때와 yum을 쓸 때) (1) | 2024.04.03 |
---|---|
[운영체제] 패키지(리눅스 배포 패키지, npm) (0) | 2024.04.03 |
[운영체제] 컴퓨터 구조 간단하게 정리해보기(부제. 왜 스왑 메모리가 느렸을까?) (0) | 2024.03.15 |
[운영체제] 소스코드 찍어먹기(부제 : 프로그래머스에서 js가 java보다 느린 이유?) (0) | 2024.03.06 |
[OS] 파일 시스템 (부제 : 익숙함에 속아 소중함을 잊지 말자) (0) | 2023.08.08 |