컴퓨터 아키텍쳐에서 즉치값(Immediate)을 사용하는 경우가 있다.
간단한 예시를 위해 ARM 아키텍쳐를 예시로 들어보자면 아래와 같은 I-type Instruction이 있다.
즉치값은 그냥 16bit로 사용한다면 65,535까지밖에 표현할 수 없다.
ARM은 이 문제를 즉치값을 2가지 구역으로 나누어 해결했다.
Rotate 부분과 Immediate 부분이다.
만약 Rotate가 없고 Immediate 부분만 있다면 12bit로 표현할 수 있는 수 는 0~65535으로 수가 제한적이다.
하지만 ARM에서는 rotate 4bit와 immediate 8bit를 순환시키며 32bit로 표현할 수 있도록 한다.
예를들어 위 Immediate부분에서는 12bit으므로 Rotate값이 4bit이고 Immediate부분은8bit이다.
4,096 * 2^4
회전(rotate)은 16번 가능하며, 기본 상태는 0, 총 기본 상태를 제외한 15번 rotate가 가능하다.
아래는 ARM에서 즉치값을 사용하기 위한 방법이다.
1. rotate는 좌측에, immediate는 우측에 위치시키며, 이 사이 값들은 32bit를 채우기 위해 0으로 채운다.
Immediate value를 쓰면, instruction의 operand 값을 memory에서 불러올 필요가 없으므로, 빠르게 수행된다.
아래는 즉치값으로 사용할 수 있는 경우(초록색)와 안되는 경우(빨간색)을 표시한 표이다.
위의 Immediate Field에서 확인했듯 rotate 4bit와 immediate 8bit로 이루어져있다. 만약 이를 무시하고 immediate값이 9비트 이상으로 넘어간다면 해당 값은 존재할 수 없는 값이다.
또한 rotate는 4bit로 총 16개의 경우의 수를 표현할 수 있다. 이를 32bit로 표현하자면 2bit씩 범위를 shifting한다는 것이기 때문에 이를 무시하고 그 사이 값(맨 마지막 줄)을 표현하고자 한다 해도 해당 값은 존재할 수 없다.
결론으로 ARM 의 Immediate 값을 표현하는 방식은 정말 효율적이라고 생각된다. 하지만 그에 따른 단점으로 표현할 수 없는 값들이 존재한다.
해당 경우엔 레지스터를 이용하여 그 사이의 값을 표현한다.
'컴퓨터 시스템 > 컴퓨터 아키텍쳐' 카테고리의 다른 글
MIPS 즉치값 (Immediate) (0) | 2024.02.24 |
---|