# Day 1: Variables, Memory, and the Stack ## 📝 Concepts Covered Today we explored how high-level C variables are translated into low-level machine instructions and memory operations. ### 1. The Stack and RBP Local variables in C are stored on the **Stack**. The CPU uses the `RBP` (Base Pointer) register as a reference point to find these variables. - `int a = 123;` -> `mov DWORD PTR [rbp-4], 0x7b` ### 2. Register Basics (x64) Registers are small, fast storage locations inside the CPU. - `RAX`, `RBX`, `RCX`, `RDX`: General purpose 64-bit registers. - `EAX`, `EBX`, `ECX`, `EDX`: The lower 32-bit halves of the above (used for `int` in C). ### 3. Data Sizes The assembly instruction specifies how much data to move: - `BYTE PTR`: 1 byte (`char`) - `WORD PTR`: 2 bytes (`short`) - `DWORD PTR`: 4 bytes (`int`) - `QWORD PTR`: 8 bytes (`long` or pointers) ### 4. Arithmetic Pattern CPUs perform arithmetic using a **Load-Modify-Store** cycle: 1. **Load** memory value into a register. 2. **Add/Sub** the register value. 3. **Store** the register result back into memory. ## 🛠 Exercises Completed - `exo_1.c`: Basic assignment and hex identification. - `exo_2.c`: Arithmetic deconstruction (The `add` instruction). - `exo_3.c`: Data type sizes and memory offsets.