높은 수준의 이유
마이크로 프로세서는 놀라운 일을합니다. 세탁기 나 엘리베이터와 같은 기계를 가져 와서 주문 제작 된 메커니즘이나 회로 전체를 저렴하고 대량 생산되는 실리콘으로 대체 할 수 있습니다. 칩. 부품에 많은 돈을 절약하고 디자인에 많은 시간을 절약합니다.
그러나 수많은 맞춤형 디자인을 대체 하는 표준 칩이 있습니까? 모든 애플리케이션에 완벽한 단일의 완벽한 마이크로 프로세서가있을 수는 없습니다. 일부 응용 프로그램은 전력 사용량을 최소화해야하지만 빠를 필요는 없습니다. 다른 것들은 빠를 필요가 있지만 프로그래밍하기 쉬울 필요는 없으며, 다른 것들은 저비용이어야합니다.
따라서 마이크로 프로세서에는 여러 가지 "풍미"가 있으며 각각 고유 한 장단점이 있습니다. 코드 재사용이 가능하고 올바른 기술을 가진 사람들을 쉽게 찾을 수 있기 때문에 모두 호환 가능한 명령어 세트를 사용하는 것이 바람직합니다. 그러나 명령어 세트 는 프로세서의 비용, 복잡성, 속도, 사용 용이성 및 물리적 제약에 영향을 미치므로 몇 가지 "주류"명령어 세트 (및 많은 작은 명령어)가 있으며 각 명령어 세트에는 특성이 다른 프로세서가 많이 있습니다.
아, 그리고 기술이 변화함에 따라 이러한 모든 절충점이 바뀌므로 지침 세트가 발전하고 새로운 것이 등장하고 오래된 것이 죽습니다. 오늘날 "최상의"교육이 있었더라도 20 년이되지 않을 수 있습니다.
하드웨어 세부 사항
아마도 명령어 세트에서 가장 큰 디자인 결정은 워드 크기 , 즉 프로세서가 "자연스럽게"조작 할 수있는 숫자의 크기 일 것입니다. 8 비트 프로세서는 0-255의 숫자를 처리하는 반면 32 비트 프로세서는 0-4,294,967,295의 숫자를 처리합니다. 하나를 위해 설계된 코드는 다른 코드를 위해 완전히 다시 생각해야합니다.
하나의 명령어 세트에서 다른 명령어 세트로 명령어를 번역하는 것만이 아닙니다. 다른 명령 세트에서 완전히 다른 접근법이 바람직 할 수 있습니다. 예를 들어, 8 비트 프로세서에서는 찾아보기 테이블이 이상적 일 수 있지만 32 비트 프로세서에서는 동일한 목적으로 산술 연산이 더 좋습니다.
명령어 세트간에 다른 주요 차이점이 있습니다. 대부분의 지침은 네 가지 범주로 나뉩니다.
- 계산 (산술 및 논리)
- 제어 흐름
- 데이터 전송
- 프로세서 구성
프로세서는 수행 할 수있는 계산 종류와 제어 흐름, 데이터 전송 및 프로세서 구성에 접근하는 방법이 다릅니다.
예를 들어, 일부 AVR 프로세서는 곱하거나 나눌 수 없습니다. 모든 x86 프로세서는 가능합니다. 상상할 수 있듯이 곱셈과 나눗셈과 같은 작업에 필요한 회로를 제거하면 프로세서가 더 간단하고 저렴해질 수 있습니다. 이러한 작업은 필요한 경우 소프트웨어 루틴을 사용하여 계속 수행 할 수 있습니다.
x86을 사용하면 산술 명령어가 피연산자를 메모리에서로드하거나 결과를 메모리에 저장할 수 있습니다. ARM은로드 저장소 아키텍처이므로 메모리에 액세스하기위한 몇 가지 전용 명령 만 있습니다. 한편 x86에는 전용 조건부 명령어가 있으며 ARM에서는 거의 모든 명령어를 조건부로 실행할 수 있습니다. 또한 ARM을 사용하면 대부분의 산술 명령어의 일부로 비트 시프트를 수행 할 수 있습니다. 이러한 차이로 인해 성능 특성, 칩의 내부 설계 및 비용의 차이, 어셈블리 언어 수준에서의 프로그래밍 기술의 차이가 발생합니다.
결론
범용 어셈블리 언어를 사용할 수없는 이유는 어셈블리 코드를 하나의 명령어 세트에서 다른 명령어 세트로 올바르게 변환하려면 컴퓨터가 아직 할 수없는 코드를 다시 설계해야하기 때문입니다.