PROCESADOR (E/S)



En las entradas y salidas que se ejecutan desde el procesador entran tres conceptos que se deben conocer.

  1. El DMA
  2. Los Canales
  3. Y las instrucciones


DMA

Con un incremento moderado de la lógica asociada con el periférico se puede lograr transferir un bloque de información a o desde la memoria principal sin la intervención directa de la UCP. Esto requiere que los periféricos o los controladores de E/S sean capaces de generar direcciones de memoria y transferir datos a o desde el bus del sistema. La UCP es todavía la responsable de iniciar la transferencia de cada bloque. A partir de este punto el controlador de E/S realiza toda la operación sin que la UCP tenga que ejecutar ningún otro programa. La UCP y el controlador de E/S interaccionan sólo cuando la UCP debe dar el control del bus del sistema al controlador de E/S, como respuesta a una petición de este último. Este tipo de capacidad es lo que se conoce como Acceso Directo a Memoria (DMA).

La mayoría de los computadores de hoy día tienen la posibilidad de interrupción y de DMA. Un controlador de DMA posee un control parcial de la operación de E/S. La UCP puede liberarse totalmente si se introduce en el computador un Procesador de E/S (PE/S) o canal. Análogamente al DMA, el PE/S tiene acceso a la memoria principal y puede interrumpir a la UCP, sin embargo puede emplear un repertorio de instrucciones diferentes del de la UCP (ya que está orientado a operaciones de E/S).

Regresar Arriba



CANALES

El canal de E/S es una extensión del concepto de DMA. Un canal de E/S tiene la capacidad de ejecutar instrucciones de E/S, lo que da un control total sobre las operaciones de E/S.

Las instrucciones de E/S se almacenan en la memoria principal y serán ejecutadas por un procesador de propósito específico en el mismo canal de E/S.

Hay dos tipos comunes de canales de E/S, como se ilustra en la figura:

canales

Regresar Arriba



INSTRUCCIONES

Las instrucciones que se ejecutan en los procesadores, varia mucho de uno a otro, incluso en los modelos variantes de cada uno de ellos, algunas instrucciones cambian, para mejorar (a veces para empeorar) el rendimiento, o se añaden nuevas instrucciones.

Las instrucciones también se pueden clasificar por el tipo de operación que realiza, como por ejemplo. El control de cadenas de caracteres, el control de la memoria cache, Instrucciones aritméticas, instrucciones de transferencia de datos, instrucciones de comparación.

En forma general las instrucciones del procesador, le permiten realizar tareas, esto ejecutándose a un tiempo una o varias de estas instrucciones, en algunos procesadores las instrucciones se dividan de acuerdo al área del procesador en la cual tuvieran acción.

A continuación se presentan instrucciones de varios procesadores, algunos son ya viejas y no se usan en la actualidad, como se vera en algunos, que pertenecen a una misma familia, las instrucciones varían o se han añadido otras.


Instrucciones del 4004

Hay instrucciones de uno o dos bytes. Los primeros tardan 8 períodos de reloj (un ciclo de instrucción). Los segundos tardan 16 períodos de reloj (dos ciclos de instrucción).

Algunas Instrucciones del procesador 4004
Mnemónico Descripción OPR OPA
WRM Escribir el acumulador en RAM 1110 0000
WMP Escribir el acumulador en port de salida de RAM 1110 0001
WRR Escribir el acumulador en port de salida de ROM 1110 0010
WPM Escribir el acumulador en el medio byte especificado de RAM (se usa en los microprocesadores 4008 y 4009 solamente) 1110 0011
WR0 Escribir el acumulador en el carácter de estado de RAM 0, 1, 2, 3 1110 0100
WR1 1110 0101
WR2 1110 0110
WR3 1110 0111
SBM Restar el contenido de la posición previamente especificada de RAM del acumulador con préstamo 1110 1000
RDM Cargar en el acumulador el contenido de la posición de RAM 1110 1001
RDR Cargar en el acumulador el contenido del port de entrada de ROM1110 1010
ADM Sumar el contenido de la posición previamente especificada de RAM al acumulador con acarreo 1110 1011
RD0 Almacenar en el acumulador el carácter de estado de RAM 0, 1, 2, 3 1110 1100
RD1 1110 1101
RD2 1110 1110
RD3 1110 1111

La siguiente tabla muestra el grupo de instrucciones del acumulador.

