Każdy procesor jest zaprojektowany od podstaw do obsługi określonego zestawu instrukcji. Zestaw instrukcji to zestaw zakodowanych na sztywno operacji, które może wykonać procesor. Operacjami tymi może być np. dodanie do siebie dwóch liczb, przeskoczenie do innej części programu lub porównanie dwóch wartości. Każda operacja, którą może wykonać komputer, jest jednoznacznie reprezentowana przez kod operacyjny.
Kody operacyjne
Podczas wykonywania programu, CPU używa licznika programu do śledzenia, która instrukcja musi być wykonana jako następna. Po pobraniu instrukcji licznik programu jest zwiększany o długość instrukcji, tak aby wskazywał początek następnej instrukcji. Każda instrukcja składa się z kodu operacyjnego. W zależności od instrukcji może zawierać operandy lub nie. Operandy mogą być wartością stałą lub wskaźnikiem do lokalizacji wartości w rejestrze procesora lub w systemowej pamięci RAM.
Po pobraniu pełnej instrukcji należy ją zdekodować. Jest to proces, w którym procesor oddziela opcode i wszelkie operandy. Odkodowany kod operacyjny służy do włączania lub wyłączania określonych ścieżek elektrycznych w procesorze, które zapewnią prawidłowe działanie.
Gdy instrukcja zostanie zdekodowana, zostanie wykonana. Dokładne zachowanie procesora będzie zależeć od operacji. Operacja dodawania sumuje dwie wartości. Operacja skoku obliczy, gdzie w programie skoczyć. Operacja porównania porównuje dwie wartości. Operacja NOP będzie bezczynna, ponieważ NOP oznacza brak operacji.
Większość instrukcji wyświetli wynik operacji. To wyjście może trafić do rejestrów procesora i, jeśli to konieczne, do systemowej pamięci RAM. Każda z tych operacji trwa jeden cykl zegara.
Nielegalne kody operacyjne
Każda architektura procesora ma swoją własną listę kodów operacji publikowanych przez producenta. Wartości tych kodów operacyjnych niekoniecznie są takie same dla wielu platform, dlatego oprogramowanie musi być kompilowane dla różnych architektur. W niektórych przypadkach producent dołącza również nieudokumentowane kody operacyjne. Są one określane jako „nielegalne kody operacyjne”. Nielegalne kody operacji, chociaż nieudokumentowane, będą wykonywać tę samą funkcję za każdym razem, gdy zostaną wywołane. Jednak jako nieudokumentowane i niestandardowe funkcje, aktualizacje architektury procesora mogą po prostu je usunąć.
Niektóre wczesne gry komputerowe na Apple II opierały się na określonych nielegalnych kodach operacyjnych. Następnie napotkali problemy z wydajnością i stabilnością późniejszej wersji procesora Apple IIc, ponieważ IIc usunął nielegalne kody operacyjne wymagane w grach. Nielegalne kody operacyjne były również wykorzystywane w kręgach ochrony praw autorskich jako metoda zabezpieczenia poprzez ukrywanie ich w walce z piratami, którzy łamią ich zawartość. Niektóre niedozwolone kody operacji są po prostu przeznaczone do debugowania i obsługi błędów.
Zestaw instrukcji x86 zawiera dużą liczbę nieudokumentowanych nielegalnych kodów operacji. Co ciekawe, niektóre z nich są współdzielone przez procesory Intel i AMD, co wskazuje, że obie firmy są publicznie świadome swojego celu, chociaż nie są udokumentowane.
Kompilatory i montaż
Większość programów jest napisana w językach wysokiego poziomu. Są one stosunkowo łatwe do odczytania, często zawierają angielskie słowa lub skróty, aby zminimalizować krzywe uczenia się. Aby komputer mógł wykonać te programy, muszą one zostać skompilowane. Kompilator to w zasadzie tłumacz. Pobiera kod wysokiego poziomu i konwertuje go na kod komputerowy, instrukcje zrozumiałe dla procesora.
W niektórych językach możliwe jest również uruchomienie nieskompilowanego kodu za pomocą wcześniej skompilowanego programu, który generuje kod maszynowy w locie. Assembly to język programowania niskiego poziomu, który wykorzystuje skróty, aby umożliwić programistom bezpośredni wgląd i kontrolę nad wykonywanymi operacjami. NOP jest przykładem skrótu montażowego.
Wniosek
Zestaw instrukcji to lista oficjalnych funkcji, które może uruchomić architektura procesora. Jest to lista operacji, które można wykonać. Operacje te są na stałe zakodowane w procesorze i wywoływane przy użyciu odpowiednich kodów operacji.
Oprogramowanie zazwyczaj używa kompilatora do tłumaczenia z czytelnego dla człowieka kodu wysokiego poziomu na kod maszynowy, który może odczytać procesor. Czasami architektura procesora może mieć nieudokumentowane kody operacji, zwane nielegalnymi kodami operacji. Niedozwolone kody operacyjne są technicznie częścią zestawu instrukcji. Mogą jednak nie być niezawodnie dostępne w przyszłych iteracjach platformy. Nie zapomnij zostawić swoich przemyśleń w komentarzach poniżej.