Transferencia de datos:
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.
Estas operaciones pueden ser:
-> registro - registro
-> registro - memoria
-> memoria - registro
-> memoria – memoria
Nemotécnicos más frecuentes:
Ø 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 destinto. (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)
Ø Instrucciones aritméticas: Son efectuadas por la ALU y suelen cambiar los flags o indicadores de condición.
Nemotécnicos más frecuentes:
ü add: Suma.
ü add with carry: Suma con acarreo.
ü subtrack: Resta.
ü subtrack 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.
ü
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").
Nemotécnicos más frecuentes:
§ 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.
Nemotécnicos más frecuentes:
§ 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)
Instrucciones de Desplazamiento:
Pueden ser aritmético o lógico y pueden incluir o no rotaciones. Pueden ser de izquierda a derecha.
Nemotécnicos más frecuentes:
v shift: desplazamiento aritmético o lógico.
v rotate: rotación con o sin acarreo.
v 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.
Nemotécnicos más frecuentes:
v bit test: comprueba un bit.
v bit clear: comprueba un bit y lo pone a 0.
v bit set: comprueba un bit y lo pone a 1.
v Instrucciones de control: Permiten modificar la secuencia normal de ejecución de un programa, puede hacerse por salto condicional relativo o absoluto.
Se clasifican en cuatro grupos:
-> salto incondicional
-> salto condicional
-> Llamada a subrutinas
-> Gestión de las interrupciones
- 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.
-> 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
- Llamadas a subrutinas: Invoca la ejecución de funciones anteriormente definidas.
Nemotécnicos más frecuentes: call (llamada) y ret (retorno)
- 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).
- Instrucciones de E/S: Son instrucciones de transferencia salvo que el origen/destino de dicho flujo es un puerto de un dispositivo de E/S. Estas instrucciones pueden darse mediante dos alternativas:
->E/S "mapeada" en memoria: Los periféricos tienen direcciones asignadas de la MP por lo que no se necesitan instrucciones especiales y las operaciones se realizan con las ya vistas, como son: load, store y move.
->E/S independiente: Necesitan unas instrucciones especiales para indicarle al procesador que nos estamos refiriendo al mapa de direcciones de E/S, ya que este mapa y el mapa de memoria son disjuntos.
Nemotécnicos más frecuentes:
- input o read: Premite leer información de un puerto y trasladarla a memoria principal.
- output o write: Permite escribir información en un puerto de un dispositivo.
- test i/o: Lee información de control de un periférico.
- control i/o: Envía información de control hacia un periférico.
Instrucciones de control y misceláneas:
Nemoténicos más frecuentes:
o halt: Detiene la ejecución del programa hasta que una interrupción arranca otro programa.
o wait: Sirve para deterner 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).
o nop: No realiza ninguna operación, sirve para rellenar huecos en un programa o temporizar esperas.
o enable: Habilita las interrupciones.
o disable: Deshabilita las interrupciones.
o 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
No hay comentarios:
Publicar un comentario