Mnemónico Descripción OPR OPA
CLB Limpiar el acumulador y el acarreo 1111 0000
CLC Limpiar el indicador de acarreo 1111 0001
IAC Incrementar el acumulador 1111 0010
CLC Complementar el acarreo 1111 0011
CMA Complementar el acumulador 1111 0100
RAL Rotar acumulador y acarreo hacia la izquierda 1111 0101
RAR Rotar acumulador y acarreo hacia la derecha 1111 0110
TCC Sumar acarreo al acumulador y limpiar el acarreo 1111 0111
DAC Decrementar el acumulador 1111 1000
TCS Restar acarreo del acumulador y limpiar el acarreo 1111 1001
STC Poner el acarreo a uno 1111 1010
DAA Ajuste decimal del acumulador 1111 1011
KBP Convierte un código 1 de 4 a binario en el acumulador 1111 1100
DCL Designar línea de comando 1111 1101


INSTRUCCIONES DEL 80186 DE INTEL

PUSHA: Almacena los registros de uso general en la pila, en el siguiente orden: AX, CX, DX, BX, SP, BP, SI, DI.

POPA: Extrae los registros de uso general de la pila, retirándolos en el sentido inverso a PUSHA (pero descarta la imagen de SP).

PUSH inmed: Ingresa un valor inmediato a la pila.

INSB: Operación: ES:[DI] <- Port DX (Un byte), DI<-DI+1 (si DF=0) o DI<-DI-1 (si DF=1).

INSW: Operación: ES:[DI] <- Port DX (Dos bytes), DI<-DI+2 (si DF=0) o DI<-DI-2 (si DF=1).

OUTSB: Operación: Port DX <- DS:[SI] (Un byte), SI<-SI+1 (si DF=0) o SI<-SI-1 (si DF=1).

OUTSW: Operación: Port DX <- DS:[SI] (Dos bytes), SI<-SI+2 (si DF=0) o SI<:-SI-2 (si DF=1).

Shift dest,inmed. Se puede especificar directamente (sin cargar primero el valor en el registro CL) la cantidad de bits del desplazamiento. Shift es una de las siguientes instrucciones: ROL, ROR, RCL, RCR, SHL, SAL, SHR, SAR.

BOUND reg16,mem32. Verifica que el valor contenido en el registro se encuentre entre los dos valores indicados en la memoria (un valor está dado por los dos primeros bytes, y el otro por los dos últimos). Si está fuera de rango se ejecuta una interrupción interna de tipo 5. De esta manera se puede observar que BOUND es una instrucción de interrupción condicional, como INTO.

