# Instruction Set Architecture **A model of a computer which defines the instructions, data types, registers, main memory management, fundamental features, and the input/output model.** An **instruction set architecture**, or **ISA**, is a model of the relationship between software and the central processing unit of a computer, describing the supported operations and instructions, data types, registers, main memory management, and the input/output interface. A device which executes and follows an instruction set architecture is known as an *implementation* of that architecture. An instruction set architecture defines the behaviour of machine code on any arbitrary implementation and thus allows software designed in a particular architecture to be implemented across many different hardware. ## Types of ISAs The most common classification of ISAs is through *architectural complexity*. - **Complex instruction set computer**, CISC - instructions that execute several low-level operations, rarely used specialised instructions. - **Reduced instruction set computer**, RISC - efficient implementation of frequently used instructions, no direct memory content manipulation and thus, [[load-store architecture]]. ^886a94 ## Instructions *Machine code* consists of *discrete* machine language instructions. These instructions may contain: - *Opcode* - a specification of the operation - *Operand* - the value on which the operation is performed - Registers, shifted registers - Literal/constant values - Addressing modes ### Instruction types #### Data handling and memory operations - *Set* a register to a fixed constant value. - *Copy* data from a memory location or a register to another memory location or a register. This is typically known as `move`, though that may be confused with a true move operation. - *Read* and *write* data from hardware devices. #### Arithmetic and logic operations - *Add, subtract, multiply,* or *divide* the values of two registers. - *Increment* or *decrement* the value in a register. - Perform *bitwise operations*, such as basic or other [[Boolean Algebra#Logical operations|logical operations]], on corresponding bits of a pair of registers. - *Compare* two values in registers. - Perform *floating-point arithmetic* on values. #### Control flow operations - *Branch* to another location in the program and execute from there. - *Conditionally branch* to another location if a certain condition is true. - *Indirectly branch* to another location. - *Call* another block of code and return after execution.