2013-09-23 1 views

답변

3

이 질문은 이미 일반화되어 있습니다. 명령을 수행 할 레지스터를 인코딩해야합니다 (예 : x86을 사용하면 mov eax, ebx은 해당 아키텍처에서 사용할 수있는 전체 레지스터 중 2 개를 필요로 함, inc ecx 필요).

x 개의 레지스터가 있으므로 각각을 인코딩하려면 log2 (x) 비트가 필요합니다. y 비트 만 허용되기 때문에 대부분의 플로어 (y/log2 (x)) 레지스터를 단일 명령으로 인코딩 할 수 있습니다.

(글쎄, 당신은 여전히 ​​무언가의 부분 인코딩을 사용할 수 있습니다 여분의 비트를 가지고 있지만, 그것은 아마 문제가 무엇인지 테스트 ... 인 경우)

+0

그래서 총 레지스터 수는 예 8의 경우 : log2 (8) = 각 레지스터에 대해 3 비트. y 비트가 8이므로 최대 값은 floor (8/log2 (8)) = 2 어떻게 이진 로그와 바닥을 사용 했습니까? 비트가 2 진수이기 때문에 – Bullen

+1

에 감사드립니다. n 비트는 2^n 개 항목을 인코딩 할 수 있으므로 역수는 log2입니다. 바닥은 여분의 2 비트가 있으면 세 번째 레지스터를 인코딩 할 수 없기 때문입니다. 그러나이를 사용하여 다른 것을 인코딩 할 수 있습니다 (예 : 메모리 주소 지정 모드 또는 배율 등). 그러나 이러한 것들은 아키텍처에 따라 다르며 문제는 일반적인 것입니다. – Leeor

+0

올바른 방식으로이 유형의 계산을 해결하려면 (아키텍처에 국한되지 않음) log2에 레지스터 수를 입력하여 각 레지스터의 크기가 몇 비트인지 확인하십시오. 예를 들어 8에서와 같이 2^n의 역수입니다. 레지스터 케이스의 수 : 2^8 = 256 및 log2 (256) = 8 단일 명령어에서 레지스터 피연산자의 최대 값을 얻으려면 floor (레지스터 수/log2 (명령어 인코딩 비트 수))를 사용하십시오 플로어가 제거 된 경우 8/3 (또는 2.666 ...) "여분의 2 비트"를 이해하는 데 어려움을 겪고 있습니다. 감사합니다. – Bullen

관련 문제