우선 그 전 포스팅과 관련하여 이번 포스팅에서 알아야할 내용은 명령어의 오퍼랜드 필드에 메모리나 레지스터의 주소를 담는 경우가 많고, 그래서 오퍼랜드 필드를 주소 필드라고 부른다는 점을 알아야 한다.
그렇다면 왜 오퍼랜드 필드에 메모리나 레지스터의 주소를 담는 걸까? 그 이유는 명령어의 길이 때문이다. 즉, 오퍼랜드 필드 안에 메모리 주소가 담긴다면 표현할 수 있는 데이터의 크기가 하나의 메모리 주소에 저장할 수 있는 공간만큼 커지기 때문이다.
예를 들어, 만약에 한 주소에 16비트를 저장할 수 있는 메모리가 있다고 가정하면, 이 메모리 안에 데이터를 저장하고, 오퍼랜드 필드 안에 해당 메모리 주소를 명시한다면 표현할 수 있는 정보의 가짓수는 2^16개로 확 늘어날 것이다.
또한 오퍼랜드 필드에 메모리 주소가 아닌 레지스터 이름을 명시할 때도 마찬가지인데, 이 경우에는 표현할 수 있는 정보의 가짓수는 해당 레지스터가 저장할 수 있는 공간만큼 커진다.
이렇게 연산 코드에 사용할 데이터가 저장된 위치. 즉, 연산의 대상이 되는 데이터가 저장된 위치를 유효 주소(effective address)라고 한다. 메모리의 경우에는 유효 주소가 10번지가 될 수 있겠고, 레지스터의 경우 레지스터 R1이 될 수 있겠다.
이렇듯 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법을 주소 지정 방식(addressing mode)라고 한다. 다시 말해, 주소 지정 방식은 유효 주소를 찾는 방법인 것이다. 현대 CPU는 다양한 주소 지정 방식을 사용하는데, 대표적인 5가지 방식을 하나씩 살펴보자.
즉시 주소 지정 방식(immediate addressing mode)
연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식이다. 이 방식은 표현할 수 있는 데이터의 크기가 작아질 수 있지만, 연산에 사용할 데이터를 메모리나 레지스터로부터 찾는 과정이 없기 때문에 다른 주소 지정 방식들보다 빠르다.
직접 주소 지정 방식(direct addressing mode)
오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식이다. 오퍼랜드 필드에서 표현할 수 있는 데이터의 크기는 즉시 주소 지정 방식보다 더 커졌지만, 여전히 유효 주소를 표현할 수 있는 범위가 연산 코드의 비트 수만큼 줄어들어있다.
간접 주소 지정 방식(indrect addressing mode)
유효 주소의 주소를 오퍼랜드 필드에 명시한다. 즉, 표현할 수 있는 유효 주소의 범위가 더 넓어졌지만, 2번의 메모리 접근이 필요하기에 일반적으로 더 느린 방식이다.
레지스터 주소 지정 방식(register addressing mode)
직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장할 레지스터를 오퍼랜드 필드에 직접 명시하는 방법이다. 일반적으로 메모리에 접근하는 것보다 레지스터에 접근하는게 더 빠르므로, 직접 주소 지정 방식보다 더 빠르게 데이터에 접근할 수 있다.
레지스터 간접 주소 지정 방식(register indirect addressing mode)
연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법이다. 이렇게하면 메모리에 접근하는 횟수가 1번으로 줄어들고, 메모리에 접근하는 것보다 레지스터에 접근하는 것이 더 빠르므로, 간접 주소 지정방식보다 더 빠르다.
'컴퓨터 사이언스 > 컴퓨터 구조' 카테고리의 다른 글
명령어 사이클 (0) | 2023.11.15 |
---|---|
레지스터의 역할과 종류 (0) | 2023.11.15 |
Segmentation과 Paging의 개념 및 장단점 정리 (0) | 2023.11.14 |
연산 코드와 오퍼랜드 (0) | 2023.11.11 |