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

  1. ISA Concepts
  2. CISC vs RISC Comparison
  3. Instruction Formats
  4. Addressing Modes
  5. Major ISAs
  6. 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

  1. List 5 things that an ISA defines.

  2. Explain 3 major differences between CISC and RISC.

  3. Explain the three MIPS instruction formats (R, I, J).

Instruction Encoding Problems

  1. 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)

  2. 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

  1. Identify the addressing mode for each instruction:
  2. (a) ADDI $t0, $t1, 100
  3. (b) LW $t0, 0($s0)
  4. (c) ADD $t0, $t1, $t2
  5. (d) J 0x00400000
  6. (e) BEQ $t0, $t1, label

  7. Explain how the effective address is calculated for x86 MOV EAX, [EBX + ECX*4 + 100].

Advanced Problems

  1. Explain why modern x86 processors internally use RISC-style micro-ops.

  2. Describe 3 advantages of RISC-V as an open-source ISA.

  3. 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


References

to navigate between lessons