addi
lyszt.net cubre addi y otras instrucciones RISC-V con más detalle.
Formato de codificación
Descripción
addi suma una constante a un registro. El nombre significa add immediate (sumar inmediato). Un inmediato es un valor constante escrito en la propia instrucción en lugar de leerse de un registro. Úsalo cuando uno de los números sea fijo al escribir el programa, como sumar 1 a un contador.
La forma de addi se muestra a continuación. Lee el valor del registro fuente rs1, suma la constante imm y escribe el resultado en el registro destino rd.
addi rd, rs1, imm
La siguiente línea lee t0, suma uno y escribe el resultado de vuelta, de modo que t0 = t0 + 1.
addi t0, t0, 1
La constante ocupa 12 bits y tiene signo, lo que da un rango de -2048 a 2047. El ensamblador rechaza valores mayores. Para una constante más grande, cárgala primero en un registro con li. Una constante negativa hace que addi también reste, por lo que RISC-V no tiene una instrucción separada de resta inmediata. La siguiente línea cuenta hacia atrás.
addi t0, t0, -1
El manual de RISC-V llama a la constante un inmediato de 12 bits con extensión de signo. Indica que el desbordamiento aritmético se ignora, por lo que el resultado conserva solo sus bits bajos XLEN, donde XLEN es el ancho del registro en bits, 32 aquí. Cuando se conoce el signo de la constante, una bifurcación después de la suma comprueba el desbordamiento con signo. Las dos líneas siguientes manejan el caso común de sumar una constante positiva.
addi t0, t1, +imm blt t0, t1, overflow
Los programas usan addi para contadores, para mover un puntero al siguiente elemento y para reservar espacio en la pila. El ejemplo suma 1 para avanzar un contador y suma -16 para reservar 16 bytes de memoria de trabajo, que es como suele comenzar una función que necesita espacio de trabajo.
Ejemplo
addi t0, t0, 1 # t0++ addi sp, sp, -16 # reserve 16 bytes of stack
Referencias
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.1, Integer Register-Immediate Instructions, pages 28 to 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
