여기에 몇 가지 추가 측면이 있습니다.
작업 "a = b / c"x86이이를 다음과 같이 구현한다고 생각해보십시오.
mov eax,b
xor edx,edx
div dword ptr c
mov a,eax
div 명령의 추가 보너스로 edx는 나머지를 포함합니다.
RISC 프로세서는 먼저 b와 c의 주소를로드하고, b와 c를 메모리에서 레지스터로로드하고, 분할을 수행하고 a의 주소를로드 한 다음 결과를 저장해야합니다. Dst, src 구문 :
mov r5,addr b
mov r5,[r5]
mov r6,addr c
mov r6,[r6]
div r7,r5,r6
mov r5,addr a
mov [r5],r7
여기에는 일반적으로 나머지가 없습니다.
포인터를 통해 변수를로드해야하는 경우 두 시퀀스 모두 더 길어질 수 있지만 다른 레지스터에 이미로드 된 포인터가 하나 이상있을 수 있기 때문에 RISC에 대한 가능성은 적습니다. x86은 레지스터가 적기 때문에 포인터가 그중 하나에있을 가능성이 더 적습니다.
장점과 단점:
RISC 명령어는 명령어 스케줄링을 개선하기 위해 주변 코드와 혼합 될 수 있습니다. x86에서는 대신 CPU 자체 내에서이 작업을 수행하는 (순서에 따라 다소 잘) 가능성이 적습니다. 위의 RISC 시퀀스는 일반적으로 32 비트 아키텍처에서 28 바이트 길이 (각각 32 비트 / 4 바이트 너비의 명령어 7 개)입니다. 이렇게하면 명령어를 가져올 때 (7 회 가져 오기) 오프 칩 메모리가 더 많이 작동합니다. 밀도가 높은 x86 시퀀스에는 더 적은 명령어가 포함되어 있으며 너비는 다양하지만 평균 4 바이트 / 명령어도 여기에서 볼 수 있습니다. 7 번의 가져 오기 속도를 높이기위한 명령어 캐시가 있어도 x86과 비교하여 다른 곳에서 3 개의 부족한 부분이 있음을 의미합니다.
저장 / 복원 할 레지스터가 더 적은 x86 아키텍처는 아마도 스레드 전환을 수행하고 RISC보다 빠르게 인터럽트를 처리 할 것임을 의미합니다. 저장 및 복원 할 레지스터가 많을수록 인터럽트를 수행하는 데 더 많은 임시 RAM 스택 공간이 필요하고 스레드 상태를 저장하기위한 더 영구적 인 스택 공간이 필요합니다. 이러한 측면은 x86을 순수한 RTOS 실행에 더 적합한 후보로 만들 것입니다.
좀 더 개인적인 메모에서 x86보다 RISC 어셈블리를 작성하는 것이 더 어렵다는 것을 알았습니다. RISC 루틴을 C로 작성하고 생성 된 코드를 컴파일하고 수정하여이 문제를 해결합니다. 이것은 코드 생산 관점에서는 더 효율적이고 실행 관점에서는 덜 효율적입니다. 추적해야 할 모든 32 개의 레지스터. x86에서는 그 반대입니다. "실제"이름을 가진 6-8 개의 레지스터를 사용하면 문제를보다 쉽게 관리 할 수 있고 생성 된 코드가 예상대로 작동 할 것이라는 확신을 갖게됩니다.
추한? 그것은 보는 사람의 눈에 있습니다. 나는 "다른"을 선호합니다.