Qué significa codificar una instrucción
El texto addi a0, zero, 5 es para personas. El procesador solo ve bits, así que la ISA define una plantilla: los 7 bits bajos (opcode) indican el grupo y, con él, el formato; el resto de campos dicen qué registros intervienen y qué constante (inmediato) usar. RV32I tiene seis formatos (R, I, S, B, U y J) y todos mantienen rs1, rs2 y rd en las mismas posiciones.
Ejemplo resuelto: 0x00500513
- Hexadecimal → binario. Cada dígito hex son 4 bits: 0x00500513 = 0000 0000 0101 0000 0000 0101 0001 0011.
- opcode = bits 6–0. 0010011: el grupo OP-IMM (operación con inmediato). Esto fija el formato: I.
- rd = bits 11–7. 01010 = 10 → x10, que en la ABI se llama a0. Es el registro destino.
- funct3 = bits 14–12. 000: dentro de OP-IMM, 000 es addi.
- rs1 = bits 19–15. 00000 = x0 (zero), el registro que siempre vale 0.
- imm = bits 31–20. 000000000101 = 5. El bit 31 es 0, así que el valor es positivo.
- Instrucción. addi a0, zero, 5: a0 = 0 + 5. Es la codificación de la pseudoinstrucción li a0, 5.
La misma descomposición, calculada por el decodificador del sitio:
| Campo | Bits | Binario | Significado |
|---|---|---|---|
| imm[11:0] | [31:20] | 000000000101 | trozo del inmediato |
| rs1 | [19:15] | 00000 | registro x0 (zero) |
| funct3 | [14:12] | 000 | selecciona la operación dentro del grupo |
| rd | [11:7] | 01010 | registro x10 (a0) |
| opcode | [6:0] | 0010011 | grupo OP-IMM |
| imm | 5 (0x5) | inmediato reconstruido (con signo) | |
| Instrucción | addi a0, zero, 5 | ||
Fíjate en el orden de trabajo: primero el opcode, porque hasta saber el formato no sabes cómo leer los bits 31–7. En formato I esos bits son un inmediato de 12 bits; en formato R serían funct7 y rs2.