¿Qué son las instrucciones de cambio y rotación?

Instrucciones de turno

Las instrucciones de desplazamiento mueven los bits de un registro hacia la izquierda o hacia la derecha. Esto puede resultar útil para diversos fines, como por ejemplo:

* Multiplicar o dividir por potencias de 2

* Extraer o insertar bits específicos de un registro

* Invertir el orden de los bits en un registro.

Hay dos tipos principales de instrucciones de desplazamiento:desplazamientos lógicos y desplazamientos aritméticos.

* Desplazamientos lógicos desplaza todos los bits de un registro, incluido el bit de signo. Esto significa que el valor del registro puede cambiar después de un cambio lógico.

* Desplazamientos aritméticos solo cambia los bits de datos en un registro, no el bit de signo. Esto significa que el valor del registro no cambiará después de un desplazamiento aritmético.

La siguiente tabla muestra las diferentes instrucciones de cambio disponibles en la mayoría de los procesadores:

| Instrucción | Descripción |

|---|---|

| `SHL` | Desplazamiento a la izquierda lógico |

| `SHR` | Desplazamiento a la derecha lógico |

| `SAR` | Desplazamiento aritmético a la derecha |

| `ROL` | Girar a la izquierda |

| `ROR` | Girar a la derecha |

Instrucciones de rotación

Las instrucciones de rotación son similares a las instrucciones de desplazamiento, excepto que rotan los bits de un registro en lugar de desplazarlos. Esto significa que los bits de un extremo del registro se moverán al otro extremo.

Las instrucciones de rotación pueden resultar útiles para diversos fines, como por ejemplo:

* Generando buffers circulares

* Intercambiar el contenido de dos registros.

* Implementación de ciertos algoritmos criptográficos

La siguiente tabla muestra las diferentes instrucciones de rotación disponibles en la mayoría de los procesadores:

| Instrucción | Descripción |

|---|---|

| `ROL` | Girar a la izquierda |

| `ROR` | Girar a la derecha |

Ejemplos

A continuación se muestran algunos ejemplos de cómo se pueden utilizar las instrucciones de desplazamiento y rotación:

* Para multiplicar un número por 2, puede utilizar una instrucción de desplazamiento a la izquierda. Por ejemplo, el siguiente código multiplica el valor del registro "EAX" por 2:

```

shl eax, 1

```

* Para dividir un número entre 2, puedes usar una instrucción de desplazamiento a la derecha. Por ejemplo, el siguiente código divide el valor del registro "EAX" por 2:

```

shr eax, 1

```

* Para extraer el byte menos significativo de un registro, puede utilizar una instrucción de desplazamiento a la derecha. Por ejemplo, el siguiente código extrae el byte menos significativo del registro "EAX" y lo almacena en el registro "AL":

```

shr eax, 8

mov al, eax

```

* Para insertar un byte específico en un registro, puede utilizar una instrucción de desplazamiento a la izquierda. Por ejemplo, el siguiente código inserta el valor 0x12 en el byte menos significativo del registro "EAX":

```

movimiento, 0x12

shl eax, 8

```

* Para invertir el orden de los bits en un registro, puede utilizar una instrucción de rotación hacia la izquierda. Por ejemplo, el siguiente código invierte el orden de los bits en el registro "EAX":

```

rol eax, 8

```