addressing modes define how an instruction refers to the operand (the data it will work on). Here’s the breakdown: ![hq720 (16)](https://hackmd.io/_uploads/rk_3W9S5eg.jpg) **1. Immediate Addressing Mode** * Definition: The operand (data) is given directly in the instruction itself. * Interpretation: “Use this constant value.” * Example ([8051](https://www.ampheo.com/search/8051)/[8086](https://www.ampheo.com/search/8086) style): `MOV A, #25h ; load the value 25h directly into register A` * Pros: Fast, no memory access. * Cons: Value is fixed at compile time, not flexible. **2. Direct Addressing Mode** * Definition: The instruction specifies the memory address where the operand is stored. * Interpretation: “Go to this memory location and get the value.” * Example (8051): `MOV A, 30h ; load A with contents of memory address 30h` * Pros: Simple, explicit access to known memory locations. * Cons: Only works within the direct address range (in 8051, the lower 128 bytes of RAM or SFRs). **3. Indirect Addressing Mode** * Definition: The instruction specifies a register that contains the address of the operand. * Interpretation: “Look inside this register to find the memory address, then go there for the value.” * Example (8051, using R0 as pointer): `MOV A, @R0 ; load A with contents of the memory location pointed to by R0` If R0 = 40h, then A ← [40h]. * Pros: Flexible, allows dynamic access to arrays, tables, buffers. * Cons: One level slower (must first read the register to get the address, then fetch data). **Quick Comparison Table** ![企业微信截图_20250903174329](https://hackmd.io/_uploads/Sy7k0tS9eg.png) **Summary:** * Immediate = the data itself is in the instruction. * Direct = the instruction tells you the exact memory address. * Indirect = a register holds the memory address where the data lives.