Upload
patty-sanchez
View
46
Download
1
Embed Size (px)
Citation preview
Evolucin del Microprocesador
Intel hasta ahora es el fabricante lder de microprocesadores para la PC. Intel ha fijado con
firmeza el estndar por el cual se miden todos los procesadores. Intel 8086 y 8088En 1978
Intel introdujo el microprocesador 8086, el cual tena una velocidad de reloj de477 MHz.
Una computadora con 5 MHz tiene 5 millones de ciclos de procesamiento por segundo. El
procesador 8088 estaba empacado en un circuito integrado de paquete en lnea dual de
40 pines. Intel 80286Para adoptar el Intel 80286 el procesador como se le conoca
comnmente se introdujo a comienzos de 1982 con una velocidad de reloj de 6 MHz Intel
80386, 80386DX y 80386SXEn 1995 Intel saco el 80386 de 16 MHz, comnmente llamado
386. El microprocesador 386 fue un procesador de 32 bits ensamblado en un paquete PGA
de 132 pines, tenia275000 transistores y su velocidad de reloj soportaba ms de 5 MIPS
Tena un modo de 32 bits, lo que significa que poda mover datos en bytes palabras De 16
bits, o palabras dobles de 32 bits el 386X se sac al mercado para suplir la necesidad de un
procesador de precio reducido con la potencia del 386DX al costo de un
286.386SLProcesador de 20 MHz. La versin SL, era semejante al 386SX, pero estaba
diseado especficamente para computadoras porttiles Intel 80486DX y SX, Este
procesador tena ms de 12 millones de transistores y generaba 20 MIPS. Este procesador
tambin introdujo algunas innovaciones como la inclusin de la cache del procesador en el
chip del procesador. Intel 80486 DX2/DX4Fue presentado en 1992 como 80486DX2. La
designacin 2 se refera a una tcnica llamada overclocking, que permita que la
velocidad de reloj e un procesador se duplicaran. El 486DX4 tambin era un producto de
overclocking. A los procesadores 486 de 25 MHz y 33 MHz se les aplicaba la tcnica de
overclocking para triplicar sus velocidades normales de reloj.
AMD 5x 86Los procesadores AMD 5x 86 eran compatibles con las tarjetas madre del 486
pero tena la capacidad semejante a los primeros procesadores Pentium. Cyrix 5x
86Tambin conocido como el MISE estaba demasiado a competir con el Intel 486 con el
cual era compatible con el zcalo Pentium Este nuevo procesador inclua muchas
caractersticas nuevas, dentro de las que se encontraban caches independientes de 8 bits
para datos e instrucciones y una FPU muy rpida. Pentium mantuvo el bus de direcciones
de 32 bits del 486 paro agrego un bus de datos de 64 bits. Tecnologa MMX. La tecnologa
MMX es un conjunto de instrucciones que utiliza la matemtica matricial, para soportar
los algoritmos de comprensin y de comprensin de grficos y presentaciones graficas en
3D permite que el FPU actu en varias piezas de datos simultneamente a travs de un
proceso llamado SIMD. Procesadores Cyrix 6x86Indicaba que el procesador cyrix con ese
nmero de modelo tenis un rendimiento equivalente al procesador Pentium de 200 MHz.
Cyrix produjo modelos que oscilaban entre 6x86-P120 y 6x86-P200.Pentium II Se le
denomina comnmente est disponible con velocidades de reloj de 233 Mhz, 266y 300
MHz. Es excelente para reproduccin de multimedia que requiera soporte para videos con
movimiento total e imgenes 3D. Celeron Se desarroll para ser utilizado en
computadoras de escritorio y porttiles, sus velocidades entre 333 MHz y 500 Mhz. Xeon
Presenta un ramo de opciones de tamao cache, N2 es capaz de direccionar y atrapar,
hasta 64 Gb de memoria con su bus de direcciones de memoria de 36 bits.
AMD K6Fue desarrollado para competir con el Pentium MMX, el AMD K6, lo supera en
rendimiento, velocidad y precio. Cyrix 6x86MX y Cyrix III Contiene un conjunto de
instrucciones MMX tiene una velocidad de rendimiento P-166a P-366El cyrix III funciona a
velocidades de reloj de 433, 466, 500 y 533 MHz Procesadores AMD K5-2 y K 6-111Se
encuentran disponibles con velocidades de reloj entre 266 y 550 MHz. El procesador K6-III
contiene 256 K de cache N2 y velocidades de reloj entre 400 y600 MHz. Intel Pentium III
Contiene 9.5 millones de transistores un cache N1 de 32K y 512 K de cache N2. Se
encuentra disponible con velocidades de reloj entre 450 MHz y 1 GHz y esta ensamblado
en un paquete de conectores laterales de borde nico de segunda generacin
denominada SECC2La mayora de las tarjetas madre que soportan un procesador Pentium
II que pueden actualizarse a Pentium III; sin embargo, pueden requerir una
actualizacin Flash BIOSAMD ATHLON Se enorgullece de contener 22 millones de
transistores que soportan el MMX de Intel y el 3DNow de AMD y funciones FPU
mejoradas. Tiene la capacidad de decodificar ms instrucciones simultneamente que el
Pentium II, con 256 Kb de cache N2 y 128Kb de cache N1 en el chip. Intel Pentium
4Disponible con velocidades de procesador de 1.3 a 1.5 Ghz. Utiliza una nueva micro-
arquitectura llamada NET-BURST, la cual contiene un bus de sistema de 400 MHz, cache
avanzado integrada en la tarje, matemticas mejoradas de punto flotante y soporte de
multimedia y tecnologa de hper-canalizacin. Soporta el uso del RDRAM de canal dual.
Arquitectura de los microprocesadores de Intel
Si nos referimos a la familia Intel, de los 2.100 transistores del 4004 en 1970, que con solo
46 instrucciones funcionaba a unos 800 KHz, se pas a los 29.000 transistores del 8086 en
1979 a 14 MHz; y en 1999 a los 8.200.000 transistores del Pentium III a 2 GHz.
Arquitectura de los microprocesadores desde el 8086 al Pentium 4
Registro de propsito general (general-purpose register): Son aquellos sobre los que no
existe restriccin en cuanto a su utilizacin. Pueden ser empleados como fuente o destino
de datos, como contador, como puntero de localidades de memoria o de elementos de
E/S.
Registros apuntadores e ndice
Registro puntero de la pila (stack pointer SP): Contiene la direccin de la memoria donde
se almacen el ltimo dato de la PILA o STACK.
REGISTRO NDICE (index register): Tambin contiene una direccin y es utilizado
como puntero. El uso de este registro permite que los programas sean ms
flexibles, ya que para acceder a distintas localidades de memoria, basta especificar
un valor que sumado al contenido del registro ndice da la direccin real.
Registros de segmentos
Un registro de segmento se utiliza para alinear en un lmite de prrafo o dicho de otra
forma codifica la direccin de inicio de cada segmento y su direccin en un registro de
segmento supone cuatro bits 0 a su derecha.
Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria para
direccionamientos conocidos como el segmento actual. Los registros de segmento son: CS (cdigo), DS (datos), SS (pila), ES , FS y GS.
Registro de estado o de bandera (flag) y sus sealizadores
Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la mquina y el resultado del procesamiento. Muchas instrucciones aritmticas y de comparacin cambian el estado de las banderas y apoyndose en ellas se pueden tomar decisiones para determinar la accin subsecuente.
La tabla contiene 16 posiciones (de 0 a 15), que son los 16 bits del registro de banderas, numeradas de derecha a izquierda. La posicin 0 la encontraremos a la derecha y la posicin 15 a la izquierda.
- - - - OF DF IF TF SF ZF - AF - PF - CF
Los bits de las banderas son las siguientes:
OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden despus de una operacin aritmtica de nmeros con signo (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera.
DF (direccin): Controla la seleccin de incremento o decremento de los registros SI y DI en las operaciones con cadenas de caracteres (1=decremento automtico; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD.
IF (interrupcin): Controla el disparo de las interrupciones (1=habilita las interrupciones; 0=deshabilita las interrupciones). La interrupcin no enmascarable es la nica que no puede ser bloqueada por esta bandera. El estado de la bandera IF se controla con las instrucciones STI y CLI.
TF (trampa): Permite la operacin del procesador en modo de depuracin (paso a paso)
SF (signo): Contiene el signo resultante de una operacin aritmtica (0=positivo; 1=negativo).
ZF (cero): Indica el resultado de una operacin aritmtica o de comparacin (0=resultado diferente de cero; 1=resultado igual a cero).
AF (acarreo auxiliar): Contiene el acarreo del bit 3. Esta bandera se prueba con las instrucciones DAA y DAS para ajustar el valor de AL despus de una suma o resta BCD.
PF (paridad): Indica si el nmero de bits 1, del byte menos significativos de una operacin, es par (0=nmero de bits 1 es impar; 1=nmero de bits 1 es par).
CF (acarreo): Contiene el acarreo del bit de mayor orden despus de una operacin aritmtica; tambin almacena el contenido del ltimo bit en una operacin de desplazamiento o de rotacin.
Direccionamiento de la memoria en tiempo real
El modo real (tambin llamado modo de direccin real en los manuales de Intel) es un
modo de operacin del 80286 y posteriores CPUs compatibles de la arquitectura x86. El
modo real est caracterizado por 20 bits de espacio de direcciones segmentado
(significando que solamente se puede direccionar 1 MB de memoria), acceso directo del
software a las rutinas del BIOS y el hardware perifrico, y no tiene conceptos de
proteccin de memoria o multitarea a nivel de hardware. Todos los CPUs x86 de las series
del 80286 y posteriores empiezan en modo real al encenderse el computador; los CPUs
80186 y anteriores tenan solo un modo operacional, que era equivalente al modo real en
chips posteriores. Puesto que una especificacin de diseo primaria de los
microprocesadores x86 es que sean completamente compatibles hacia atrs con el
software escrito para todos los chips x86 antes de ellos, el chip 286 fue hecho para
iniciarse en modo real es decir, en un modo que tena apagadas las nuevas
caractersticas de proteccin de memoria, de modo que pudieran correr sistemas
operativos escritos para microprocesadores ms viejos. Al da de hoy, incluso los ms
recientes CPUs x86 se inician en modo real al encenderse, y pueden correr el software
escrito para cualquier chip anterior. Bajo el modo real no existe ningn mecanismo para
tener varias tareas ejecutndose concurrentemente, aunque si se pueden tener varios
programas cargados en memoria al mismo tiempo, pero inactivos.
En el modo real se puede lograr un pequeo grado de multitarea si interceptamos algunos
de los vectores de interrupcin que se ejecutan peridicamente, como el temporizador, e
insertamos una rutina de usuario bajo esa interrupcin. Como puede verse, este tipo de
multitarea no tiene ni punto de comparacin con la que ofrece el modo protegido del
80386.En el modo real no se puede controlar que un programa, por ejemplo, no pueda
acceder a una zona especfica de memoria. Un programa en modo real puede acceder a
cualquier direccin de memoria direccionable por el procesador, con lo que un programa
maligno puede modificar estructuras del sistema operativo o redireccionar vectores de
interrupcin y tener un control total sobre el sistema. Debido a esta escasa proteccin que
se ofrece en el modo real, aparecen los temibles virus informticos y otros programas
malignos. Tras conocer el modo protegido y haber trabajado con l, me atrevo a afirmar
que es imposible realizar un virus para un sistema operativo que trabaje en modo
protegido, siempre y cuando ese sistema operativo no deje ninguna puerta de entrada
libre al usuario para controlar el sistema. Todas las interrupciones hardware y software
son controladas por el procesador en el modo real leyendo de una tabla de interrupciones
que se encuentran en las primeras posiciones de memoria fsica. Cuando se produce una
interrupcin, se lee de la tabla anterior la direccin donde encontrar su rutina de
tratamiento. Como cualquier programa pude acceder a cualquier direccin de memoria,
pude manipular esta rea de memoria e interceptar diversos vectores de interrupcin y
apuntarlas a rutinas propias, con lo que cualquier programa puede controlar el sistema
segn desee.
Direccionamiento de memoria en modo protegido.
El direccionamiento de memoria en modo protegido (a partir del 80286 y posteriores)
permite acceder a datos y programas localizados por encima y dentro del primer
megabyte de memoria. Para direccionar esta seccin extendida el sistema de memoria se
requiere un cambio en el esquema de direccionamiento de segmento ms desplazamiento
usado en el modo real. Cuando los datos y programa se direccionan la memoria extendida,
se sigue utilizando la direccin de desplazamiento para acceder a la informacin en el
segmento de memoria. Una diferencia consiste en la direccin del segmento ya que no
existe en modo protegido. En lugar de una direccin de segmento, el registro de segmento
contiene un SELECTOR que elige un descriptor de una tabla. El descriptor especfica la
ubicacin del segmento en memoria, su longitud y sus derechos de acceso. Dado que el
registro de segmento y la direccin de desplazamiento an acceden a la memoria, las
instrucciones del modo protegido son idnticas a las de modo real. De hecho, la mayora
de los programas escritos para funcionar en modo real funcionarn sin cambios en el
modo protegido. La diferencia entre los dos modos es la forma en que el microprocesador
interpreta el registro de segmento para acceder al segmento de memoria. Otra diferencia,
en los 80386 y posteriores, es que en modo protegido la direccin de desplazamiento
puede ser un nmero de 32 bits en vez de utilizar uno de 16 bits como en modo real. Es
por esto que puede direccionar hasta 4 Gb de longitud.
El SELECTOR, ubicado en el registro del segmento, elige uno de 8192 descriptores en una
de las dos tablas de descriptores. El DESCRIPTOR especifica la ubicacin, la longitud y los
derechos de acceso del segmento de memoria, aunque no directamente como en el modo
real. Por ejemplo, en el modo real, si CS=0008H, el segmento de cdigo inicia en la
localidad 00080H. En modo protegido, este nmero de segmento puede direccionar
cualquier localidad de memoria en todo el sistema para el segmento de cdigo. Existen
dos tablas de descriptores utilizadas con los registros de segmentos: una contiene
descriptores globales y otra, descriptores locales. Los descriptores globales contienen las
definiciones de los segmentos que se aplican a todos los programas, mientras que los
descriptores locales son generalmente exclusivos de una aplicacin. Podramos llamar
descriptor de sistema a un descriptor global, y descriptor de aplicacin a uno local. Cada
tabla de descriptores contendr 8192 entradas, por lo tanto una aplicacin podra
disponer en cualquier momento de 16.384 descriptores. Puesto que un descriptor
describe un segmento de memoria, esto permite que puedan ser descriptos hasta 16.384
segmentos de una aplicacin.
Los registros invisibles para los programas
Los registros invisibles para el programa no son diseccionados directamente por el
software, motivo por el cual reciben este nombre (TR, LDTR, GDTR,IDTR)
La parte invisible de estos registros recibe el nombre de cach ( no se debe confundir
con los niveles 1 o 2 encontradas en el microprocesador). Cada vez que se cambia el
nmero en el registro de segmento, la parte del registro de segmentos invisible para el
programa es cargada en la direccin base., el lmite y los derechos de acceso. Cuando se
escribe un nuevo nmero en un registro, el microprocesador accede a la tabla de
descriptores y carga el descriptor en la cach invisible para el programa de forma parte
del registro del segmento. El descriptor se mantiene ah y es usado para acceder al
segmento de memoria hasta que el nmero de segmento es cambiado nuevamente. Esto
permite al microprocesador acceder repetidamente a un segmento de memoria sin
consultar en cada ocasin la tabla de descriptores (de ah el trmino cach).
El GDTR (registro de tabla de descriptores globales) y el IDTR (registro de tabla de
descriptores de interrupcin) contienen la direccin base y lmite de la tabla de
descriptores. El lmite de cada tabla de descriptores es de 16 bits debido a que la mxima
longitud de la tabla es de 64 KB. Cuando se desea la operacin en modo protegido, la
direccin y el lmite de la tabla de descriptores globales son cargados en el GDTR. Antes de
usar el modo protegido, debe inicializarse tambin la tabla de descriptores de interrupcin
y el IDTR.
La ubicacin de la tabla de descriptores locales es seleccionada de la tabla de
descriptores globales (uno de los descriptores se configura para direccionar la tabla de
descriptores locales).
Para acceder a la tabla de descriptores locales, LDTR (registro de la tabla de descriptores
locales) es cargado con un selector, al igual que un registro de segmento es cargado con
un selector. Este selector accede a la tabla de descriptores globales y carga la direccin de
base, el lmite y los derechos de acceso de la tabla de descriptores hacia la parte cach del
LDTR.
El TR (registro de tarea) contiene un selector, el cual accede a un descriptor que define
una tarea. Una tarea es con frecuencia un procedimiento o un programa de aplicacin. El
descriptor para el procedimiento o programa es almacenado en la tabla de descriptores
globales, de forma que el acceso pueda se controlado por medio de los niveles de
privilegio. El registro de tarea permite la conmutacin de contexto o de tarea en aprox. 17
us. La conmutacin de tareas se efecta en lapsos razonablemente cortos y permite a los
sistemas multitareas cambiar una tarea a otra de manera simple y ordenada.
Diferentes modos de direccionamiento
Diferentes arquitecturas de computadores varan mucho en cuanto al nmero de modos
de direccionamiento que ofrecen desde el hardware. Eliminar los modos de
direccionamiento ms complejos podra presentar una serie de beneficios, aunque podra
requerir de instrucciones adicionales, e incluso de otro registro. Se ha comprobado que el
diseo de CPUs segmentadas es mucho ms fcil si los nicos modos de direccionamiento
que proporcionan son simples.
La mayora de las mquinas RISC disponen de apenas cinco modos de direccionamiento
simple, mientras que otras mquinas CISC tales como el DEC VAX tienen ms de una
docena de modos de direccionamiento, algunos de ellos demasiado complejos. El
mainframe IBM System/360 dispona nicamente de tres modos de direccionamiento;
algunos ms fueron aadidos posteriormente para el System/390.
Cuando existen solo unos cuantos modos, estos van codificados directamente dentro de la
propia instruccin (Un ejemplo lo podemos encontrar en el IBM/390, y en la mayora de
los RISC). Sin embargo, cuando hay demasiados modos, a menudo suele reservarse un
campo especfico en la propia instruccin, para especificar dicho modo de
direccionamiento. El DEC VAX permita mltiples operandos en memoria en la mayora de
sus instrucciones, y reservaba los primeros bits de cada operando para indicar el modo de
direccionamiento de ese operando en particular.
Incluso en computadores con muchos modos de direccionamiento, algunas medidas
realizadas a programas indican que los modos ms simples representan cerca del 90% o
ms de todos los modos de direccionamiento utilizados. Dado que la mayora de estas
medidas son obtenidas a partir de cdigos de alto nivel generados a partir de
compiladores, nos da una idea de las limitaciones que presentan los compiladores que se
utilizan.
- Implcito
En este modo de direccionamiento no es necesario poner ninguna direccin de forma explcita, ya que en el propio cdigo de operacin se conoce la direccin del (de los) operando(s) al (a los) que se desea acceder o con el (los) que se quiere operar.
Supongamos una arquitectura de pila, las operaciones aritmticas no requieren direccionamiento explcito por lo que se ponen como:
- add
- sub
...
Por qu? Porque cuando se opera con dos datos en esta arquitectura se sabe que son los dos elementos del tope de la pila:
Ejemplo de una pila
1 2 3 4 5 6
- Directo
El campo de operando en la instruccin contiene la direccin en memoria donde se encuentra el operando.
En este modo la direccin efectiva es igual a la parte de direccin de la instruccin. El operando reside en la memoria y su direccin es dada directamente por el campo de direccin de la instruccin. En una instruccin de tipo ramificacin el campo de direccin especifica la direccin de la rama actual.
Con este tipo de direccionamiento, la direccin efectiva es contenida en la misma instruccin, tal como los valores de datos inmediatos que son contenidos en la instruccin. Un procesador de 16 bits suma la direccin efectiva al contenido del segmento de datos previamente desplazado en 4 bits para producir la direccin fsica del operando.
Ejemplo: MOV A,17H
- Indirecto
El campo de operando contiene una direccin de memoria, en la que se encuentra la direccin efectiva del operando.
Ejemplo: MOV A,@17H
- Absoluto
El campo de operando contiene una direccin en memoria, en la que se encuentra la instruccin.
- De registro
Sirve para especificar operandos que estn en registros.
Ejemplo: MOV A, R0
- Indirecto mediante registros
El campo de operando de la instruccin contiene un identificador de registro en el que se
encuentra la direccin efectiva del operando.
En este modo el campo de la direccin de la instruccin da la direccin en donde la direccin efectiva se almacena en la memoria. El control localiza la instruccin de la memoria y utiliza su parte de direccin para accesar la memoria de nuevo para leer una direccin efectiva. Unos pocos modos de direccionamiento requieren que el campo de direccin de la instruccin sea sumado al control de un registro especificado en el procesador. La direccin efectiva en este modo se obtiene del siguiente clculo:
Dir. Efectiva = Dir. de la parte de la instruccin + Contenido del registro del procesador
Ejemplo: MOV A,@R0
- De desplazamiento
Combina el modo directo e indirecto mediante registros.
- De pila
Se utiliza cuando el operando est en memoria y en la cabecera de la pila.
Este direccionamiento se basa en las estructuras denominadas Pila(tipo LIFO), las cuales estn marcados por el fondo de la pila y el puntero de pila (*SP), El puntero de pila apunta a la ltima posicin ocupada. As, como puntero de direccionamiento usaremos el SP. El desplazamiento ms el valor del SP nos dar la direccin del objeto al que queramos hacer referencia. En ocasiones, si no existe C. de desplazamiento solo se trabajara con la cima de la pila. Este tipo de direccionamiento nos aporta flexibilidad pero por el contrario, es mucho ms complejo que otros tipos estudiados ms arriba.
- Respecto a un registro base
Este modo de direccionamiento es muy usado por los ensambladores cuando se llaman a las funciones (para acceder a los parmetros apilados en la pila, valga la redundancia). Consiste, al igual que el indirecto a travs de registro, en calcular la EA (Effective Address) como la suma del contenido del registro base y un cierto desplazamiento (u offset) que siempre ser positivo. Esta tcnica permite cdigos reentrantes y acceder de forma fcil y rpida a posiciones cercanas de memoria.
EA = RB+offset RB = registro base offset = desplazamiento -> RB se comporta como una direccin de memoria a la que se le sumar el desplazamiento.
- Respecto a un registro ndice
Es similar al anterior, lo nico que es el contenido del registro ndice el que indica el desplazamiento que se produce a partir de una direccin de memoria que se pasa tambin como argumento a la orden que utiliza este modo de direccionamiento. Aunque en esencia son dos modos equivalentes. La EA se calcula como la suma del contenido del registro ndice y una direccin de memoria:
EA = RI+DM RI = registro ndice DM = direccin de memoria -> RI se comporta como un offset
=== Indexado respecto a una base === Se trata de una combinacin de los dos anteriores y consiste en calcular la direccin efectiva como:
EA = RI+RB+DM
-> Las siglas significan lo mismo que en el caso anterior.
- Respecto al contador de programa
Consiste en direccin una posicin de memoria usando como registro base al contador de programa (PC), el funcionamiento es anlogo al direccionamiento respecto a registro base con la salvedad de que, en este caso, el offset puede ser tambin negativo.
- Indexado con autoincremento/autodecremento
Es un modo de direccionamiento anlogo al indexado, explicado anteriormente.
La nica diferencia es que permite un incremento o decremento de la direccin final o el
registro ndice segn
los siguientes casos:
-> Indexado con autopreincremento: Incrementa el registro ndice primero (se incrementa un valor, segn el tamao del objeto direccionado) y luego calcula la EA al igual que el direccionamiento indexado.
-> Indexado con autoposincremento: Calcula la direccin efectiva y despus incrementa esta.
-> Indexado con autopredecremento: Decrementa el registro ndice y despus calcula la direccin efectiva.
-> Indexado con autoposdecremento: Calcula la direccin efectiva y despus decrementa esta.
- Instruccin de salto con direccionamiento absoluto
Consiste en cargar en el PC el valor que se especifica en la orden de salto, p.e:
jmp 0xAB ----> Carga 0xAB en PC
- Instruccin de salto con direccionamiento relativo
Es parecida a la especificada anteriormente la diferencia es que el salto es relativo al PC, pongamos un ejemplo:
Supongamos que PC vale = 0x0A, si nosotros interpretamos la instruccin jr +03, saltaremos tres posiciones posteriores a PC (tambin podra ser -03 y seran posiciones anteriores). Pero, cuidado! si esa instruccin estaba en la posicin 0x0A la direccin de PC a incrementar ser la inmediatamente posterior (ya que PC se incrementa automticamente despus de leer la instruccin), por lo que quedara:
PC = 0x0B ---> nuevo PC = 0x0B+0x03 = 0x0E, con lo que el PC quedara como 0x0E.
Que es el lenguaje ensamblador y como nace dentro del microprocesador
El lenguaje ensamblador, o assembler (assembly language en ingls) es un lenguaje de
programacin de bajo nivel para los computadores, microprocesadores,
microcontroladores, y otros circuitos integrados programables. Implementa una
representacin simblica de los cdigos de mquina binarios y otras constantes necesarias
para programar una arquitectura dada de CPU y constituye la representacin ms directa
del cdigo mquina especfico para cada arquitectura legible por un programador. Esta
representacin es usualmente definida por el fabricante de hardware, y est basada en los
mnemnicos que simbolizan los pasos de procesamiento (las instrucciones), los registros
del procesador, las posiciones de memoria, y otras caractersticas del lenguaje. Un
lenguaje ensamblador es por lo tanto especfico a cierta arquitectura de computador fsica
(o virtual). Esto est en contraste con la mayora de los lenguajes de programacin de alto
nivel, que, idealmente son portables.
Un programa utilitario llamado ensamblador es usado para traducir sentencias del
lenguaje ensamblador al cdigo de mquina del computador objetivo. El ensamblador
realiza una traduccin ms o menos isomorfa (un mapeo de uno a uno) desde las
sentencias mnemnicas a las instrucciones y datos de mquina. Esto est en contraste con
los lenguajes de alto nivel, en los cuales una sola declaracin generalmente da lugar a
muchas instrucciones de mquina.
Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el
desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuracin.
Particularmente, la mayora de los ensambladores modernos incluyen una facilidad de
macro (descrita ms abajo), y son llamados macro ensambladores.
Fue usado principalmente en los inicios del desarrollo de software, cuando an no se
contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se
utiliza con frecuencia en ambientes acadmicos y de investigacin, especialmente cuando
se requiere la manipulacin directa de hardware, altos rendimientos, o un uso de recursos
controlado y reducido.
Muchos dispositivos programables (como los microcontroladores) an cuentan con el
ensamblador como la nica manera de ser manipulados.
Instrucciones en lenguaje ensamblador
ACALL realiza una llamada incondicional a la subrutina situada en la direccin indicada. ACALL incrementa el PC (Program Counter) dos veces para obtener la direccin de la siguiente instruccin, luego guarda dicha direccin en la pila (el byte de menor peso en primer lugar). En consecuencia el apuntador de pila (SP o Stack Pointer) incrementa su valor en 2. Posteriormente el control del programa se transfiere a la direccin indicada en la instruccin. La direccin de salto, o nuevo valor para el PC se obtiene uniendo a los 5 bits de mayor peso del PC ya incrementado, los bits 7-5 del cdigo de operacin y el segundo byte de la instruccin.
ADD suma el valor del operando al valor del Acumulador, y deja el resultado en el Acumulador. El valor del operando no resulta afectado.
El bit de acarreo (C) se pone a uno si hay llevada desde el bit 7. Es decir, si el resultado de la suma pasa de 255. En caso contrario el bit C se pone a cero.
El bit de acarreo auxiliar (AC) se pone a uno si hay llevada desde el bit 3. Es decir si el nibble bajo del resultado pasa de 15. En caso contrario el bit AC se pone a cero.
El bit de rebasamiento (OV) se pone a uno si hay llevada desde el bit 6, o desde el bit 7, pero no de ambos. En caso contrario se pone a cero. En otras palabras, si al sumar dos nmeros enteros, el flag OV toma valor 1, ello significa que el resultado se encuentra fuera del rango de los enteros de 8 bits, que va desde -128 hasta +127.
ADDC suma el valor del operando, el bit de acarreo C, y el valor del Acumulador, y deja el resultado en el Acumulador. El valor del operando no resulta afectado.
El bit de acarreo (C) se pone a uno si hay llevada desde el bit 7. Es decir, si el resultado de la suma pasa de 255. En caso contrario el bit C se pone a cero.
El bit de acarreo auxiliar (AC) se pone a uno si hay llevada desde el bit 3. Es decir si el nibble bajo del resultado pasa de 15. En caso contrario el bit AC se pone a cero.
El bit de rebasamiento (OV) se pone a uno si hay llevada desde el bit 6, o desde el bit 7, pero no de ambos. En caso contrario se pone a cero. En otras palabras, si al sumar dos nmeros enteros, el flag OV toma valor 1, ello significa que el resultado se encuentra fuera del rango de los enteros de 8 bits, que va desde -128 hasta +127.
AJMP realiza un salto a la direccin indicada de la memoria de cdigo. La direccin de salto, o nuevo valor para el PC (Program Counter) se obtiene uniendo a los 5 bits de mayor peso del PC (incrementado dos veces), los bits 7-5 del cdigo de operacin y el segundo byte de la instruccin.
Como la instruccin AJMP slo afecta a los 11 bits de menor peso del PC, la llamada siempre se produce a una direccin de memoria de cdigo situada dentro del bloque de 2K al que pertenece el primer byte de la instruccin que sigue al AJMP.
ANL realiza la operacin "AND" bit a bit, entre operando1 yoperando2, dejando el resultado en operando1. El valor del operando2 no resulta afectado.
Nota: Cuando se utiliza esta instruccin para modificar un puerto de salida, el valor inicial del dato del puerto se lee del latch de salida, no de las patillas del puerto.
CJNE compara la magnitud de operando1 y operando2 y salta si sus valores no son iguales. Si ambos operandos son iguales, el programa contina con la siguiente instruccin a CJNE. La direccin a donde saltar se obtiene sumando el offset (tercer byte de la instruccin), al PC (Program Counter) despus de que ste se haya incrementado hasta el comienzo de la siguiente instruccin. El offset representa una cantidad entera con signo, y permite saltos de hasta 127 posiciones hacia adelante, y hasta 128 posiciones hacia atrs, sobre la direccin de comienzo de la siguiente instruccin.
La instruccin no modifica ninguno de los dos operandos.
El flag de acarreo (C) se pone a uno si el valor del primer operando es menor que el segundo operando. En caso contrario el bit C se pone a 0.
CLR A pone a cero el acumulador.
CLR bit pone a cero el bit indicado. CLR puede operar con el bit C o con cualquier bit
direccionable de forma directa.
CPL A complementa el contenido del acumulador. Cada bit del acumulador que est a "1" se pondr a "0" y al revs.
La instruccin DAA ajusta el contenido del acumulador a un nmero BCD. Su funcionamiento se realiza en dos fases:
En la primera, si el bit AC vale 1, o si el nibble bajo del acumulador es mayor que 9, se aade 06H al acumulador. Esta operacin puede poner a 1 el C, pero no puede ponerlo a 0.
Si despus de la primera fase el bit C vale 1, o si el nibble alto del acumulador es mayor que 9, se aade 60H al acumulador.
La instruccin DAA debe utilizarse siempre despus de una suma (ADD o ADDC), y no puede emplearse despus de una resta (SUBB).
DEC decrementa en una unidad el valor del operando. Si el valor a decrementar es 0, entonces el resultado ser 0xFF, aunque el bit C no resulta afectado por ello.
Nota: Cuando se utiliza esta instruccin para modificar un puerto de salida, el valor inicial del dato del puerto se lee del latch de salida, no de las patillas del puerto.
DIV AB vide (divisin entera) el contenido del acumulador entre el contenido del registro B. El cociente se deja en el acumulador y el resto se deja en el registro B. Si inicialmente el registro B tiene valor 0, tras la divisin el contenido del acumulador y del registro B es indeterminado, y se activa el flag OV.
El flag Carry (C) siempre se pone a 0.
DJNZ decrementa el operando y si el nuevo valor es distinto de cero, se produce el salto. Si el valor del operando es cero, el programa contina con la siguiente instruccin a DJNZ. La direccin a donde saltar se obtiene sumando el offset (ltimo byte de la instruccin), al PC (Program Counter) despus de que ste se haya incrementado hasta el comienzo de la siguiente instruccin. El offset representa una cantidad entera con signo, y permite saltos de hasta 127 posiciones hacia adelante, y hasta 128 posiciones hacia atrs, sobre la direccin de comienzo de la siguiente instruccin.
INC incrementa en una unidad el valor del operando. Si el valor a incrementar es 0FFH, entonces el resultado ser 0, aunque el bit C no resulta afectado por ello.
Nota: Cuando se utiliza esta instruccin para modificar un puerto de salida, el valor inicial del dato del puerto se lee del latch de salida, no de las patillas del puerto.
LCALL realiza una llamada incondicional a la subrutina situada en la direccin indicada. LCALL incrementa el PC (Program Counter) tres veces para obtener la direccin de la siguiente instruccin, luego guarda dicha direccin en la pila (el byte de menor peso en primer lugar). En consecuencia el apuntador de pila (SP o Stack Pointer) incrementa su valor en 2. Posteriormente el control del programa se transfiere a la direccin indicada en la instruccin.
LJMP realiza un salto incondicional a la direccin de 16 bits indicada en los dos ltimos bytes de la instruccin. El destino puede ser cualquier posicin de los 64 Kbytes de memoria de cdigo.
MOV copia el valor de operando2 en operando1. El valor de operando2 no resulta afectado. Ambos operandos pertenecen a la RAM interna. Ningn flag resulta afectado, salvo que el movimiento se realice hacia el registro PSW que contiene los flags.
Nota_1: MOV A,ACC no es una instruccin vlida. Experimentalmente se ha comprobado que se trata de una instruccin de dos bytes que se ejecuta en un solo ciclo mquina y que parece dejar siempre el contenido del acumulador a 0xFF.
Nota_2: En el caso de "MOV direc1,direc2", los operandos se almacenan en orden inverso. As la instruccin formada por los bytes 85H, 20H, 50H indica "Mover el contenido de la direccin 20H de RAM Interna a la direccin 50H de RAM Interna.
XCHD A,@Ri intercambia el nibble bajo (bits 3-0) del acumulador con el nibble bajo de la posicin de RAM interna cuya direccin est contenida en el registro Ri. Los nibbles altos de ambos operandos no se ven afectados.
?? Byte : El 8051 soporta 255 cdigos de operacin. El cdigo de operacin 0xA5 es el nico que no corresponde a ninguna funcin documentada. Como no est documentada ni definida no se recomienda su uso. Sin embargo segn nuestra experiencia con un C PCF80C552 podemos afirmar que se trata de una instruccin de dos bytes que se ejecuta en un solo ciclo mquina. Aparte de la demora introducida no se ha observado ninguna otra accin.