W informatyce termin rozkaz (instrukcja) oznacza pojedynczą operację wykonywaną przez procesor i jest zdefiniowana przez konkretny zestaw instrukcji danej architektury. Rozkaz reprezentuje polecenie typu arytmetycznego, logicznego, sterującego przepływem danych lub wejścia/wyjścia; jego dokładne znaczenie zależy od specyfikacji architektury.
Rozmiar i format
Długość rozkazów w praktyce bardzo się różni. W najprostszych urządzeniach, np. w niektórych mikrokontrolerach, instrukcje mogą mieć zaledwie kilka bitów, podczas gdy w bardziej rozbudowanych układach mogą zajmować wiele bajtów. W architekturach typu VLIW (Very Long Instruction Word) jedna jednostka rozkazowa może zawierać wiele operacji, co w tekście specyfikacji opisywane jest jako długie słowo instrukcyjne VLIW i w praktyce bywa implementowane jako szerokie pola kodu VLIW. Typowe procesory ogólnego przeznaczenia stosowane w komputerach osobistych PC, systemach klasy mainframe mainframe czy w superkomputerach superkomputer zwykle operują na instrukcjach o długości rzędu 16–64 bitów.
Stała długość i architektury RISC
W wielu projektach, szczególnie w architekturach o zredukowanym zestawie instrukcji (RISC) RISC, przyjęto stałą długość rozkazu odpowiadającą szerokości słowa maszyny, czyli naturalnemu rozmiarowi danych dla danej architektury, zwanemu także słowem. Stały format ułatwia dekodowanie i przewidywalność wykonania rozkazów w potokowych i superskalarowych jednostkach wykonawczych.
Składniki rozkazu
Tradycyjny rozkaz składa się z elementów takich jak: kod operacji (opcode) opcode, który określa, co należy wykonać, oraz pola określające argumenty czy operandy operand. Operandy mogą wskazywać rejestry rejestry, adresy pamięci lub zawierać dane stałe (bezpośrednio w polu rozkazu). Dla operandów stosuje się różne tryby adresowania, np. bezpośredni, pośredni, indeksowy czy natychmiastowy, które definiują sposób interpretacji zawartości pól.
Odmiany i równoległość instrukcji
W podejściu VLIW VLIW pojedynczy rozkaz może enkodować kilka niezależnych operacji wykonywanych równolegle, co przypomina jednoczesne polecenia mikrokodów mikrokod. Takie rozwiązania przenoszą część odpowiedzialności za planowanie równoległości do kompilatora lub narzędzi linkujących.
Reprezentacja i generowanie
W praktyce programiści rzadko zapisują rozkazy w surowym kodzie maszynowym kod maszynowy; zamiast tego korzysta się z języka symbolicznego, czyli asemblera assembler, lub — jeszcze częściej — instrukcje są emitowane automatycznie przez kompilatory tłumaczące wyżej-poziomowy kod źródłowy na sekwencje rozkazów. Kompilatory optymalizujące dobierają rozkazy tak, aby poprawić szybkość, zużycie pamięci i wykorzystanie jednostek wykonawczych.
Poza wąsko rozumianym zestawem procesora istnieje też szersza definicja: rozkaz może być dowolną reprezentacją elementu wykonywalnego programu, powiązaną z danym zestawem instrukcji lub modelem wykonawczym, i traktowaną jako część programu komputerowego program komputerowy. Rozumienie tego pojęcia pozwala analizować zarówno niskopoziomowe aspekty CPU, jak i wyższe warstwy kompilacji i modelowania zachowania programów.