CPU마다 명령어와 세세한 생김새, 명령어로 할 수 있는 연산, 주소 지정 방식 등은 CPU마다 조금씩 차이가 있습니다.
CPU가 이해할 수 있는 명령어들의 모음을 명령어 집합또는 명령어 집합 구조(ISA)라고 합니다.
명령어 집합에 ‘구조’라는 단어가 붙은 이유는 CPU가 어떤 명령어를 이해하는지에 따라 컴퓨터 구조 및 설계 방식이 달라지기 때문이다.
인텔 노트북 CPU는 x86이나 x86-64 ISA를 이해하고, 애플 아이폰 CPU는 ARM ISA를 이해합니다.
둘은 서로 다른 ISA이기 때문에 서로의 명령어를 이해할 수 없습니다.
실행 파일은 명령어로 이루어져 있고 서로의 컴퓨터가 이해할 수 있는 명령어가 다르기 때문입니다.
x86은 32비트용, x86-64는 64비트용 x86 ISA입니다.
ISA가 다르다는 건 CPU가 이해할 수 있는 명령어가 다르다는 뜻이며, 명령어가 달라지면 어셈블리어도 달라진다는 것을 뜻합니다.
CPU가 이해하는 명령어들이 달라지면 비단 명령어의 생김새만 달라지는 게 아닙니다.
ISA가 다르면 많은 것이 달라집니다.
<ISA가 다르면 바뀌는 것>
CISC는 Complex Instruction Set Computer의 약자입니다.
CISC라는 이름 그대로 복잡하고 다양한 명령어들을 활용하는 CPU 설계 방식입니다.
ISA의 한 종류인 x86, x86-64는 대표적인 CISC 기반의 ISA입니다.
CISC는 다양하고 강력한 기능의 명령어 집합을 활용하기 떄문에 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용합니다.
x86-64코드 길이가 ARM보다 짧은데 이는 ARM 명령어 여러 개로 수행할 수 있는 일을 x86-64 명령어 몇 개만으로도 수행할 수 있음을 알 수 있습니다.
CISC는 메모리를 최대한 아끼며 개발해야 했던 시절에 인기가 높았습니다.
적은 수의 명령어만으로도 프로그램을 동작시킬 수 있는 것은 메모리 공간을 절약할 수 있다는 장점이기 때문입니다.
단점
이는 명령어 파이프라인을 구현하는 데에 큰 걸림돌이 됩니다.
CISC가 활용하는 명령어는 명령어 수행 시간이 길고 가지각색이기 때문에 파이프라인이 효율적으로 명령어를 처리할 수 없습니다.
규격화되지 않은 명령어가 파이프라이닝을 어렵게 만든 셈입니다.
명령어 파이프라인이 제대로 동작하지 않는다는 것은 현대 CPU에서 치명적인 약점입니다.
▶ 현대 CPU에서 명령어 파이프라인은 높은 성능을 내기 위해 절대 놓쳐서는 안 되는 핵심 기술이기 때문입니다.
RISC는 Reduced Instruction Set Computer의 약자입니다.
RISC는 CISC에 비해 명령어의 종류가 적습니다.
CISC와는 달리 짧고 규격화된 명령어, 되도록 1클럭 내외로 실행되는 명령어를 지향합니다.
즉, RISC는 고정 길이 명령어를 활용합니다.
명령어가 규격화되어 있고, 하나의 명령어가 1클럭 내외로 실행되기 때문에 RISC 명령어 집합은 명령어 파이프라이닝에 최적화되어 있습니다.
RISC는 메모리에 직접 접근하는 명령어를 load, store 두 개로 제한할 만큼 메모리 접근을 단순화하고 최소화를 추구합니다. 그렇기에 CISC보다 주소 지정 방식의 종류가 적은 경우가 많습니다.
RISC를 load-store 구조라고 부르기도 합니다.
RISC는 메모리 접근을 단순화, 최소화하는 대신 레지스터를 적극적으로 활용합니다.
CISC보다 레지스터를 이용하는 연산이 많고, 일반적인 경우보다 범용 레지스터 개수도 더 많습니다.
사용 가능한 명령어 개수가 CISC보다 적기 때문에 RISC는 CISC보다 많은 명령으로 프로그램을 작동시킵니다.
ARM은 RISC 기반의 대표적인 ISA입니다.
x86-64보다 더 많은 명령어로 동일한 프로그램을 실행하는 것을 볼 수 있습니다.
즉, 같은 소스 코드를 컴파일해도 RISC는 CISC보다 많은 수의 명령어로 변환됩니다.