Skip to content

Commit efc5961

Browse files
committed
docs(notes): add 2025-03-23-instruction-system-en.md
1 parent 9bcd42c commit efc5961

File tree

1 file changed

+173
-0
lines changed

1 file changed

+173
-0
lines changed
+173
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
---
2+
title: Instruction System – A Comprehensive Guide
3+
lang: en
4+
layout: post
5+
audio: false
6+
translated: false
7+
generated: true
8+
---
9+
10+
## **1. Introduction to the Instruction System**
11+
An **Instruction Set Architecture (ISA)** defines the interface between software and hardware. It specifies the instructions a processor can execute, their formats, and how they interact with memory and registers. Understanding ISA is crucial for both programming (especially in assembly language) and designing computer hardware.
12+
13+
---
14+
15+
## **2. Instruction Set Architecture (ISA)**
16+
### **2.1 What is ISA?**
17+
The **Instruction Set Architecture (ISA)** is the part of the processor's design that handles execution of instructions, including:
18+
- **Data types** (e.g., integers, floating points, characters)
19+
- **Registers** (temporary storage locations inside the CPU)
20+
- **Memory access methods** (how data is retrieved and stored)
21+
- **Instruction types** (arithmetic, logic, control, I/O)
22+
23+
### **2.2 Types of ISAs**
24+
1. **CISC (Complex Instruction Set Computing)**
25+
- A single instruction can perform multiple operations.
26+
- Example: x86 architecture (Intel, AMD).
27+
- **Advantages:** Fewer instructions per program, easier to program in assembly.
28+
- **Disadvantages:** Slower instruction execution due to complexity.
29+
30+
2. **RISC (Reduced Instruction Set Computing)**
31+
- Each instruction performs a simple operation and executes in a single cycle.
32+
- Example: ARM, MIPS, RISC-V.
33+
- **Advantages:** Faster execution, simpler hardware.
34+
- **Disadvantages:** More instructions needed for complex tasks.
35+
36+
---
37+
38+
## **3. Instruction Formats**
39+
### **3.1 What is an Instruction Format?**
40+
An **instruction format** defines how an instruction is structured in memory. It consists of the following fields:
41+
1. **Opcode (Operation Code):** Specifies the operation (e.g., ADD, LOAD, STORE).
42+
2. **Operands:** Specifies the data (registers, memory addresses).
43+
3. **Addressing Mode:** Specifies how to access operands.
44+
45+
### **3.2 Common Instruction Formats**
46+
1. **Fixed Format:**
47+
- All instructions are the same size (e.g., 32-bit in MIPS).
48+
- Easy to decode but may waste space.
49+
50+
2. **Variable Format:**
51+
- Instructions vary in size (e.g., x86, ARM).
52+
- Efficient memory use but harder to decode.
53+
54+
3. **Hybrid Format:**
55+
- Combination of fixed and variable formats (e.g., ARM Thumb instructions).
56+
57+
### **3.3 Example Instruction Format (MIPS Architecture)**
58+
In **MIPS**, an instruction is 32 bits long and has three main formats:
59+
60+
1. **R-Type (Register-Type)**
61+
```
62+
| Opcode (6) | Rs (5) | Rt (5) | Rd (5) | Shamt (5) | Funct (6) |
63+
```
64+
- Example: `add $t1, $t2, $t3`
65+
- Meaning: `$t1 = $t2 + $t3`
66+
67+
2. **I-Type (Immediate-Type)**
68+
```
69+
| Opcode (6) | Rs (5) | Rt (5) | Immediate (16) |
70+
```
71+
- Example: `addi $t1, $t2, 10`
72+
- Meaning: `$t1 = $t2 + 10`
73+
74+
3. **J-Type (Jump-Type)**
75+
```
76+
| Opcode (6) | Address (26) |
77+
```
78+
- Example: `j 10000` (Jump to memory address 10000)
79+
80+
---
81+
82+
## **4. Addressing Modes**
83+
**Addressing modes** determine how operands are accessed in an instruction.
84+
85+
### **4.1 Common Addressing Modes**
86+
1. **Immediate Addressing:** The operand is directly specified in the instruction.
87+
- Example: `addi $t1, $t2, 10` (10 is an immediate value)
88+
89+
2. **Register Addressing:** The operand is stored in a register.
90+
- Example: `add $t1, $t2, $t3` (all operands are in registers)
91+
92+
3. **Direct Addressing:** The instruction contains the memory address of the operand.
93+
- Example: `load $t1, 1000` (load value from memory address 1000)
94+
95+
4. **Indirect Addressing:** The address of the operand is stored in a register.
96+
- Example: `load $t1, ($t2)` (fetch value from the address stored in `$t2`)
97+
98+
5. **Indexed Addressing:** The address is calculated by adding an offset to a register.
99+
- Example: `load $t1, 10($t2)` (fetch value from `$t2 + 10`)
100+
101+
6. **Base+Offset Addressing:** A base register and offset determine the address.
102+
- Example: `lw $t1, 4($sp)` (fetch from `$sp + 4`)
103+
104+
### **4.2 Importance of Addressing Modes**
105+
- **Efficient Memory Usage:** Different addressing modes optimize memory access.
106+
- **Performance Optimization:** Some modes are faster than others.
107+
- **Flexibility:** Supports different programming styles (e.g., pointer arithmetic).
108+
109+
---
110+
111+
## **5. Assembly Language Programming**
112+
### **5.1 What is Assembly Language?**
113+
**Assembly language** is a low-level programming language that directly corresponds to machine code.
114+
115+
### **5.2 Structure of an Assembly Program**
116+
A basic assembly program consists of:
117+
- **Directives:** Instructions to the assembler (e.g., `.data`, `.text`).
118+
- **Instructions:** Actual operations executed by the CPU.
119+
120+
### **5.3 Basic MIPS Assembly Program**
121+
```assembly
122+
.data
123+
msg: .asciiz "Hello, World!"
124+
125+
.text
126+
.globl main
127+
main:
128+
li $v0, 4 # Load syscall code for print_string
129+
la $a0, msg # Load address of string
130+
syscall # Print string
131+
132+
li $v0, 10 # Exit syscall
133+
syscall
134+
```
135+
- `.data` section stores variables and strings.
136+
- `.text` section contains executable instructions.
137+
- `syscall` is used to interact with the operating system.
138+
139+
### **5.4 Key Assembly Instructions**
140+
| Instruction | Meaning | Example |
141+
|------------|---------|---------|
142+
| `add` | Add two registers | `add $t1, $t2, $t3` |
143+
| `sub` | Subtract two registers | `sub $t1, $t2, $t3` |
144+
| `lw` | Load word from memory | `lw $t1, 0($t2)` |
145+
| `sw` | Store word to memory | `sw $t1, 0($t2)` |
146+
| `beq` | Branch if equal | `beq $t1, $t2, label` |
147+
| `j` | Jump to address | `j label` |
148+
149+
### **5.5 Assembly vs High-Level Languages**
150+
| Feature | Assembly | High-Level Language (C, Python) |
151+
|---------|---------|------------------------------|
152+
| **Speed** | Faster | Slower (more overhead) |
153+
| **Control** | Full control over hardware | Abstracted from hardware |
154+
| **Difficulty** | Complex syntax | Easier syntax |
155+
| **Portability** | CPU-specific | Works across different CPUs |
156+
157+
---
158+
159+
## **6. Summary**
160+
### **Key Takeaways**
161+
- **ISA defines how software interacts with hardware.**
162+
- **Instruction formats determine how an instruction is structured.**
163+
- **Addressing modes specify how operands are accessed.**
164+
- **Assembly language directly controls the CPU and memory.**
165+
166+
### **Practice Exercises**
167+
1. Convert the MIPS instruction `addi $t1, $t2, 5` into binary format.
168+
2. Write an assembly program to add two numbers stored in registers.
169+
3. Explain the difference between direct and indirect addressing with examples.
170+
171+
---
172+
173+
Understanding the **instruction system** is essential for learning **computer organization and architecture**, especially if you aim to work with **low-level programming, embedded systems, or processor design**. Let me know if you need more examples or explanations! 🚀

0 commit comments

Comments
 (0)