nop
pseudolyszt.net cubre nop y otras instrucciones RISC-V con más detalle.
Descripción
nop no hace nada. El nombre es la abreviatura de "no operation" (sin operación). Cuando el procesador llega a un nop, no cambia ningún registro, no se toca la memoria y la ejecución continúa con la siguiente instrucción. Ocupa una posición en el programa y transcurre un ciclo de tiempo.
nop es una pseudoinstrucción para la línea de abajo.
addi zero, zero, 0
RISC-V incluye un registro llamado zero que siempre contiene 0. Una lectura devuelve 0 y una escritura se descarta. Ese addi suma 0 y 0 y descarta el resultado, así que la instrucción se completa y nada cambia. RISC-V no necesita un nop dedicado porque el registro zero proporciona uno.
Los procesadores reales usan nops como relleno, para que una instrucción posterior comience en un límite de memoria que el hardware maneja más rápido, y como marcadores de posición que las herramientas sobrescriben después con instrucciones reales. Los compiladores los insertan de forma habitual, por lo que el código desensamblado los contiene aunque ningún programador los haya escrito.
El manual de RISC-V afirma que nop no cambia ningún estado visible arquitectónicamente, es decir, nada que un programa pueda observar, aparte de avanzar el pc e incrementar los contadores de rendimiento. Da dos usos: alinear segmentos de código a límites de dirección que convienen al hardware, y dejar espacio para cambios posteriores en el código. El manual explica que la codificación usa addi porque esa instrucción cuesta la menor cantidad de recursos en la mayoría de los sistemas, ya que solo lee un registro.
En este simulador nop sirve como espaciador o marcador durante los experimentos. Pasar por uno avanza pc en 4 y no cambia ningún registro ni ubicación de memoria.
Se expande a
addi zero, zero, 0
El ensamblador reemplaza esta pseudoinstrucción con la instrucción o instrucciones reales enumeradas arriba.
Ejemplo
li t0, 1 nop # advances one instruction, changes nothing addi t0, t0, 1 # t0 = 2
