Instruction Set Architecture (ISA)
Instruction Set Architecture (ISA)¶
Overview¶
Instruction Set Architecture (ISA) defines the interface between software and hardware. The ISA specifies the set of instructions a processor can understand, registers, memory addressing modes, and more. In this lesson, we'll learn about ISA concepts, compare CISC and RISC, examine instruction formats, and explore various addressing modes.
Difficulty: βββ
Prerequisites: Basic CPU structure, control unit, binary representation
Table of Contents¶
- ISA Concepts
- CISC vs RISC Comparison
- Instruction Formats
- Addressing Modes
- Major ISAs
- Practice Problems
1. ISA Concepts¶
1.1 What is an ISA?¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ISA: The Contract Between Software and Hardware β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Software β β
β β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββββββ β β
β β β Applications β β Compiler β β Operating Systemβ β β
β β β (C, Java) β β (GCC) β β (Linux, Win) β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β β Abstraction Layer β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ISA (Instruction Set Architecture) β β
β β β β
β β - Instructions β β
β β - Registers β β
β β - Data Types β β
β β - Addressing Modes β β
β β - Memory Model β β
β β - I/O β β
β β - Exception Handling β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β β Implementation β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Hardware β β
β β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββββββ β β
β β β CPU β β Cache β β Memory β β β
β β β Micro- β β β β β β β
β β β architectureβ β β β β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1.2 What an ISA Defines¶
| Component | Description | Examples |
|---|---|---|
| Instruction Set | Operations the processor can execute | ADD, SUB, LOAD, STORE, JUMP |
| Registers | Programmer-accessible registers | x86: EAX, EBX / ARM: R0-R15 |
| Data Types | Supported data formats | byte, word, integer, floating-point |
| Instruction Format | Bit encoding of instructions | R-type, I-type, J-type |
| Addressing Modes | How to specify operand locations | immediate, direct, indirect, register |
| Memory Model | Memory access methods and alignment rules | Little/Big Endian, alignment requirements |
| Exceptions/Interrupts | How to handle exceptional conditions | traps, interrupt vectors |
1.3 ISA vs Microarchitecture¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Relationship Between ISA and Microarchitecture β
β β
β One ISA ββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Can be implemented by multiple β β
β β microarchitectures β β
β β β β
β βΌ βΌ β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β x86 ISA β β x86 ISA β β x86 ISA β β
β β β β β β β β
β β Intel Core β β Intel Atom β β AMD Zen 3 β β
β β(High-perf) β β(Low-power) β β(Competitor) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β
β The same program runs on all implementations! β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Analogy β β
β β β β
β β ISA = Car driving interface (steering, pedals, gears) β β
β β Microarchitecture = Engine implementation (gas, diesel, EV) β β
β β β β
β β β Driver operates the same way regardless of engine type β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
2. CISC vs RISC Comparison¶
2.1 CISC (Complex Instruction Set Computer)¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CISC Characteristics β
β β
β Philosophy: "Perform complex operations with a single instruction" β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β CISC Instruction Example (x86) β β
β β β β
β β REP MOVSB ; Memory block copy (repeat + move) β β
β β β β
β β What this single instruction does: β β
β β 1. Check ECX register value (repeat count) β β
β β 2. Read byte from ESI β β
β β 3. Write byte to EDI β β
β β 4. Increment/decrement ESI, EDI β β
β β 5. Decrement ECX β β
β β 6. Repeat if ECX > 0 β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Characteristics: β
β βββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββ β
β β Number of instr. β Many (hundreds to thousands) β β
β βββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ€ β
β β Instruction lengthβ Variable (1 - 15 bytes) β β
β βββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ€ β
β β Addressing modes β Diverse (12+ modes) β β
β βββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ€ β
β β Memory access β Direct memory reference in instructions β β
β βββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ€ β
β β Execution cycles β Varies per instruction (1 - tens) β β
β βββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ€ β
β β Control unit β Microprogrammed (mainly) β β
β βββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
2.2 RISC (Reduced Instruction Set Computer)¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RISC Characteristics β
β β
β Philosophy: "Execute simple instructions quickly" β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β RISC Instruction Example (MIPS) β β
β β β β
β β Instruction sequence for memory copy: β β
β β β β
β β loop: β β
β β lb $t0, 0($s0) ; Load byte from source β β
β β sb $t0, 0($s1) ; Store byte to destination β β
β β addi $s0, $s0, 1 ; Increment source pointer β β
β β addi $s1, $s1, 1 ; Increment destination pointer β β
β β addi $t1, $t1, -1 ; Decrement counter β β
β β bne $t1, $zero, loop ; Repeat if not zero β β
β β β β
β β Decomposed into 6 simple instructions β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Characteristics: β
β βββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββ β
β β Number of instr. β Few (tens to ~100) β β
β βββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ€ β
β β Instruction lengthβ Fixed (32 bits) β β
β βββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ€ β
β β Addressing modes β Limited (3-5 modes) β β
β βββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ€ β
β β Memory access β Load/Store only (arithmetic on registers) β β
β βββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ€ β
β β Execution cycles β Mostly 1 cycle (pipelining) β β
β βββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ€ β
β β Control unit β Hardwired β β
β βββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
2.3 Detailed CISC vs RISC Comparison¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CISC vs RISC Comparison Table β
ββββββββββββββββββββββββ¬ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ€
β Aspect β CISC β RISC β
ββββββββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββββββββββββββββ€
β Representative ISA β x86, x86-64 β ARM, MIPS, RISC-V β
ββββββββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββββββββββββββββ€
β Instruction format β Variable length β Fixed length β
β β (1-15 bytes) β (4 bytes) β
ββββββββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββββββββββββββββ€
β Number of registers β Few (8-16) β Many (32+) β
ββββββββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββββββββββββββββ€
β Memory operations β All instructions β Load/Store only β
ββββββββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββββββββββββββββ€
β Compiler complexity β Low β High β
ββββββββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββββββββββββββββ€
β Hardware complexity β High β Low β
ββββββββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββββββββββββββββ€
β Pipelining β Difficult β Easy β
ββββββββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββββββββββββββββ€
β Code density β High β Low β
ββββββββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββββββββββββββββ€
β Power efficiency β Low β High β
ββββββββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββββββββββββββββ€
β Primary use cases β Desktop, Server β Mobile, Embedded β
ββββββββββββββββββββββββ΄ββββββββββββββββββββββ΄βββββββββββββββββββββββββββββ
2.4 Modern Perspective¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Convergence in Modern Processors β
β β
β Modern x86 Processors (Intel/AMD): β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β x86 CISC Instructions β β
β β β β β
β β βΌ β β
β β βββββββββββββββββββββββ β β
β β β Instruction Decoderβ β β
β β β (CISC β micro-ops) β β β
β β ββββββββββββ¬βββββββββββ β β
β β β β β
β β βΌ β β
β β βββββββββββββββββββββββ β β
β β β RISC-style Core β β β
β β β (executes micro-ops)β β β
β β β - Pipelining β β β
β β β - Superscalar β β β
β β β - Out-of-order β β β
β β βββββββββββββββββββββββ β β
β β β β
β β Conclusion: CISC on the outside, RISC on the inside! β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ARM Processors: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - Maintains basic RISC design β β
β β - Added some complex instructions (SIMD, encryption, etc.) β β
β β - Entering desktop/server market (Apple M1, AWS Graviton) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3. Instruction Formats¶
3.1 MIPS Instruction Formats¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MIPS Instruction Formats (32-bit) β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β R-type (Register) β β
β β β β
β β 31 26 25 21 20 16 15 11 10 6 5 0 β β
β β ββββββββ¬ββββββββ¬ββββββββ¬ββββββββ¬ββββββββ¬βββββββββ β β
β β βopcodeβ rs β rt β rd β shamt β funct β β β
β β β6 bitsβ5 bits β5 bits β5 bits β5 bits β6 bits β β β
β β ββββββββ΄ββββββββ΄ββββββββ΄ββββββββ΄ββββββββ΄βββββββββ β β
β β β β
β β Example: ADD $rd, $rs, $rt β β
β β opcode=0, funct=0x20 (add) β β
β β rd = rs + rt β β
β β β β
β β Example: SLL $rd, $rt, shamt β β
β β rd = rt << shamt β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β I-type (Immediate) β β
β β β β
β β 31 26 25 21 20 16 15 0 β β
β β ββββββββ¬ββββββββ¬ββββββββ¬ββββββββββββββββββββββ β β
β β βopcodeβ rs β rt β immediate β β β
β β β6 bitsβ5 bits β5 bits β 16 bits β β β
β β ββββββββ΄ββββββββ΄ββββββββ΄ββββββββββββββββββββββ β β
β β β β
β β Example: ADDI $rt, $rs, imm β β
β β rt = rs + sign_extend(imm) β β
β β β β
β β Example: LW $rt, offset($rs) β β
β β rt = Memory[rs + sign_extend(offset)] β β
β β β β
β β Example: BEQ $rs, $rt, offset β β
β β if (rs == rt) PC = PC + 4 + offset * 4 β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β J-type (Jump) β β
β β β β
β β 31 26 25 0 β β
β β ββββββββ¬ββββββββββββββββββββββββββββββββββββββ β β
β β βopcodeβ address β β β
β β β6 bitsβ 26 bits β β β
β β ββββββββ΄ββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Example: J target β β
β β PC = (PC[31:28] << 28) | (address << 2) β β
β β β β
β β Example: JAL target β β
β β $ra = PC + 4; PC = target β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3.2 MIPS Instruction Encoding Examples¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MIPS Instruction Encoding Examples β
β β
β Example 1: ADD $t0, $s1, $s2 β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
β R-type: rd = rs + rt β
β $t0 = 8, $s1 = 17, $s2 = 18 β
β β
β ββββββββ¬ββββββββ¬ββββββββ¬ββββββββ¬ββββββββ¬βββββββββ β
β β000000β 10001 β 10010 β 01000 β 00000 β 100000 β β
β β op β rs β rt β rd β shamt β funct β β
β β =0 β =$s1 β =$s2 β =$t0 β =0 β =add β β
β ββββββββ΄ββββββββ΄ββββββββ΄ββββββββ΄ββββββββ΄βββββββββ β
β = 0x02324020 β
β β
β Example 2: LW $t0, 100($s0) β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
β I-type: rt = Memory[rs + offset] β
β $t0 = 8, $s0 = 16, offset = 100 β
β β
β ββββββββ¬ββββββββ¬ββββββββ¬ββββββββββββββββββββββ β
β β100011β 10000 β 01000 β 0000000001100100 β β
β β op β rs β rt β immediate β β
β β =lw β =$s0 β =$t0 β =100 β β
β ββββββββ΄ββββββββ΄ββββββββ΄ββββββββββββββββββββββ β
β = 0x8E080064 β
β β
β Example 3: BEQ $s0, $s1, loop (loop is 8 bytes ahead) β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
β I-type: if (rs == rt) PC = PC + 4 + offset*4 β
β offset = (loop - PC - 4) / 4 = 2 β
β β
β ββββββββ¬ββββββββ¬ββββββββ¬ββββββββββββββββββββββ β
β β000100β 10000 β 10001 β 0000000000000010 β β
β β op β rs β rt β offset β β
β β =beq β =$s0 β =$s1 β =2 β β
β ββββββββ΄ββββββββ΄ββββββββ΄ββββββββββββββββββββββ β
β = 0x12110002 β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3.3 ARM Instruction Formats¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ARM Instruction Formats (32-bit) β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Data Processing β β
β β β β
β β 31 28 27 26 25 24 21 20 19 16 15 12 11 0 β β
β β ββββββ¬ββββββ¬βββ¬ββββββββ¬βββ¬βββββββ¬βββββββ¬ββββββββββββββββ β β
β β βcondβ 00 βI βopcode βS β Rn β Rd β Operand2 β β β
β β β4bitβ2bit β1 β 4bit β1 β 4bit β 4bit β 12bit β β β
β β ββββββ΄ββββββ΄βββ΄ββββββββ΄βββ΄βββββββ΄βββββββ΄ββββββββββββββββ β β
β β β β
β β cond: Condition code (EQ, NE, GT, LT, etc.) β β
β β I: Immediate flag β β
β β S: Update flags flag β β
β β β β
β β Example: ADD R0, R1, R2 β β
β β Rd = Rn + Operand2 β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Load/Store (Memory Access) β β
β β β β
β β 31 28 27 26 25 24 23 22 21 20 19 16 15 12 11 0 β β
β β ββββββ¬ββββββ¬βββ¬βββ¬βββ¬βββ¬βββ¬βββ¬βββββββ¬βββββββ¬ββββββββββββββ β β
β β βcondβ 01 βI βP βU βB βW βL β Rn β Rd β offset β β β
β β β4bitβ2bit β1 β1 β1 β1 β1 β1 β 4bit β 4bit β 12bit β β β
β β ββββββ΄ββββββ΄βββ΄βββ΄βββ΄βββ΄βββ΄βββ΄βββββββ΄βββββββ΄ββββββββββββββ β β
β β β β
β β P: Pre/Post indexing β β
β β U: Up/Down (add/subtract) β β
β β B: Byte/Word β β
β β W: Write-back β β
β β L: Load/Store β β
β β β β
β β Example: LDR R0, [R1, #100] β β
β β R0 = Memory[R1 + 100] β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Branch β β
β β β β
β β 31 28 27 25 24 23 0 β β
β β ββββββ¬ββββββββ¬βββ¬βββββββββββββββββββββββββββββββ β β
β β βcondβ 101 βL β offset β β β
β β β4bitβ 3bit β1 β 24bit β β β
β β ββββββ΄ββββββββ΄βββ΄βββββββββββββββββββββββββββββββ β β
β β β β
β β L: Link (1 for BL, saves return address to LR) β β
β β offset: PC-relative offset (<<2 then sign-extended) β β
β β β β
β β Example: BL function β β
β β LR = PC + 4; PC = PC + offset << 2 β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3.4 x86 Instruction Format¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β x86 Instruction Format (Variable Length) β
β β
β ββββββββ¬ββββββββ¬ββββββββββ¬βββββββββ¬ββββββββββββββ¬ββββββββββββββββ β
β βPrefixβOpcode β ModR/M β SIB βDisplacement β Immediate β β
β β0-4 β1-3 β 0-1 β 0-1 β 0,1,2,4 β 0,1,2,4 β β
β βbytes βbytes β byte β byte β bytes β bytes β β
β ββββββββ΄ββββββββ΄ββββββββββ΄βββββββββ΄ββββββββββββββ΄ββββββββββββββββ β
β β
β ModR/M byte (operand specification): β
β ββββββββββ¬ββββββββ¬ββββββββ β
β β Mod β Reg β R/M β β
β β 2 bits β3 bits β3 bits β β
β ββββββββββ΄ββββββββ΄ββββββββ β
β β
β SIB byte (complex address calculation): β
β ββββββββββ¬ββββββββ¬ββββββββ β
β β Scale β Index β Base β β
β β 2 bits β3 bits β3 bits β β
β ββββββββββ΄ββββββββ΄ββββββββ β
β Address = Base + Index * Scale + Displacement β
β β
β Example: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β MOV EAX, [EBX+ECX*4+100] β β
β β β β
β β ββββββββββ¬ββββββββββ¬ββββββββββ¬βββββββββββββββ β β
β β β 8B β 84 β 8B β 64 00 00 00 β β β
β β β Opcode β ModR/M β SIB β Displacement β β β
β β β βMod=10 βScale=4 β =100 β β β
β β β βReg=EAX βIndex=ECXβ β β β
β β β βR/M=100 βBase=EBX β β β β
β β ββββββββββ΄ββββββββββ΄ββββββββββ΄βββββββββββββββ β β
β β Total: 7 bytes β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
4. Addressing Modes¶
4.1 Addressing Modes Overview¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Types of Addressing Modes β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1. Immediate Addressing β β
β β β β
β β Instruction: ADDI $t0, $t1, 100 β β
β β β β
β β ββββββββββ¬ββββββββββββββββββββββββββββββββ β β
β β β Opcode β ... β 100 (Immediate Value) β β β
β β ββββββββββ΄ββββββββββββββββββ¬ββββββββββββββ β β
β β β β β
β β βΌ β β
β β Operand β β
β β β β
β β Operand is included in the instruction β β
β β Fast, suitable for constants β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 2. Register Addressing β β
β β β β
β β Instruction: ADD $t0, $t1, $t2 β β
β β β β
β β ββββββββββ¬βββββββ¬βββββββ¬βββββββ β β
β β β Opcode β $t1 β $t2 β $t0 β β β
β β ββββββββββ΄ββββ¬βββ΄ββββ¬βββ΄βββββββ β β
β β β β β β
β β βΌ βΌ β β
β β ββββββββββββββββββββ β β
β β β Register File β β β
β β β ββββββ¬βββββ¬βββββ β β
β β β β$t1 β$t2 β...ββ β β
β β β ββββ¬ββ΄βββ¬ββ΄βββββ β β
β β βββββββΌβββββΌβββββββ β β
β β βΌ βΌ β β
β β Operands β β
β β β β
β β Register number specifies operand β β
β β Fastest (register access) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
4.2 Memory Addressing Modes¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Memory Addressing Modes β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 3. Direct Addressing β β
β β β β
β β Instruction: LOAD R1, 0x1000 β β
β β β β
β β ββββββββββ¬βββββββββββββββββββββββ β β
β β β Opcode β Address: 0x1000 β β β
β β ββββββββββ΄βββββββββββ¬ββββββββββββ β β
β β β β β
β β βΌ β β
β β βββββββββββββββββββ β β
β β β Memory β β β
β β β 0x1000: [data] β ββββΊ Operand β β
β β βββββββββββββββββββ β β
β β β β
β β Address directly included in instruction β β
β β Used for global variables β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 4. Indirect Addressing β β
β β β β
β β Instruction: LOAD R1, (0x1000) β β
β β β β
β β ββββββββββ¬βββββββββββββββββββββββ β β
β β β Opcode β Address: 0x1000 β β β
β β ββββββββββ΄βββββββββββ¬ββββββββββββ β β
β β β β β
β β βΌ β β
β β βββββββββββββββββββ β β
β β β Memory β β β
β β β 0x1000: 0x2000 β ββ β β
β β β 0x2000: [data] βββ ββββΊ Operand β β
β β βββββββββββββββββββ β β
β β β β
β β Actual address read from memory β β
β β Used for pointers, dynamic data structures β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 5. Register Indirect Addressing β β
β β β β
β β Instruction: LW $t0, ($s0) ; MIPS β β
β β Instruction: MOV EAX, [EBX] ; x86 β β
β β β β
β β ββββββββββ¬ββββββββ β β
β β β Opcode β $s0 β β β
β β ββββββββββ΄ββββ¬ββββ β β
β β β β β
β β βΌ β β
β β ββββββββββββββββ β β
β β β $s0 = 0x1000 β β β
β β ββββββββ¬ββββββββ β β
β β β β β
β β βΌ β β
β β βββββββββββββββββββ β β
β β β Memory β β β
β β β 0x1000: [data] β ββββΊ Operand β β
β β βββββββββββββββββββ β β
β β β β
β β Register contains the memory address β β
β β Used for pointer dereferencing β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
4.3 Displacement Addressing¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Displacement Addressing Modes β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 6. Displacement/Base Addressing β β
β β β β
β β Instruction: LW $t0, 100($s0) ; MIPS β β
β β Instruction: MOV EAX, [EBX+100] ; x86 β β
β β β β
β β ββββββββββ¬ββββββββ¬ββββββββββββ β β
β β β Opcode β $s0 β offset=100β β β
β β ββββββββββ΄ββββ¬ββββ΄ββββββ¬ββββββ β β
β β β β β β
β β βΌ β β β
β β ββββββββββββββββ β β β
β β β $s0 = 0x1000 β β β β
β β ββββββββ¬ββββββββ β β β
β β β β β β
β β βββββββ¬ββββββ β β
β β β + (address calculation) β β
β β βΌ β β
β β Effective Address = 0x1064 β β
β β β β β
β β βΌ β β
β β βββββββββββββββββββ β β
β β β Memory β β β
β β β 0x1064: [data] β ββββΊ Operand β β
β β βββββββββββββββββββ β β
β β β β
β β Base register + displacement calculates address β β
β β Used for array, struct access β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 7. Indexed Addressing β β
β β β β
β β Instruction: MOV EAX, [EBX + ECX*4 + 100] ; x86 β β
β β β β
β β Effective Address = Base + Index Γ Scale + Displacement β β
β β = EBX + ECX Γ 4 + 100 β β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββ β β
β β β β β β
β β β EBX (base) βββββββββββββββ β β β
β β β β β β β
β β β ECX (index) ββΊ Γ 4 βββββββ€ β β β
β β β β + βββΊ Effective Address β β
β β β 100 (displacement) βββββββ β β β
β β β β β β
β β ββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Optimized for array element access β β
β β Example: array[i] = arr_base + i * sizeof(element) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
4.4 PC-Relative Addressing¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PC-Relative Addressing β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 8. PC-Relative Addressing β β
β β β β
β β Instruction: BEQ $t0, $t1, label β β
β β β β
β β Effective Address = PC + offset Γ 4 β β
β β β β
β β ββββββββββ¬ββββββββ¬ββββββββ¬ββββββββββββββββ β β
β β β Opcode β $t0 β $t1 β offset = 3 β β β
β β ββββββββββ΄ββββββββ΄ββββββββ΄ββββββββ¬ββββββββ β β
β β β β β
β β Memory layout: β β β
β β βββββββββββββββββββββββββββββββ β β β
β β β 0x1000: BEQ ... ββββ PC (current) β β
β β β 0x1004: ... β β β
β β β 0x1008: ... β β β
β β β 0x100C: ... β β β
β β β 0x1010: label: ββββ PC + 4 + 3Γ4 = 0x1010 β β
β β βββββββββββββββββββββββββββββββ β β
β β β β
β β Primarily used for branch instructions β β
β β Supports Position Independent Code (PIC) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
4.5 Addressing Modes Comparison¶
| Mode | Effective Address | Advantages | Disadvantages | Use Case |
|---|---|---|---|---|
| Immediate | None (value itself) | Fast | Limited value size | Constants |
| Register | Register | Fastest | Limited registers | Temp variables |
| Direct | Address in instruction | Simple | Address size limit | Global variables |
| Indirect | Mem[address] | Flexible | 2 memory accesses | Pointers |
| Register Indirect | Reg | Flexible | - | Pointer dereference |
| Displacement | Reg + offset | Array access | - | Struct/Array |
| Indexed | Base + IdxΓS + D | Array optimization | Complex | array[i] |
| PC-Relative | PC + offset | PIC support | Range limited | Branches |
5. Major ISAs¶
5.1 x86 / x86-64¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β x86 / x86-64 β
β β
β History: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1978: 8086 (16-bit) β β
β β 1985: 80386 (32-bit, IA-32) β β
β β 2003: x86-64 / AMD64 (64-bit) β β
β β Today: Used in billions of PCs/servers β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Registers (x86-64): β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β General-purpose registers (16): β β
β β RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8-R15 β β
β β β β
β β Special registers: β β
β β RIP (Instruction Pointer), RFLAGS (status flags) β β
β β β β
β β Segment registers: β β
β β CS, DS, SS, ES, FS, GS β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Representative instructions: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ; Data movement β β
β β MOV EAX, EBX ; EAX = EBX β β
β β MOV EAX, [EBX] ; EAX = Memory[EBX] β β
β β MOV EAX, [EBX+ECX*4] ; Array access β β
β β β β
β β ; Arithmetic β β
β β ADD EAX, EBX ; EAX = EAX + EBX β β
β β SUB EAX, 10 ; EAX = EAX - 10 β β
β β IMUL EAX, EBX ; EAX = EAX * EBX β β
β β β β
β β ; Branching β β
β β CMP EAX, EBX ; Compare (set flags) β β
β β JE label ; Jump if Equal β β
β β JNE label ; Jump if Not Equal β β
β β JMP label ; Unconditional jump β β
β β β β
β β ; Function calls β β
β β CALL function ; Call function β β
β β RET ; Return β β
β β PUSH EAX ; Push to stack β β
β β POP EBX ; Pop from stack β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
5.2 ARM¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ARM β
β β
β History: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1985: ARM1 (32-bit RISC) β β
β β 2011: ARMv8 (64-bit, AArch64) β β
β β Today: Smartphones, tablets, IoT, servers (Apple M1/M2, β β
β β AWS Graviton) β β
β β Characteristic: Low power, license-based business β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Registers (AArch64): β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β General-purpose registers (31): β β
β β X0-X30 (64-bit), W0-W30 (lower 32 bits) β β
β β β β
β β Special registers: β β
β β SP (Stack Pointer), PC (Program Counter) β β
β β X30/LR (Link Register) β β
β β XZR/WZR (Zero Register) β β
β β β β
β β System registers: β β
β β NZCV (condition flags), FPCR, FPSR β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Representative instructions (AArch64): β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ; Data movement β β
β β MOV X0, X1 ; X0 = X1 β β
β β LDR X0, [X1] ; X0 = Memory[X1] β β
β β STR X0, [X1, #8] ; Memory[X1+8] = X0 β β
β β β β
β β ; Arithmetic β β
β β ADD X0, X1, X2 ; X0 = X1 + X2 β β
β β SUB X0, X1, #10 ; X0 = X1 - 10 β β
β β MUL X0, X1, X2 ; X0 = X1 * X2 β β
β β β β
β β ; Compare and branch β β
β β CMP X0, X1 ; X0 - X1 (set flags) β β
β β B.EQ label ; Branch if Equal β β
β β B.NE label ; Branch if Not Equal β β
β β B label ; Unconditional branch β β
β β β β
β β ; Function calls β β
β β BL function ; Branch with Link (return addr to LR) β β
β β RET ; Return (jump to LR) β β
β β β β
β β ; Conditional execution (ARM32) β β
β β ADDEQ R0, R1, R2 ; ADD only if Equal β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Features: β
β - Conditional execution (condition suffix on most instructions) β
β - Load/Store architecture β
β - Thumb instruction set (16-bit, improved code density) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
5.3 MIPS¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MIPS β
β β
β History and Features: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1985: MIPS R2000 (pure RISC design) β β
β β Feature: Academically important (standard for CS education) β β
β β Uses: Embedded systems, network equipment, game consoles β β
β β (PS1/2) β β
β β 2021: MIPS Technologies transitioned to RISC-V β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Registers (32): β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β $zero (R0) : Always 0 β β
β β $at (R1) : Assembler temporary β β
β β $v0-v1 (R2-3): Function return values β β
β β $a0-a3 (R4-7): Function arguments β β
β β $t0-t7 (R8-15): Temporaries (caller-saved) β β
β β $s0-s7 (R16-23): Saved (callee-saved) β β
β β $t8-t9 (R24-25): Additional temporaries β β
β β $gp (R28) : Global pointer β β
β β $sp (R29) : Stack pointer β β
β β $fp (R30) : Frame pointer β β
β β $ra (R31) : Return address β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Representative instructions: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ; R-type (register) β β
β β add $t0, $t1, $t2 ; $t0 = $t1 + $t2 β β
β β sub $t0, $t1, $t2 ; $t0 = $t1 - $t2 β β
β β and $t0, $t1, $t2 ; $t0 = $t1 & $t2 β β
β β sll $t0, $t1, 2 ; $t0 = $t1 << 2 β β
β β β β
β β ; I-type (immediate) β β
β β addi $t0, $t1, 100 ; $t0 = $t1 + 100 β β
β β lw $t0, 4($sp) ; $t0 = Memory[$sp + 4] β β
β β sw $t0, 0($sp) ; Memory[$sp] = $t0 β β
β β beq $t0, $t1, label ; if ($t0 == $t1) goto label β β
β β bne $t0, $t1, label ; if ($t0 != $t1) goto label β β
β β β β
β β ; J-type (jump) β β
β β j target ; goto target β β
β β jal function ; $ra = PC+4; goto function β β
β β jr $ra ; goto $ra (function return) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
5.4 RISC-V¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RISC-V β
β β
β History and Features: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 2010: Development started at UC Berkeley β β
β β Features: β β
β β - Open-source ISA (royalty-free) β β
β β - Modular design (base + extensions) β β
β β - Rapidly adopted by academia and industry β β
β β - 32/64/128-bit support β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Modular Structure: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β RV32I / RV64I: Base integer instructions (required) β β
β β M: Multiplication/Division extension β β
β β A: Atomic operations extension β β
β β F: Single-precision floating-point β β
β β D: Double-precision floating-point β β
β β C: Compressed instructions (16-bit) β β
β β β β
β β Example: RV64IMAFDC = 64-bit + all standard extensions β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Registers (32): β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β x0 (zero): Always 0 β β
β β x1 (ra) : Return address β β
β β x2 (sp) : Stack pointer β β
β β x3 (gp) : Global pointer β β
β β x4 (tp) : Thread pointer β β
β β x5-x7 : Temporaries β β
β β x8 (s0/fp): Saved/Frame pointer β β
β β x9 : Saved β β
β β x10-x17 : Function arguments/return β β
β β x18-x27 : Saved β β
β β x28-x31 : Temporaries β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Representative instructions: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ; R-type β β
β β add x1, x2, x3 ; x1 = x2 + x3 β β
β β sub x1, x2, x3 ; x1 = x2 - x3 β β
β β β β
β β ; I-type β β
β β addi x1, x2, 100 ; x1 = x2 + 100 β β
β β lw x1, 0(x2) ; x1 = Memory[x2] β β
β β β β
β β ; S-type (Store) β β
β β sw x1, 0(x2) ; Memory[x2] = x1 β β
β β β β
β β ; B-type (Branch) β β
β β beq x1, x2, label ; if (x1 == x2) goto label β β
β β bne x1, x2, label ; if (x1 != x2) goto label β β
β β β β
β β ; J-type β β
β β jal x1, target ; x1 = PC+4; goto target β β
β β jalr x1, x2, 0 ; x1 = PC+4; goto x2 β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
5.5 ISA Comparison Summary¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ISA Comparison Summary β
ββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββββ€
β Feature β x86-64 β ARM β MIPS β RISC-V β
ββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββ€
β Type β CISC β RISC β RISC β RISC β
ββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββ€
β Instr. lengthβ 1-15 bytes β 4 bytes β 4 bytes β 4 bytes β
β β (variable) β (fixed) β (fixed) β (2/4 bytes) β
ββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββ€
β GP Registers β 16 β 31 β 32 β 32 β
ββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββ€
β Endianness β Little β Bi-endian β Bi-endian β Little β
ββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββ€
β Primary use β PC, Server β Mobile, IoT β Embedded β General, β
β β β Server (now) β (legacy) β Education, IoT β
ββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββ€
β License β Intel/AMD β ARM Holdings β MIPS Tech. β Open-source β
β β proprietary β license β license β (free) β
ββββββββββββββββ΄βββββββββββββββ΄βββββββββββββββ΄βββββββββββββββ΄βββββββββββββββββ
6. Practice Problems¶
Basic Problems¶
-
List 5 things that an ISA defines.
-
Explain 3 major differences between CISC and RISC.
-
Explain the three MIPS instruction formats (R, I, J).
Instruction Encoding Problems¶
-
Encode the following MIPS instruction as a 32-bit binary number:
ADD $t2, $s0, $s1(Reference: $t2=10, $s0=16, $s1=17, ADD funct=0x20) -
Encode the following MIPS instruction as a 32-bit binary number:
LW $t0, 200($s2)(Reference: $t0=8, $s2=18, LW opcode=0x23)
Addressing Mode Problems¶
- Identify the addressing mode for each instruction:
- (a)
ADDI $t0, $t1, 100 - (b)
LW $t0, 0($s0) - (c)
ADD $t0, $t1, $t2 - (d)
J 0x00400000 -
(e)
BEQ $t0, $t1, label -
Explain how the effective address is calculated for x86
MOV EAX, [EBX + ECX*4 + 100].
Advanced Problems¶
-
Explain why modern x86 processors internally use RISC-style micro-ops.
-
Describe 3 advantages of RISC-V as an open-source ISA.
-
Convert the following C code to MIPS assembly:
c int a = 10; int b = 20; int c = a + b;
Answers
1. What an ISA defines: - Instructions - Registers - Data Types - Addressing Modes - Memory Model 2. CISC vs RISC: - Instruction complexity: CISC is complex, RISC is simple - Instruction length: CISC is variable, RISC is fixed - Memory access: CISC allows all instructions, RISC uses Load/Store only 3. MIPS instruction formats: - R-type: Register-to-register operations (ADD, SUB, etc.) - I-type: Immediate value operations (ADDI, LW, SW, BEQ, etc.) - J-type: Jump instructions (J, JAL) 4. ADD $t2, $s0, $s1 encoding: ``` opcode(6) | rs(5) | rt(5) | rd(5) | shamt(5) | funct(6) 000000 | 10000 | 10001 | 01010 | 00000 | 100000 = 0x02115020 ``` 5. LW $t0, 200($s2) encoding: ``` opcode(6) | rs(5) | rt(5) | immediate(16) 100011 | 10010 | 01000 | 0000000011001000 = 0x8E4800C8 ``` 6. Addressing modes: - (a) Immediate Addressing - (b) Base/Displacement Addressing - (c) Register Addressing - (d) Direct Addressing - (e) PC-Relative Addressing 7. x86 effective address calculation: Effective Address = Base(EBX) + Index(ECX) Γ Scale(4) + Displacement(100) 8. Reasons for using micro-ops: - Pipeline optimization (simple RISC-style instructions) - Easier superscalar execution - Easier out-of-order execution implementation - Maintain backward compatibility while optimizing internally 9. RISC-V open-source advantages: - Royalty-free (cost savings) - Customizable (optimized for specific purposes) - Useful for academic research and education - No vendor lock-in 10. C code to MIPS: ```mips # a = 10 li $s0, 10 # $s0 = 10 # b = 20 li $s1, 20 # $s1 = 20 # c = a + b add $s2, $s0, $s1 # $s2 = $s0 + $s1 ```Next Steps¶
- 10_Assembly_Language_Basics.md - x86/ARM basics, fundamental instructions
References¶
- Computer Organization and Design: MIPS Edition (Patterson & Hennessy)
- Computer Organization and Design: RISC-V Edition (Patterson & Hennessy)
- MIPS Instruction Reference
- ARM Architecture Reference Manual
- RISC-V Specifications
- Intel x86 Developer Manuals