Beruflich Dokumente
Kultur Dokumente
1.
1.1
MICROPROCESADORES
1.1.1
Microprocesador
El microprocesador (uP) es un circuito integrado que contiene todos los elementos de una "unidad
central de procesamiento" o CPU (por sus siglas en ingls; Central Process Unit). En la actualidad
en el interior de este componente electrnico existen millones de transistores integrados.
Actualmente se dispone de una seccin especial para alojarlo dentro de una computadora. El
microprocesador est compuesto principalmente por: Registros, la Unidad de Control y la Unidad
aritmtico-lgica.
Para realizar este ciclo bsico, la CPU debe ser capaz de coordinar sus dispositivos internos y
externos para realizar:
Lecturas desde memoria interna (registros) y memoria externa
Escrituras a memoria interna y externa
Decodificacin de instrucciones (basada en la consulta de una unidad de microcdigo
interna a la CPU)
Operaciones de tipo aritmtico y lgico.
1.1.2
La figura 1.2 muestra en forma esquemtica y muy general la estructura de una computadora.
entre los
microprocesadores
los
1.1.3
1971
Intel fabrica el primer microprocesador (el 4004, figura 1.4) de tecnologa PMOS. Este era un
microprocesador de 4 bits y fue fabricado por Intel, contena 2,300 transistores y corra a 108 Khz
poda direccionar slo 4096 (4k) localidades de memoria de 4 bits, reconoca 45 instrucciones y
poda ejecutar una instruccin en 20 seg en promedio.
1972
Intel desarroll una versin ms poderosa (el 8008), el cual poda manipular bytes completos, por
lo cual fue un microprocesador de 8 bits. La memoria que este poda manejar se increment a 16
kbytes, sin embargo, la velocidad de operacin continu igual.
1973
Intel lanza al mercado el 8080 el primer microprocesador de tecnologa NMOS, se increment la
capacidad de direccionamiento de memoria a 64 kbytes.
1975
Zilog lanza al mercado el Z80, uno de los microprocesadores de 8 bits ms poderosos. En ese
mismo ao, Motorola abate dramticamente los costos con sus microprocesadores 6501 y 6502
(este ltimo adoptado por APPLE para su primera microcomputadora personal).
1976
Surgen las primeras microcomputadoras de un slo chip, que ms tarde se denominarn
microcontroladores. Dos de los primeros microcontroladores, son el 8048 de Intel y el 6805R2 de
Motorola.
80s
En la dcada de los 80's comienza la ruptura entre la evolucin tecnolgica de los
microprocesadores y la de los microcontroladores, ya que los primeros han ido incorporando cada
vez ms y mejores capacidades para las aplicaciones en donde se requiere el manejo de grandes
volmenes de informacin y por otro lado, los segundos han incorporado ms capacidades que les
permiten la interaccin con el mundo fsico en tiempo real, adems de mejores desempeos en
ambientes de tipo industrial.
90s
En los 90s aparecen los siguientes microprocesadores como base principal en la construccin de
procesamiento digital:
1993: Intel Pentium, Motorola 68060, AMD K5, MIPS R10000
1995: Intel Pentium Pro
1997: Intel Pentium II, AMD K6, PowerPC (versiones G3 y G4), MIPS R120007
1999: Intel Pentium III, AMD K6-2
Al inicio del ao 2000, aparecen los siguientes microprocesadores de mayores capacidades de
proceso:
2000: Intel Pentium 4 (figura 1.5), Intel Itanium 2, AMD Athlon XP, AMD Duron, PowerPC
G4, MIPS R14000
2005: Intel Pentium D, Intel Extreme Edition con hyper threading, Intel Core Duo, AMD
Athlon 64, AMD Athlon X2, AMD Athlon FX.
2006: Intel Core 2 Duo, Intel Core 2 Extreme, AMD Athlon 64 X2 (Figura 1.6)
2007: Intel Core 2 Quad, AMD Quad Core, AMD Quad Fx
presentacin de reloj
de
bus
4004
15/11/71
108 KHz.
8008
1/4/72
8080
1/4/74
Memoria
Memoria
Breve
transistores
direccionable virtual
descripcin
4 bits
2.300 (10
micras)
640 byte
108 KHz.
8 bits
3.500
16 KBytes
Manipulacin
Datos/texto
2 MHz.
8 bits
6.000
64 KBytes
10 veces las (6
micras)
prestaciones del
8008
1 MegaByte
10 veces las
prestaciones del
8080
5 MHz.
29.000
8086
8/6/78
8 MHz.
16 bits
(3 micras)
10 MHz.
Idntico al 8086
excepto en su
bus externo de 8
bits
5 MHz.
8088
1/6/79
8 bits
29.000
8 MHz.
8 MHz.
134.000
80286
1/2/82
10 MHz.
16 Bits
De 3 a 6 veces
las prestaciones
del 8086
16 Megabytes
1
Gigabyte
4 Gigabytes
(1.5 micras)
12 MHz.
16 MHz.
Microprocesador
275.000
20 MHz.
17/10/85
Intel 386 DX
32 Bits
25 MHz.
(1 micra)
33 MHz.
Microprocesador
275.000
16 MHz.
16/6/88
Intel 386 SX
16 Bits
20 MHz.
Bus capaz de
direccionar 16
bits procesando
Terabytes 32bits a bajo
coste
64
4 gigabytes
(1 micra)
25 MHz.
Microprocesador
10/4/89
33 MHz.
Intel 486 DX
(1 micra, 0.8
32 Bits micras en 50
MHz.)
64
4 Gigabytes
Terabytes
Cach de nivel 1
en el chip
50 MHz.
16 MHz.
Microprocesador
1.185.000
20 MHz.
22/4/91
Intel 486 SX
32 Bits
4 Gigabytes
(0.8 micras)
25 MHz.
Idntico en
diseo al Intel
486DX, pero sin
Terabytes coprocesador
matemtico
64
33 MHz.
60 MHz.
66 MHz.
Procesador
22/3/93
Pentium
75 MHz.
90 MHz.
3,1 millones
32 Bits
4 Gigabytes
(0.8 micras)
Arquitectura
escalable. Hasta
5 veces las
prestaciones del
Terabytes 486 DX a 33
MHz.
64
100 MHz.
1.2
Arquitectura Harvard
El modelo Harvard, representado en la figura 1.8, dispone de dos memorias:
Memoria de datos
Memoria de Programa
Adems cada memoria dispone de su respectivo bus, lo que permite, que la CPU pueda acceder
de forma independiente y simultnea a la memoria de datos y a la de instrucciones. Como los
buses son independientes stos pueden tener distintos contenidos en la misma direccin.
Arquitectura Ortogonal
Cualquier instruccin puede utilizar cualquier elemento de la arquitectura como fuente o destino.
En algunos microcontroladores como el PIC, el manejo del banco de registros, que participan
activamente en la ejecucin de las instrucciones, son ortogonales.
Arquitectura basada en banco de registros
Implica que todos los elementos del sistema, es decir, temporizadores, puertos de entrada/salida,
posiciones de memoria, etc, estn implementados fsicamente como registros.
1.3
1.3.2
1.3.1
INTERRUPCIONES
1.4
LENGUAJE ENSAMBLADOR
Introduccin
El lenguaje ensamblador es un conjunto de Mnemnicos para representar las instrucciones que
puede realizar una computadora. Adems, es una variante legible para el ser humano del lenguaje
mquina que usan las computadoras para ejecutar programas. Al mismo tiempo es la mejor
manera que se tiene para comunicarse con la PC (tambin conocida como microcomputadora) y
con el lenguaje de programacin que utilice. El ensamblador resulta indispensable cuando se
desea escribir programas que controlen la entrada/salida de la PC, agregar nuevas interfaces de
e/s, escribir rutinas optimizadas de un procedimiento, escribir rutinas que aprovechen y maximicen
el uso del hardware, y en general realizar cualquier tarea que no puedan llevar a cabo los dems
lenguajes de programacin.
Ventajas y desventajas
Aunque cualquier lenguaje de programacin ofrece facilidades para realizar determinadas tareas,
ninguno proporciona un control absoluto con la PC, ni informacin fundamental de lo que sucede
mientras el programa se ejecuta.
Ahora que se ha visto las diferencias entre lenguajes, tambin es justo sealar los problemas de
trabajar con el ensamblador
1.4.1
Bus de direcciones
(bits)
Bus de datos
(bits)
20
16
20
24
16
32
16
32
32
32
64
16 Gb
INTEL ITANIUM
AMD ATHLON64
32/64
64/128
64 Gb
MicroProcesadores
8086/80186
8088/80188
80286
80386 SX
80386 DX
80486 SX
80486 DX
1
1
16
16
4 Gb
Figura 1.10. Registros de uso general del uP 8086, registros apuntadores, registros ndice, registros de
segmento y el registro apuntador de instrucciones.
Los primeros cuatro registros AX, BX, CX y DX son registros de uso general y se pueden usar
tambin como registros de 8 bits. Es decir, AX, se puede dividir en AH y AL (AH es el byte alto High- y AL es el byte bajo -Low-). Lo mismo es aplicable a los otros tres (BX en B y BL, CX en CH y
CL, y DX en DH y DL). Como lo mostr la figura anterior. Estos son los nicos registros que
pueden usarse de modo dual (8 o 16 bits). En la prctica, los registros de la CPU generalmente
son conocidos por sus nombres propios.
AX Acumulador. Enva o recibe datos de puertos y para multiplicacin y divisin.
BX Registro base. Calcula direcciones de memoria.
CX Registro contador. Contador de ciclos.
DX Registro de datos. Guarda direcciones de los puertos
DS Registro del segmento de datos, ES Registro del segmento extra, SS Registro del
segmento de pila y CS Registro del segmento de cdigo, se utilizan para guardar el
valor de un segmento en cualquiera de los registros.
BP Registro de apuntadores base y SP Registro del apuntador de la pila. Se utilizan
para manipular la informacin que se encuentra en la pila.
SI Registro ndice fuente y DI Registro ndice destino, se usan principalmente para las
operaciones de cadena o para el paso de parmetros
IP Registro de apuntador de siguiente instruccin. Este registro siempre apunta a la
siguiente instruccin a ejecutarse.
F Registro de flags (banderas). Este registro se muestra en la tabla 1.3. Est formado por
varios bits cada uno con significado propio, que son modificados por las operaciones que
realiza el uP.
Bit
15 14 13 12 11 10 9 8
5 4
3 2
1 0
Flag -- -- -- -- OF DF IF TF SF ZF -- AF -- PF -- CF
Tabla 1.3. Registro de flags (banderas) del uP 8086
Aunque es un registro de 16 bits slo algunos de ellos tienen significado. Los otros adquieren
valores indeterminados, y se dice que son bits reservados; un programa no debe tocarlos, pues
aunque un equipo dado puede que no los use, otros microprocesadores podran manipularlos
internamente.
CF Carry Flag o indicador de acarreo. Normalmente indica que "se lleva algo" despus de
haber sumado o restado.
OF Overflow Flag o indicador de desbordamiento. Si despus de una operacin el
resultado no cabe en el tamao del registro, se pone a 1.
ZF Zero Flag o indicador de cero. Si el resultado da 0 se pone a 1.
SF Sign Flag o indicador de signo. Si el resultado es negativo se pone a 1.
PF Parity Flag o indicador de paridad. Con algunas operaciones lgicas o aritmticas se
pone a 1 si el resultado es par.
AF Auxiliary Flag o indicador auxiliar. Se usa para operaciones BCD.
DF Direction Flag o indicador de direccin. Se usa en operaciones llamadas "de cadena",
indicando el sentido (ascendente o descendente) en que se recorre la memoria.
IF Interrupt Flag o indicador de interrupciones. Cuando se pone a 1 se permiten las
interrupciones, a 0 se ignoran; se dice que se enmascaran.
TF Trap Flag o indicador de trampa (para ejecucin paso a paso).
1.4.2
DECLARACION DE SEGMENTOS
SS
Direccin
Segmento de la pila
DS
Direccin
Segmento de datos
CS
Direccin
Segmento de cdigo
Registros de
Segmento
MEMORIA
1.4.3
MODOS DE DIRECCIONAMIENTO
La CPU ofrece varios mtodos para calcular direcciones de memoria. Los accesos a memoria se
pueden categorizar como accesos para obtener la siguiente instruccin a ejecutarse, o para
obtener algn dato especfico. En cuanto a conseguir la siguiente instruccin por ejecutarse, la
CPU utiliza la combinacin de los registros CS e IP, los cuales dan la direccin deseada. Antes de
entrar en detalles sobre las diferentes modalidades de direccionamiento de la memoria para
obtener algn dato especfico, vale la pena aclarar algunos conceptos acerca de lo que es un
segmento, as como de la manera que se forma una direccin.
Los segmentos
La arquitectura del 8086 obliga a usar en combinacin un registro de segmento (CS, DS, ES y SS)
y un desplazamiento, para obtener as la localidad absoluta de algn byte de informacin (ya sea
datos o instrucciones) dentro de la memoria (puede ser RAM o ROM). Dichos segmentos sirven
como los separadores de una carpeta: se puede dividir la carpeta en varios temas (mediante
separadores) y tener cierta cantidad de hojas por tema. En el caso del 8086, la cantidad de hojas
se traduce en cantidad de caracteres y su lmite es de 64KB por cada tema o segmento.
Las direcciones
El esquema de direccionamiento que impone la CPU obliga a usar los registros de segmentos en
cada operacin. El 8086 tiene un bus de direcciones de 20 bits, debido a que los registros son de
16 bits. Cada direccin de memoria se divide en dos partes: el segmento y el desplazamiento
dentro del segmento (cada uno de 16 bits). En notacin hexadecimal se tendra SSSS:DDDD
donde SSSS representa el registro de segmento seguido de dos puntos y del desplazamiento
representada por DDDD.
Clculo de una direccin de memoria
La memoria est dividida en segmento y desplazamiento. Se debe juntarla en una sola direccin
de 20 bits, para ello es necesario aplicar la siguiente formula:
Registro de segmento * 10H + desplazamiento
Por ejemplo:
Si el segmento fuera 2A54H, y el desplazamiento de 0022H, sera:
2A54H * 10H = 2A540H + 0022H = 2A562H
Como slo se tienen 20 bits en el bus de direcciones, es posible que una o ms combinaciones de
segmentos y desplazamientos originen la misma direccin. Tal es el caso del siguiente ejemplo:
2A55H * 10H = 2A550H + 0012H = 2A562H
Direccionamiento Inmediato
MOV AX, 50
Transferencia de un valor directamente, en este caso el 50 al registro AX
1.4.4
1.4.5
CONJUNTO DE INSTRUCCIONES
Son instrucciones que no operan con los datos, nicamente los mueven. La abreviatura
utilizada es MOV. Se especifican dos operandos. El procesador almacena el valor especificado
como primer operando en el lugar especificado como segundo operando.
Operaciones con uno o dos operandos. Se subdividen en dos clases: Aritmticas y lgicas.
Aritmticas: suma (ADD), resta (SUB), multiplicacin (MUL, IMUL), divisin (DIV, IDIV),
incremento (INC), decremento (DEC). Lgicas: conjuncin (AND), disjuncin (OR), negacin
(NOT), desplazamientos con/sin signo (SAL, SAR,SHL, SHR), rotaciones (RCL, RCR, ROL,
ROR). Las operaciones MUL, IMUL, DIV y IDIV tienen operandos implcitos.
Instrucciones de Control:
Instrucciones de Comparacin:
Instrucciones de Salto:
Las instrucciones de salto hacen que el programa pase a ejecutar una instruccin que no es la
siguiente en memoria. Estas instrucciones modifican el registro contador de programa. La
instruccin JMP requiere especificar un nico parmetro que es la direccin de memoria de la
instruccin a ejecutar a continuacin. Las instrucciones de salto condicional reciben un nico
parmetro idntico a la instruccin JMP, pero realizan el salto nicamente si la condicin a la
que hacen referencia se cumple. La condicin se extrae de los bits de condicin almacenados
en el registro de estado y control.
1.4.6
crear el archivo, el archivo fuente es el archivo creado en lenguaje ensamblador que contiene
todas las instrucciones en el formato del ensamblador). La extensin usada en ensamblador para
el acrhivo fuente es .ASM. Este archivo es traducido por el MASM, generalmente como un archivo
intermedio porque an no es ejecutable. El enlazador (LINKER) combina uno o ms archivos .OBJ
para generar el archivo ejecutable, cuya extensin es .EXE (o tambin puede ser .COM,
dependiendo de la forma que se ensamblo).
DESPLAZAMIENTO
TAMAO (BYTES)
CONTENIDO
00H
02H
0AH
Direccin se salida
0EH
12H
80H
81H
127
Lnea de comandos
Los primeros 128 bytes tienen informacin sobre el programa y los otros sobre la lnea de
comandos. La interrupcin 20H hace que el programa se regrese al sistema operativo al trmino
del mismo. La memoria total en prrafos, es la cantidad de memoria que necesita el programa para
ejecutarse, un prrafo, es igual a 16 bytes. La lnea de comandos es la lnea que se teclea al
momento de ejecutar un programa, esta se almacena a partir de la direccin 127, por ejemplo, si
tecleramos en la lnea de comandos (A:\>):
A:\> dir / p
En la direccin 80H habr un 6
81H = d
82H = i
83H = r
84H =
85H = /
86H = p
El manejador Ctrl-C sirve para que al momento de la ejecucin detenemos un programa utilizando
Ctrl-C, se activa y se regresa al sistema operativo. La interrupcin 12H se utiliza cuando se termina
el programa por un error. La estructura del PSP, se crea cuando se ejecuta un programa .COM o
.EXE, pero en realidad, estos tipos de programas son diferentes, veamos cuales son esas
caractersticas:
Programas COM
Los programas .COM tienen que estar en un solo segmento y no pueden ser mayores a 64 KB de
memoria, al momento que se ejecuta un programa .COM, el registro IP siempre apunta a la
direccin 0100H, que es 256 en decimal. Adems todos los programas .COM, tienen una pila, que
nicamente es de 2 bytes de tamao, la cual se utiliza nicamente para almacenar la direccin de
retorno, entonces, si restamos a 65536 que es lo mximo que puede medir un segmento, por lo
tanto, un programa .COM, los 256 bytes del PSP, y los 2 bytes de la pila, tenemos 65278 bytes,
que es la cantidad real en bytes que puede medir un programa de tipo .COM.
Programas EXE
Los programas .EXE, pueden contener uno o ms segmentos, ya sea de datos, de cdigo, y
adems de un segmento de pila, este tipo de programas, pueden comenzar en cualquier direccin,
y esto se indica a travs del registro IP, dentro de estos programas, existe una cabecera, que
contiene toda la informacin sobre el programa, por ejemplo, el nmero de segmentos, donde
comienzan, etc. Al momento de que se empieza a ejecutar un programa EXE, los registros DS, y
ES apuntan al PSP, el registro CS apunta al cdigo, y el registro SP al segmento de pila.
El sistema Operativo, diferencia a un programa EXE y uno COM, tomando los dos primeros bytes
de la cabecera, y si estos son iguales a 5A4DA, entonces este es un programa .EXE, y si esto no
se cumple, entonces es un programa tipo COM.
Formato de un programa
Los programas en ensamblador, pueden ser de dos tipos, uno, que es un formato interno, el cual
se utiliza en la creacin de programas dentro del debug, y un formato externo, el cual se utiliza en
la creacin de programas fuentes, que despus se ensamblaran, enlazaran, y despus se
ejecutaran, sin necesidad del debug. Todas las instrucciones en ensamblador, ya sea en formato
interno, o en formato externo, tienen la forma:
[Etiqueta]: Nemnico Operando [;Comentario]
En donde, la etiqueta y los comentarios son opcionales
Adems de definir ciertas reglas para que el ensamblador pueda entender una instruccin es
necesario darle cierta informacin de los recursos que se van a utilizar, como por ejemplo los
segmentos de memoria que se van a utilizar, datos iniciales del programa y tambin donde inicia y
donde termina nuestro cdigo.
Un programa sencillo puede ser el siguiente:
.MODEL SMALL
.CODE
Programa:
MOV AX,4C00H
INT 21H
.STACK
END Programa
El programa realmente no hace nada, nicamente coloca el valor 4C00H en el registro AX, para
que la interrupcin 21H termine el programa, pero nos da una idea del formato en un programa en
ensamblador.
La directiva .MODEL define el tipo de memoria que se utilizar; la directiva .CODE nos indica que
lo que esta a continuacin es nuestro programa; la etiqueta Programa indica al ensamblador el
inicio del programa; la directiva .STACK le pide al ensamblador que reserve un espacio de
memoria para las operaciones de la pila; la instruccin END Programa marca el final del programa.
Ejemplo prctico de un programa que escribe una cadena en pantalla:
.MODEL SMALL
.CODE
Programa:
MOV AX, @DATA
MOV DS, AX
MOV DX, Offset Texto
MOV AH, 9
INT 21H
MOV AX,4C00H
INT 21H
.DATA
Texto DB 'Mensaje en pantalla.$'
.STACK
END Programa
Los primeros pasos son iguales a los del programa anterior: se define el modelo de memoria, se
indica donde inicia el cdigo del programa y en donde comienzan las instrucciones. A continuacin
se coloca @DATA en el registro AX para despus pasarlo al registro DS ya que no se puede copiar
directamente una constante a un registro de segmento. El contenido de @DATA es el nmero del
segmento que ser utilizado para los datos. Luego se guarda en el registro DX un valor dado por
"Offset Texto" que nos da la direccin donde se encuentra la cadena de caracteres en el segmento
de datos. Luego utiliza la opcin 9 (Dada por el valor de AH) de la interrupcin 21H para desplegar
la cadena posicionada en la direccin que contiene DX. Por ltimo utiliza la opcin 4CH de la
interrupcin 21H para terminar la ejecucin del programa (aunque cargamos al registro AX el valor
4C00H la interrupcin 21H solo toma como opcin el contenido del registro AH).
La directiva .DATA le indica al ensamblador que lo que est escrito a continuacin debe
almacenarlo en el segmento de memoria destinado a los datos. La directiva DB es utilizada para
Definir Bytes, esto es, asignar a cierto identificador (en este caso "Texto") un valor, ya sea una
constante o una cadena de caracteres, en este ltimo caso deber estar entre comillas sencillas ' y
terminar con el smbolo "$".
1.4.7
USO DE PROCEDIMIENTOS