Kod opcode określa, która z podstawowych operacji komputerowych w zestawie instrukcji ma być wykonana. Jest on używany podczas pisania kodu maszynowego. Mówi on komputerowi, aby coś zrobił. Każda instrukcja w języku maszynowym ma zazwyczaj zarówno opcode jak i operandy. Opcode jest jak czasownik w zdaniu, a operandy są jak przedmiot w zdaniu. Operandy to zazwyczaj adresy pamięci lub rejestru.
Kody Opcodes są używane w kodzie maszynowym dla wielu funkcji, w tym Float Addition of registers, Two's compliment addition of registers, Shifting register values to memory, or to a hard drive, stopping a program, etc. Istnieją dosłownie setki popularnych opcodów stosowanych w nowoczesnych komputerach.
Ze względu na charakter architektury komputera, opcody przyjmują postać liczb binarnych. Alternatywnie, opcody mogą być reprezentowane przez cyfry w systemie szesnastkowym (na przykład 10100101 = A5) dla ułatwienia odczytu i kodowania podczas projektowania lub emulacji programu z kodem maszyny. Wartości te są następnie przekształcane na ich binarne odpowiedniki do zapisania. Nowoczesne opcody to co najmniej dwa znaki szesnastkowe o długości, które zajmują 1 bajt przestrzeni dyskowej.
Opcody różnią się możliwościami i "wartością" w zależności od komputera, do którego należą, ponieważ są zależne od sprzętu. Na przykład, opcode dla STORE wyrażony w Hexie może być FA dla jednej maszyny i 02 dla innej. Niektóre opcody nie będą dostępne na niektórych komputerach. Ogólnie rzecz biorąc, istnieją dwa podejścia do budowania zestawów instrukcji. Komputer z zredukowanym zestawem instrukcji (RISC) oferuje mniej możliwych opcodów na rzecz zwiększenia szybkości dla prostych procesów. Złożony zestaw instrukcji Computing (CISC) oferuje więcej opcodów na rzecz zwiększenia prędkości dla złożonych procesów.
Opcody są rzadko używane bezpośrednio przez programistów. Zawsze, gdy są bezpośrednio zaprogramowane w pamięci, mają gwarancję, że będą działać tylko na komputerze, do którego zostały zaprojektowane. Kiedy programiści piszą w języku asemblera, program tłumaczący zamienia wypowiedzi programowe, jeden na jeden, na polecenia w języku maszynowym. Programista musi zapamiętać tylko mnemonik dla każdego kodu zamiast jego wartości binarnej. Alternatywnie, można użyć języka programowania wysokiego poziomu, powiedzmy 4. generacji, który jest konwertowany do 3. generacji i tak dalej, aż osiągnie 1. generacji. Z tego miejsca indywidualny komputer będzie konwertował program do kodu maszynowego za każdym razem, gdy plik programu zostanie odczytany. W ten sposób program może pracować na znacznie większej liczbie komputerów.