Opcode: Difference between revisions

Content deleted Content added
Distinguished generic opcode from detailed usage in CPUs
CPUs: -redundant links; some reformatting
Line 5:
 
==CPUs==
In CPUs, an opcode may be referred to as '''instruction machine code'''<ref name="Intel_1973_MCS-4"/>, '''instruction code'''<ref name="Intel_1974_MCS-40"/>, '''instruction syllable'''<ref name="Jones_1988_CISC"/><ref name="Domagała_2012"/><ref name="Smotherman_2013"/><ref name="Jones_2016_CISC"/>, '''instruction parcel''' or '''opstring'''<ref name="Schulman_2005"/><ref name="Chiba_2007"/>. Beside the opcode itself, most instructions also specify the data they will process, in thewhich formare ofcalled [[operand]]s. In addition to opcodes used in the [[instruction set architecture]]s (ISAs) of various CPUs, which are hardware devices, they can also be used in [[virtual machine#Process virtual machines|abstract computing machines]] as part of their [[byte code]] specifications.
 
Specifications and format of the opcodes are laid out in the instruction set architecture ([[instruction set architecture|ISA]]) of the processor in question, which may be a general CPU or a more specialized processing unit.<ref name="Hennessy_2017"/> Opcodes for a given instruction set can be described through the use of an [[opcode table]] detailing all possible opcodes. Apart from the opcode itself, an instruction normally also has one or more specifiers for [[operand]]s (i.e. data)operands on which the operation should act, although some operations may have ''implicit'' operands, or none at all.<ref name="Hennessy_2017"/> There are instruction sets with nearly uniform fields for opcode and operand specifiers, as well as others (the [[x86]] architecture for instance) with a more complicated, variable-length structure.<ref name="Hennessy_2017"/><ref name="Mansfield_1983"/> Instruction sets can be extended through the use of opcode prefixes which add a subset of new instructions made up of existing opcodes following reserved byte sequences.{{Citation needed|date=February 2023}}
 
===Operands===
Depending on architecture, the ''operands'' may be [[processor register|register]] values, values in the [[call stack|stack]], other [[memory]] values, [[I/O]] ports (which may also be [[Memory-mapped I/O|memory mapped]]), etc., specified and accessed using more or less complex [[addressing mode]]s.{{citation needed|date=October 2015}} The types of ''operations'' include [[arithmetic]], data copying, [[logical operation]]s, and program control, as well as special instructions (such as [[CPUID]] and others).<ref name="Hennessy_2017"/>
 
[[Assembly language]], or just ''assembly'', is a [[low-level programming language]], which uses [[Assembly language#Opcode mnemonics and extended mnemonics|mnemonic]] instructions and operands to represent [[machine code]].<ref name="Hennessy_2017"/> This enhances the readability while still giving precise control over the machine instructions. Most programming is currently done using [[high-level programming language]]s,<ref name="langpop"/> which are typically easier for humans to understand and write.<ref name="Hennessy_2017"/> These languages need to be compiled (translated into assembly language) by a [[Operating system|system]]-specific [[compiler]], or run through other compiled programs.<ref name="Swanson_2001"/>
 
=={{Anchor|SIS}}Software instruction sets==