앞서 배웠던 명령어 파이프라이닝과 슈퍼스칼라 기법을 실제로 CPU 에 적용하려면 명령어가 파이프라이닝에 최적화가 되어 있어야 한다.
03장에서 명령어를 학습했었는데 , 과연 모든 CPU 들이 똑같이 생긴 명령어를 실행할까?
그렇지 않다고 한다. 기본적인 구조와 작동 원리는 03장에서 학습한 내용에서 크게 벗어나지 않는다고 한다. 하지만 명령어의 세세한 생김새 , 명령어로 할 수 있는 연산 , 주소 지정 방식 등은 CPU마다 조금씩 차이가 있다고 한다.
CPU 가 이해할 수 있는 명령어들의 모음을 명령어 집합 Instruction Set 또는 명령어 집합 구조 ISA 라고 한다. 즉 CPU 마다 ISA 가 다를 수 있다.
03장에서 어셈블리어는 명령어를 읽기 편하게 표현한 언어라고 했었다.
같은 소스 코드로 만들어진 같은 프로그램이라 할지라도 ISA 가 다르다면 CPU가 이해할 수 있는 명령어도 , 어셈블리어도 달라진다.

왼쪽은 x86-64 ISA , 오른쪽은 ARM ISA ( 동일한 컴파일러 )
위 처럼 똑같은 코드로 만든 프로그램임에도 ISA 가 달라 어셈블리어도 다른 것을 알 수 있다.
참고로 사용한 컴파일러에 따라서도 어셈블리어가 달라질 수 있다
ISA 가 다르면 제어장치가 명령어를 해석하는 방식, 사용되는 레지스터의 종류와 개수 , 메모리 관리 방법 등 많은 것들이 달라진다고 한다. 그리고 이는 곧 CPU 하드웨어 설계에도 큰 영향을 미친다.
ISA 는 CPU의 언어임과 동시에 CPU를 비롯한 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속아라고도 볼 수 있다.
앞서 배운 명령어 병렬 처리 기법들에 유리한 ISA 가 있고 그렇지 못한 ISA 가 존재한다.