En las entradas y salidas que se ejecutan desde el procesador entran tres conceptos que se deben conocer.
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).
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:
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).
La siguiente tabla muestra el grupo de instrucciones del acumulador.
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.
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 ROM 1110
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
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
Si llegaste a esta pagina desde un buscador
haz click aqui para ir a la pagina principal