Se denomina instrucción en informática al conjunto de datos insertados en una secuencia estructurada o específica que el procesador interpreta y ejecuta.
TIPOS DE INSTRUCCIONES
- Transferencias de datos: Permite transferir datos entre la memoria y el registro o viceversa. Copian datos de un origen a un destino, sin modificar el origen y normalmente sin afectar a los flags o indicadores de condición. Pueden transferir palabras, fracciones de palabras (bytes, media palabra) o bloques completos de n bytes o palabras.
- move: copia el contenido de un registro(o memoria) a otro.
- store: copia el contenido de un registro a memoria.
- load: copia el contenido de una posición de memoria a un registro.
- move block: copia un bloque de datos de una posición de memoria a otra.
- move multiple: copia del origen en varias posiciones de memoria.
- exchange: intercambia el contenido de dos operandos.
- clear: pone a 0 el destino. (todos los bits)
- set: pone a 1 el destino. (todos los bits)
- push: introduce un dato en la cabecera de la pila. (indicada por el SP)
- pop: saca un dato de la cabecera de la pila. (indicada por el SP)
Estas operaciones pueden ser:
-> registro - registro
-> registro - memoria
-> memoria - registro
-> memoria - memoria
Nemotécnicos más frecuentes:
- Instrucciones aritméticas: Son efectuadas por la ALU y suelen cambiar los flags o indicadores de condición, son todas aquellas instrucciones que permiten realizar operaciones aritméticas como la suma, resta, multiplicación, división, incremento y decremento
- add: Suma.
- add with carry: Suma con acarreo.
- subtract: Resta.
- subtract with borrow: Resta teniendo en cuenta el adeudo anterior.
- increment: incrementa en 1 un valor.
- decrement: decrementa en 1 un valor.
- multiply: multiplica.
- divide: divide.
- extend: aumenta el operando de tamaño.
- negate: cambia de signo.
- absolute: valor absoluto.
Nemotécnicos más frecuentes:
- Instrucciones de comparación: Suelen preceder a una instrucción de bifurcación condicional y modifican los flags. No hay que pensar que las instrucciones de salto condicional dependen de este repertorio, ya que lo único que hace el salto condicional es consultar los flags y salta si precede, pero no depende de ninguna instrucción de comparación. (de hecho cualquier operación aritmética realizada anteriormente a un salto condicional puede provocar que este "salte").
- compare: Resta los dos operandos pero no almacena el resultado, solo modifica los flags.
- test: compara un cierto valor especificado con el 0.
- Instrucciones lógicas: Realizan operaciones booleanas "bit a bit" entre dos operandos. Como las aritméticas también modifican los flags.
- and: el "y" lógico.
- or: el "o inclusivo" lógico.
- xor: el "o exclusivo" lógico.
- not: la negación lógica. (complemento a 1, no confundir con el cambio de signo "negate" que es el complemento a 2)
Nemotécnicos más frecuentes:
Nemotécnicos más frecuentes:
- Instrucciones de Desplazamiento: Pueden ser aritmético o lógico y pueden incluir o no rotaciones. Pueden ser de izquierda a derecha.
- shift: desplazamiento aritmético o lógico.
- rotate: rotación con o sin acarreo.
Nemotécnicos más frecuentes:
- Instrucciones de bits: Comprueban un bit del operando y su valor lo reflejan en el indicador de cero. Pueden poner un bit a 0 o complementarlo.
- bit test: comprueba un bit.
- bit clear: comprueba un bit y lo pone a 0.
- bit set: comprueba un bit y lo pone a 1.
Nemotécnicos más frecuentes:
- Instrucciones de control: Permiten modificar la secuencia normal de ejecución de un programa, puede hacerse por salto condicional relativo o absoluto.
- saltos: Pueden ser condicionales o incondicionales, se suelen especificar como jump o brantch, y en el caso de los condicionales se suele llamar jcond o bcond donde cond es una o más letras que indican la condición que ha de cumplirse para que el salto se produzca.
- Llamadas a subrutinas: Invoca la ejecución de funciones anteriormente definidas.
- Gestión de interrupciones: Se usan para llamar a las rutinas de servicio de interrupción y esto se puede hacer por hardware o bien por software. Necesita una instrucción similar a return para retornar al contexto anterior pero restableciendo el estado de la máquina, para no afectar a la aplicación a la cual se interrumpió (iret).
Se clasifican en cuatro grupos:
-> salto incondicional
-> salto condicional
-> Llamada a subrutinas
-> Gestión de las interrupciones
-> Incondicional: salta sin comprobar ninguna condición.
Nemotécnicos más frecuentes: jump o brantch
-> Condicional: salta si la condición se cumple.
Nemotécnicos más frecuentes: jcond o bcond
Nemotécnicos más frecuentes: call (llamada) y ret (retorno)
- Instrucciones de control y misceláneas:Nemotécnicos más frecuentes:
- halt: Detiene la ejecución del programa hasta que una interrupción arranca otro programa.
- wait: Sirve para detener la ejecución de un programa hasta que sucede un determinado evento que no es una interrupción (otra condición externa al primer programa).
- nop: No realiza ninguna operación, sirve para rellenar huecos en un programa o temporizar esperas.
- enable: Habilita las interrupciones.
- disable: Des habilita las interrupciones.
- test and set: Se utiliza para la implementación de la exclusión mutua, esto es, que un procesador no pueda acceder a un determinado recurso que está siendo usado por otro procesador en ese mismo momento.
Se usan como semáforos, esto es, se declara una variable entera que tendrá el valor 0 si el recurso esta libre y 1 si está siendo utilizado, de manera que si un procesador comprueba y el semáforo está en 1 tendrá que esperar hasta que este cambie a 0. (1 = s.rojo y 0 = s.verde)
0 comentarios:
Publicar un comentario