문제

x86 지침의 효과적인 주소 (LEA 명령에서와 같이)는 "EU"에 의해 계산 된 곳을 읽었습니다. EU는 무엇입니까? 효과적인 주소를 정확히 계산하는 데 관련된 것은 무엇입니까?

나는 MC68K 명령 세트 (UC Boulder가 이것을 먼저 가르치는)에 대해서만 배웠으며 웹을 검색하여 좋은 X86 웹 페이지를 찾을 수 없습니다.

도움이 되었습니까?

해결책

"EU"는 실행 장치의 일반적인 용어입니다. ALU는 실행 장치의 한 예입니다. FADD 및 FMUL, 즉 부동 소수점 가산기 또는 승수는 다른 예제입니다. 그 문제는 하중 및 저장에 대한 메모리 유닛이기 때문입니다.

LEA 지침과 관련된 EUS는 ALU (ADD, SUPTRANT 및/OR 등) 및 AGU (주소 생성 단위)입니다. AGU는 메모리 파이프 라인, TLB, 데이터 캐시 등과 결합됩니다.

첫 번째 CodeGen 가이드를 썼을 때 일반적인 Intel X86 CPU는 AGU에 2 개의 ALUS, 1 개의로드 파이프 라인, 두 번째 AGU에 묶인 상점 주소 파이프 라인 및 상점 데이터 파이프 라인이 있습니다. 2016 년 현재 대부분 3 개 또는 4 개의 ALU와 하나 이상의로드 파이프가 있습니다.

Lea는 3 입력 명령어입니다 -Basereg+Indexreg*스케일+오프셋입니다. 실제로 4 번째 입력 인 세그먼트베이스가있는 X86의 메모리 주소 지정 모드와 마찬가지로 LEA 계산의 일부가 아닙니다. 3 입력은 반드시 추가에 필요한 2 개의 입력보다 비용이 많이 듭니다.

일부 기계에서 ALU는 2 개의 입력 작업 만 수행 할 수 있습니다. 따라서 LEA는 AGU에서만 실행할 수 있습니다. 특히로드에 사용되는 AGU (상점 ALU가 레지스터를 작성하지 않기 때문에). 이것은 부하와 동시에 LEA를 할 수 없거나 동시에 두 개의 임대를 할 수 없지만 동일한 사이클에서 두 추가 및 하중을 수행 할 수 있습니다.

다른 기계에서 Lea는 ALUS의 하나 또는 2 ~ 3 개로 수행 할 수 있습니다. 아마도 AGU 대신 ALU뿐만 아니라 아마도. 이것은 더 많은 유연성을 증명합니다.

또는 간단한 임대, 예를 들어 Reg스케일+오프셋, ALUS에서 수행 할 수있는 반면, 가장 큰 임대, 예를 들어 Breg+IREG스케일+오프셋, 제한되거나 두 개의 UOP로 나눌 수 있습니다.

따라서 질문은 다음과 같습니다. 어떤 EU (실행 장치)가 어떤 임대를 처리합니까? ALU 또는 AGU? 대답은 기계에 따라 다릅니다.

최적화 가이드의 일반 텍스트는 단순히 "모델에 따라 AGU 또는 ALU"대신 "EU"또는 "특정 LEA를 처리 할 수있는 EU"라고 말할 수 있습니다.

다른 팁

인텔 자신의 소프트웨어 개발자 매뉴얼 x86에 대한 좋은 정보 소스이지만, 약간의 과장일 수 있습니다 (그리고 튜토리얼과 유사하기보다는 참조와 유사합니다).

EU (실행 장치) 참조는 일반적으로 산술 및 논리 지침을 담당하는 프로세서의 일부인 ALU (산술 로직 유닛)와 대조적 일 가능성이 높습니다. 그러나 EU는 메모리 주소를 계산하기위한 산술 기능도 가지고 있습니다. X86 LEA 명령은 이러한 기능을 조립 프로그래머에게 전달합니다.

일반적으로 X86 명령에 꽤 복잡한 메모리 주소를 제공 할 수 있습니다.

sub eax, [eax + ebx*4 + 0042]

ALU가 산술 뺄셈을 처리하는 동안 EU는 주소를 생성 할 책임이 있습니다.

LEA를 사용하면 다른 목적으로 제한된 주소 생성 기능을 사용할 수 있습니다.

lea ebx, [eax + ebx*4 + 0042]

비교 :

mul ebx, 4
add ebx, eax
add ebx, 0042

링크 된 페이지의 "Volume 1"에는 "3.7.5"DiCussing 주소 지정 모드가 있습니다. 산술 EU (또는 메모리 인터페이스 부분이 호출되는)가 가능합니다.

"Volume 2"는 지침 세트 참조이며 LEA를 포함한 모든 지침에 대한 결정적인 정보가 있습니다.

EU = 실행 장치?

유효 주소는 LEA 교육은 실제로 일종의 산술 또는 기타 데이터 액세스를 수행하는 지시였습니다. '의도 된'사용은 포인터 산술 또는 배열 인덱싱 작업에서 결과 포인터를 계산하는 것입니다. 그러나 곱하기와 추가의 일부 조합을 수행 할 수 있으므로 일부 정기 계산을 최적화하는 데 사용됩니다.

단일 가족 내부의 프로세서 내부는 수년에 걸쳐 많은 변화를 가져 왔으므로 "EU"참조는 정확한 CPU 모델로 명확히해야합니다. M68K 경험과 유사하게 68000, 010, 020, 030, 040 및 060에 대한 지침은 대부분 동일하지만 내부는 실제로 다르므로 내부 이름에 대한 참조는 부품 번호와 함께 제공해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top