Powody wysokiego poziomu
Kiedy się nad tym zastanowić, mikroprocesor robi niesamowitą rzecz: pozwala zabrać maszynę (taką jak pralka lub winda) i zastąpić cały kawałek niestandardowych mechanizmów lub obwodów tanim, masowo produkowanym krzemem żeton. Zaoszczędzisz dużo pieniędzy na częściach i dużo czasu na projekt.
Ale poczekaj, standardowy układ zastępujący niezliczone niestandardowe projekty? Nie może być jednego idealnego mikroprocesora, który byłby idealny dla każdego zastosowania. Niektóre aplikacje muszą minimalizować zużycie energii, ale nie muszą być szybkie; inne muszą być szybkie, ale nie muszą być łatwe do zaprogramowania, inne muszą być tanie, itp.
Mamy więc wiele różnych „smaków” mikroprocesora, z których każdy ma swoje mocne i słabe strony. Pożądane jest, aby wszyscy korzystali z kompatybilnego zestawu instrukcji, ponieważ umożliwia to ponowne użycie kodu i ułatwia znalezienie osób o odpowiednich umiejętnościach. Jednak zestaw instrukcji nie wpływa na koszty, złożoność, szybkość, łatwość użycia i fizyczne ograniczenia procesora, a więc mamy kompromis: istnieje kilka „mainstreamowe” zestawy instrukcji (i wiele z nich moll), a w każdym zestawie instrukcji znajduje się wiele procesorów o różnych właściwościach.
Aha, a wraz ze zmianą technologii zmieniają się wszystkie kompromisy, więc ewoluują zestawy instrukcji, pojawiają się nowe, a stare umierają. Nawet gdyby istniał dziś „najlepszy” zestaw instrukcji, może nie być za 20 lat.
Szczegóły sprzętu
Prawdopodobnie największą decyzją projektową w zestawie instrukcji jest rozmiar słowa , tzn. Jak duża liczba procesor może „naturalnie” manipulować. 8-bitowe procesory obsługują liczby od 0 do 255, podczas gdy 32-bitowe procesory obsługują liczby od 0 do 4 294 967 295. Kod zaprojektowany dla jednego musi być całkowicie przemyślany dla innego.
Nie chodzi tylko o tłumaczenie instrukcji z jednego zestawu instrukcji na inny. W innym zestawie instrukcji może być preferowane zupełnie inne podejście. Na przykład na 8-bitowym procesorze tablica odnośników może być idealna, podczas gdy na 32-bitowym procesorze lepiej byłoby wykonać operację arytmetyczną w tym samym celu.
Istnieją inne główne różnice między zestawami instrukcji. Większość instrukcji dzieli się na cztery kategorie:
- Obliczenia (arytmetyka i logika)
- Kontrola przepływu
- Transfer danych
- Konfiguracja procesora
Procesory różnią się rodzajem obliczeń, które mogą wykonywać, a także sposobem podejścia do przepływu kontroli, transferu danych i konfiguracji procesora.
Na przykład niektóre procesory AVR nie mogą się zwielokrotniać ani dzielić; podczas gdy wszystkie procesory x86 mogą. Jak można sobie wyobrazić, wyeliminowanie obwodów wymaganych do zadań takich jak mnożenie i dzielenie może uczynić procesor prostszym i tańszym; operacje te mogą być nadal wykonywane przy użyciu procedur oprogramowania, jeśli są potrzebne.
x86 pozwala instrukcjom arytmetycznym ładować operandy z pamięci i / lub zapisywać wyniki w pamięci; ARM jest architekturą przechowującą ładunki, dlatego ma tylko kilka dedykowanych instrukcji dostępu do pamięci. Tymczasem x86 ma dedykowane instrukcje rozgałęzienia warunkowego, podczas gdy ARM pozwala na warunkowe wykonanie praktycznie wszystkich instrukcji. Ponadto ARM pozwala na przeprowadzanie przesunięć bitów w ramach większości instrukcji arytmetycznych. Różnice te prowadzą do różnych charakterystyk wydajności, różnic w projekcie wewnętrznym i koszcie chipów oraz różnic w technikach programowania na poziomie języka asemblera.
Wniosek
Powodem niemożności posiadania uniwersalnego języka asemblera jest to, że aby poprawnie przekonwertować kod asemblera z jednego zestawu instrukcji na inny, należy od nowa zaprojektować kod - czego nie mogą jeszcze zrobić komputery.