728x90
주소지정(Addressing)
실제의 오퍼랜드를 정하기 위해서 명령 내에 있는 주소 필드의 값을 수정하거나 다른 것으로 대체하는 것들
- 즉시 주소지정(immediate addressing)
오퍼랜드가 명령어 자체 내에 포함되어 있는 가장 간단한 형태의 주소지정 방식
상수(constant)의 정의나 사용 혹은 변수값의 초기화 등에 편리하게 사용된다. 일반적으로 수는 2의 보수 형태로 저장되며 주소부의 가장 좌측 비트가 부호 비트로 사용된다.
장점: 오퍼랜드를 얻기 위한 기억장치 참조가 필요없기 때문에 명령어 사이클에서 한 개의 기억장치 사이클 혹은 캐쉬 사이클을 줄일 수 있다.
단점: 사용할 수 있는 수의 크기가 주소 필드의 크기로 제한된다. - 직접 주소지정(direct addressing)
명령어의 주소부에서 실제 자료가 위치하고 있는 주기억장치의 주소를 직접 표시하는 방식
장점: 주기억장치의 주소와 프로그램 상의 주소가 일치하므로 간단하다. 한번의 기억 장치 참조(memory reference)만 필요하며, 다른 특별한 계산은 필요없다.
단점: 제한된 주소 공간만을 제공한다. 주소부의 길이와 일치할 수 있는 기억장치의 공간만을 사용할 수 있다. - 간접 주소지정(indirect addressing)
오퍼랜드 내의 주소부에 의해 기억장치 내의 주소로 찾아간 후 그 주소의 내용이 나타내는 주소에 실제 데이터가 기억되어 있음
장점: 기억장치를 임의로 사용한다거나 프로그램 상의 융통성을 발휘할 수 있다. 단어 길이 N에 대하여 2N의 주소 공간을 가질 수 있다.
단점: 명령어 실행 과정에서 두 번의 기억장치 참조를 필요로 한다.
- 변위 주소지정(displacement addressing)
2개의 주소부를 가지며, 그 중에서 한 부분은 주소값(A)을 지정하며, 다른 부분은 레지스터(register)를 지정함
변위 주소지정에는 상대 주소지정, 베이스 레지스터 주소지정, 인덱스 레지스터 주소지정 등이 있다.
- 상대 주소지정(relative addressing)
상대주소로는 직접 자료에 접근할 수 없고 모든 주소는 어느 기본주소(base address)에 상대적으로 표시되므로 유효 주소를 구하기 위해서는 상대주소와 기본주소를 이용한 계산이 필요.
상대 주소지정에서 사용되는 레지스터는 프로그램 카운터(PC)
즉 유효주소를 구하기 위하여 현재 명령어의 주소부의 내용과 프로그램 카운터의 내용을 더하여 유효주소를 계산
따라서 유효주소는 명령어의 주소를 기준으로 한 상대적인 변위 - 베이스 레지스터 주소지정(base register addressing)
베이스 레지스터가 기억장치 주소를 가지고 있고, 주소부는 베이스 레지스터로부터의 변위값을 가진다. - 인덱스 레지스터 주소지정
주소부가 기억장치 주소를 가지고 있고, 인덱스 레지스터의 내용이 주소부로부터의 변위값을 가짐
베이스 레지스터 주소지정에서의 해석과 반대 방법으로, 명령어의 주소 필드가 기억장치 주소로 사용되므로 베이스 레지스터 명령어에 비하여 주소 필드의 비트가 더 많이 소요되는 단점
- 스택 주소지정
저장 장소들의 선형 배열로 구성된 스택은 항목들이 스택의 톱에 추가되므로 항상 부분적으로만 채워짐 - 묵시 주소지정
오퍼랜드가 묵시적으로 명령의 정의에 따라 정해져 있음
"누산기의 보수를 취하라" -> 명령의 정의에 따라 오퍼랜드가 누산기에 있기 때문에 묵시 주소 모드
'컴퓨터&빅데이터&AI > 컴퓨터공학' 카테고리의 다른 글
파이썬) 람다 표현식 (0) | 2021.06.16 |
---|---|
다익스트라 알고리즘 코드 응용 (0) | 2021.05.10 |
댓글