ENTER local_variables_size, nesting_level y LEAVE son instrucciones que sirven para facilitar a los compiladores de alto nivel la codificación de subrutinas o procedimientos. Para ello utilizan la pila para almacenar los parámetros y las variables locales. Estos valores se acceden mediante direccionamiento indirecto usando el registro BP. Al principio de la subrutina se deberá indicar, mediante la instrucción ENTER, el tamaño total (en bytes) de las variables locales de la subrutina (local_variables_size) y cuántos punteros a variables locales (estos se accederán usando [BP-xxxx] donde xxxx es la posición relativa de la variable local) y parámetros (los valores que se almacenaban en el registro BP) de subrutinas de nivel superior se necesitan ver (nesting_level) (en general, este valor debe ser cero) (en [BP] está almacenado el puntero a las variables locales y parámetros de la subrutina que llamó a la actual, en [BP+2] se obtienen los de la subrutina que llamó a la anterior (esto sólo si nesting_level > 0), y así sucesivamente. Al final de la subrutina, antes de la instrucción RET deberá haber una instrucción LEAVE. Cuando se usan estas instrucciones, el programa no debe manejar el registro BP


NUEVAS INSTRUCCIONES DEL PENTIUM

CMPXCHG8B reg, mem64 (Compare and Exchange 8 Bytes): Compara el valor de 64 bits ubicado en EDX:EAX con un valor de 64 bits situado en memoria. Si son iguales, el valor en memoria se reemplaza por el contenido de ECX:EBX y el indicador ZF se pone a uno. En caso contrario, el valor en memoria se carga en EDX:EAX y el indicador ZF se pone a cero.

CPUID (CPU Identification): Le informa al software acerca del modelo de microprocesador en que está ejecutando. Un valor cargado en EAX antes de ejecutar esta instrucción indica qué información deberá retornar CPUID. Si EAX = 0, se cargará en dicho registro el máximo valor de EAX que se podrá utilizar en CPUID (para el Pentium este valor es 1). Además, en la salida aparece la cadena de identificación del fabricante contenido en EBX, ECX y EDX. EBX contiene los primeros cuatro caracteres, EDX los siguientes cuatro, y ECX los últimos cuatro. Para los procesadores Intel la cadena es "GenuineIntel". Luego de la ejecución de CPUID con EAX = 1, EAX[3:0] contiene la identificación de la revisión del microprocesador, EAX[7:4] contiene el modelo (el primer modelo está indicado como 0001b) y EAX[11:8] contiene la familia (5 para el Pentium). EAX[31:12], EBX y ECX están reservados. El procesador pone el registro de características en EDX a 1BFh, indicando las características que soporta el Pentium. Un bit puesto a uno indica que esa característica está soportada. La instrucción no afecta los indicadores.

RDMSR (Read from Model-Specific Register): El valor en ECX especifica uno de los registros de 64 bits específicos del modelo del procesador. El contenido de ese registro se carga en EDX:EAX. EDX se carga con los 32 bits más significativos, mientras que EAX se carga con los 32 bits menos significativos.

RDTSC (Read from Time Stamp Counter): Copia el contenido del contador de tiempo (TSC) en EDX:EAX (el Pentium mantiene un contador de 64 bits que se incrementa por cada ciclo de reloj). Cuando el nivel de privilegio actual es cero el estado del bit TSD en el registro de control CR4 no afecta la operación de esta instrucción. En los anillos 1, 2 ó 3, el TSC se puede leer sólo si el bit TSD de CR4 vale cero.

RSM (Resume from System Management Mode): El estado del procesador se restaura utilizando la copia que se creó al entrar al modo de manejo del sistema (SMM). Sin embargo, los contenidos de los registros específicos del modelo no se afectan. El procesador sale del SMM y retorna el control a la aplicación o sistema operativo interrumpido. Si el procesador detecta alguna información inválida, entra en el estado de apagado (shutdown).

WRMSR (Write to Model-Specific Register): El valor en ECX especifica uno de los registros de 64 bits específicos del modelo del procesador. El contenido de EDX:EAX se carga en ese registro. EDX debe contener los 32 bits más significativos, mientras que EAX debe contener los 32 bits menos significativos.


INSTRUCCIONES DE TRANSFERENCIA DE DATOS

MOV- Mover CMOVE/CMOVZ- Movimiento condicional si es igual/Movimiento condicional si es cero

CMOVNE/CMOVNZ- Movimiento condicional si no es igual/Movimiento condicional si no es cero

CMOVA/CMOVNBE- Movimiento condicional si está arriba/Movimiento condicional si no está debajo o es igual

CMOVAE/CMOVNB- Movimiento condicional si está arriba o es igual/Movimiento condicional si no está debajo

CMOVB/CMOVNAE- Movimiento condicional si está debajo/Movimiento condicional si no está arriba o es igual

CMOVBE/CMOVNA- Movimiento condicional si está abajo o es igual/Movimiento condicional si no está arriba

CMOVG/CMOVNLE- Movimiento condicional si es mayor/Movimiento condicional si no es menor o igual

CMOVGE/CMOVNL- Movimiento condicional si es mayor o igual/Movimiento condicional si no es menor

CMOVC- Movimiento condicional si hay acarreo

CMOVNC- Movimiento condicional si no hay acarreo

CMOVO- Movimiento condicional si hay desbordamiento

CMOVNO- Movimiento condicional si no hay desbordamiento

CMOVS- Movimiento condicional si hay signo (negativo)

CMOVNS- Movimiento condicional si no hay signo (no negativo)

CMOVP/CMOVPE- Movimiento condicional si hay paridad/Movimiento condicional si la paridad es par

XCHG- Intercambio

BSWAP- Cambio de byte

XADD- Intercambiar y añadir

CMPXCHG- Comparar e intercambiar

CMPXCHG8B- Comparar e intercambiar 8 bytes

PUSH- Almacenar en la pila

POP- Recuperar de la pila

PUSHA/PUSHAD- Almacenar registros de propósito general en la pila

POPA/POPAD- Recuperar registros de propósito general de la pila

CBW/CWDE- Convertir byte en palabra/Convertir palabra en palabra doble en el registro EAX


INSTRUCCIONES ARITMÉTICAS BINARIAS

ADD- Sumar enteros

ADC- Sumar con acarreo

SUB- Restar

SBB- Restar con préstamo

IMU-L Multiplicación con signo

MUL- Multiplicación sin signo

IDIV- Divisicón con signo

DIV- División sin signo

INC- Incremento

DEC -Decremento

NEG- Negar

CMP- Comparar



ARITMÉTICA DECIMAL

DAA- Ajuste decimal después de añadir

DAS- Ajuste decimal después de sustraer

AAA- Ajuste ASCII después de añadir

AAS- Ajuste ASCII después de sustraer

AAM- Ajuste ASCII después de añadir

AAD- Ajuste ASCII antes de dividr



INSTRUCCIONES LÓGICAS

AND- Y

OR- O

XOR- O exclusivo

NOT- No



Estas son solo una pequeña parte de los cientos de instrucciones que tiene el procesador ( en este caso el Pentium), los procesadores predecesores, como el Pentium II, Pentium III y las variantes de ellos (XEON, CELERON) pueden contener otras instrucciones o variantes de estas.

Arriba



regresar


inicio
Si llegaste a esta pagina desde un buscador
haz click aqui para ir a la pagina principal