MICROPROCESADORES Y MICROCONTROLADORES...

18
MICROPROCESADORES Y MICROCONTROLADORES 1. MICROPROCESADORES 1.1 INTRODUCCIÓN A LOS MICROPROCESADORES 1.1.1 DEFINICION DEL MICROPROCESADOR 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 inglés; Central Process Unit). En la actualidad en el interior de este componente electrónico existen millones de transistores integrados. Actualmente se dispone de una sección especial para alojarlo dentro de una computadora. El microprocesador está compuesto principalmente por: Registros, la Unidad de Control y la Unidad aritmético-lógica. Unidad Central de Proceso (CPU) Es el "cerebro" de una computadora, de manera más precisa, es la parte de una computadora que se encarga de controlar el proceso y la transferencia de información. La función de la CPU es interpretar las instrucciones de un programa y coordinar su ejecución. La CPU desde que es energizada realiza en forma repetitiva ciclos de instrucción, los cuales se componen de las actividades descritas en la figura 1.1. Figura 1.1 Ciclo básico de instrucción de la CPU Para realizar este ciclo básico, 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 Decodificación de instrucciones (basada en la consulta de una unidad de microcódigo interna a la CPU) Operaciones de tipo aritmético y lógico. 1.1.2 DIFERENCIA ENTRE EL MICROPROCESADOR Y EL MICROCONTROLADOR Microprocesador (μP): Es una CPU en un sólo circuito integrado Microcomputadora (μPC): Es una computadora cuya CPU es un μP Microcontrolador (μC): Es una microcomputadora en un sólo circuito integrado Computadora (PC): Una computadora es un sistema secuencial síncrono programable, la cual para desempeñar sus funciones debe poseer además de la CPU: (1) Conductos para el flujo de la información, (2) Dispositivos para almacenar información y (3) Dispositivos para comunicarse con el exterior

Transcript of MICROPROCESADORES Y MICROCONTROLADORES...

Page 1: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

MICROPROCESADORES Y MICROCONTROLADORES

1. MICROPROCESADORES 1.1 INTRODUCCIÓN A LOS MICROPROCESADORES 1.1.1 DEFINICION DEL MICROPROCESADOR

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 inglés; Central Process Unit). En la actualidad en el interior de este componente electrónico existen millones de transistores integrados. Actualmente se dispone de una sección especial para alojarlo dentro de una computadora. El microprocesador está compuesto principalmente por: Registros, la Unidad de Control y la Unidad aritmético-lógica.

Unidad Central de Proceso (CPU) Es el "cerebro" de una computadora, de manera más precisa, es la parte de una computadora que se encarga de controlar el proceso y la transferencia de información. La función de la CPU es interpretar las instrucciones de un programa y coordinar su ejecución. La CPU desde que es energizada realiza en forma repetitiva ciclos de instrucción, los cuales se componen de las actividades descritas en la figura 1.1.

Figura 1.1 Ciclo básico de instrucción de la CPU Para realizar este ciclo básico, 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 • Decodificación de instrucciones (basada en la consulta de una unidad de microcódigo

interna a la CPU) • Operaciones de tipo aritmético y lógico.

1.1.2 DIFERENCIA ENTRE EL MICROPROCESADOR Y EL MICROCONTROLADOR

Microprocesador (μP): Es una CPU en un sólo circuito integrado

Microcomputadora (μPC): Es una computadora cuya CPU es un μP

Microcontrolador (μC): Es una microcomputadora en un sólo circuito integrado

Computadora (PC): Una computadora es un sistema secuencial síncrono programable, la

cual para desempeñar sus funciones debe poseer además de la CPU: (1) Conductos para el flujo de la información, (2) Dispositivos para almacenar información y (3) Dispositivos para comunicarse con el exterior

Page 2: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

La figura 1.2 muestra en forma esquemática y muy general la estructura de una computadora.

Figura 1.2 Estructura general de una computadora

La figura 1.3 muestra una comparación sencilla entre los microprocesadores y los microcontroladores

Figura 1.3 Comparación entre los microprocesadores y los microcontroladores 1.1.3 TIPOS DE MICROPROCESADORES SEGÚN SU VELOCIDAD Y ANCHO DE

PALABRA

EVOLUCIÓN 1971 Intel fabrica el primer microprocesador (el 4004, figura 1.4) de tecnología PMOS. Este era un microprocesador de 4 bits y fue fabricado por Intel, contenía 2,300 transistores y corría a 108 Khz podía direccionar sólo 4096 (4k) localidades de memoria de 4 bits, reconocía 45 instrucciones y podía ejecutar una instrucción en 20 μseg en promedio.

Figura 1.4 El primer microprocesador (4004) de Intel

1972 Intel desarrolló una versión más poderosa (el 8008), el cual podía manipular bytes completos, por lo cual fue un microprocesador de 8 bits. La memoria que este podía manejar se incrementó a 16 kbytes, sin embargo, la velocidad de operación continuó igual.

Page 3: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

1973 Intel lanza al mercado el 8080 el primer microprocesador de tecnología 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 más poderosos. En ese mismo año, Motorola abate dramáticamente 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 sólo chip, que más tarde se denominarán microcontroladores. Dos de los primeros microcontroladores, son el 8048 de Intel y el 6805R2 de Motorola. 80’s En la década de los 80's comienza la ruptura entre la evolución tecnológica de los microprocesadores y la de los microcontroladores, ya que los primeros han ido incorporando cada vez más y mejores capacidades para las aplicaciones en donde se requiere el manejo de grandes volúmenes de información y por otro lado, los segundos han incorporado más capacidades que les permiten la interacción con el mundo físico en tiempo real, además de mejores desempeños en ambientes de tipo industrial. 90’s En los 90’s aparecen los siguientes microprocesadores como base principal en la construcción 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 año 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

Figura 1.5 El microprocesador Pentium 4 de Intel

Figura 1.6 El microprocesador AMD Athlon 64 X2

• 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

En relación a los microcontroladores, actualmente el mercado de fabricantes se circunscribe en los siguientes: el microcontrolador PIC de Microchip, el ST-62XX de SGS-Thomson o el Z86XX de Zilog. La elección del microcontrolador toma en consideración a las características siguientes: bajo precio, velocidad, reducido consumo, pequeño tamaño, facilidad de uso, fácil programabilidad o la abundancia de información y de herramientas económicas de soporte.

Page 4: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

RESUMEN DE ESPECIFICACIONES TECNICAS (uP’s Intel) (Tabla 1.1)

Fecha de

presentación

Velocidad

de reloj

Ancho

de bus

Número de

transistores

Memoria

direccionable

Memoria

virtual

Breve

descripción

4004 15/11/71 108 KHz. 4 bits 2.300 (10 micras) 640 byte

Primer chip con manipulación aritmética

8008 1/4/72 108 KHz. 8 bits 3.500 16 KBytes Manipulación Datos/texto

8080 1/4/74 2 MHz. 8 bits 6.000 64 KBytes 10 veces las (6 micras) prestaciones del 8008

8086 8/6/78

5 MHz.

8 MHz.

10 MHz.

16 bits29.000

(3 micras) 1 MegaByte

10 veces las prestaciones del 8080

8088 1/6/79 5 MHz.

8 MHz. 8 bits 29.000

Idéntico al 8086 excepto en su bus externo de 8 bits

80286 1/2/82

8 MHz.

10 MHz.

12 MHz.

16 Bits134.000

(1.5 micras) 16 Megabytes 1

Gigabyte

De 3 a 6 veces las prestaciones del 8086

Microprocesador

Intel 386 DX® 17/10/85

16 MHz.

20 MHz.

25 MHz.

33 MHz.

32 Bits275.000

(1 micra) 4 Gigabytes 64

Terabytes

Primer chip x86 capaz de manejar juegos de datos de 32 bits

Microprocesador

Intel 386 SX® 16/6/88

16 MHz.

20 MHz. 16 Bits

275.000

(1 micra) 4 gigabytes

64

Terabytes

Bus capaz de direccionar 16 bits procesando 32bits a bajo coste

Microprocesador

Intel 486 DX® 10/4/89

25 MHz.

33 MHz.

50 MHz.

32 Bits(1 micra, 0.8 micras en 50 MHz.)

4 Gigabytes 64

Terabytes

Caché de nivel 1 en el chip

Microprocesador

Intel 486 SX® 22/4/91

16 MHz.

20 MHz.

25 MHz.

33 MHz.

32 Bits1.185.000

(0.8 micras) 4 Gigabytes

64

Terabytes

Idéntico en diseño al Intel 486DX, pero sin coprocesador matemático

Procesador

Pentium® 22/3/93

60 MHz.

66 MHz.

75 MHz.

90 MHz.

100 MHz.

32 Bits3,1 millones

(0.8 micras) 4 Gigabytes

64

Terabytes

Arquitectura escalable. Hasta 5 veces las prestaciones del 486 DX a 33 MHz.

Tabla 1.1 Especificaciones técnicas de los microprocesadores Intel

Page 5: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

1.2 ARQUITECTURA DEL MICROPROCESADOR Arquitectura Von Newmann Tradicionalmente los microprocesadores se basan en la estructura de Von Neumann (figura 1.7), que se caracteriza por disponer de una única memoria principal en la que se almacenan los datos y las instrucciones. A esta memoria se accede a través de un sistema de buses único:

• Bus de datos. La CPU necesita interactuar de alguna manera con su entorno (memoria y puertos). Esto lo realiza mediante un conjunto de líneas paralelas llamadas bus externo de datos.

• Bus de direcciones. Para poder accesar a localidades de memoria es necesario generar una dirección. Dicha dirección es generada por la CPU y puesta en el bus llamado bus de direcciones. El tamaño del bus de direcciones determina el máximo de memoria accesible.

• Bus de control. Organiza y redirige la información hacia el bus pertinente para la información que se tiene que transmitir.

Figura 1.7 Arquitectura Von Newmann

Arquitectura Harvard El modelo Harvard, representado en la figura 1.8, dispone de dos memorias:

• Memoria de datos • Memoria de Programa

Además cada memoria dispone de su respectivo bus, lo que permite, que la CPU pueda acceder de forma independiente y simultánea a la memoria de datos y a la de instrucciones. Como los buses son independientes éstos pueden tener distintos contenidos en la misma dirección.

Page 6: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

Figura 1.8 Arquitectura Harvard Arquitectura Ortogonal Cualquier instrucción 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 ejecución 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, están implementados físicamente como registros.

1.3 CONEXIONES DEL MICROPROCESADOR 1.3.1 MEMORIA 1.3.2 PERIFERICOS (INTERFASE PROGRAMABLE 8255, INTERRUPCIONES

PROGRAMABLES 8259, COMUNICACIÓN SERIAL)

Page 7: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

1.4 LENGUAJE ENSAMBLADOR

Introducción El lenguaje ensamblador es un conjunto de Mnemónicos para representar las instrucciones que puede realizar una computadora. Además, es una variante legible para el ser humano del lenguaje máquina que usan las computadoras para ejecutar programas. Al mismo tiempo es la mejor manera que se tiene para comunicarse con la PC (también conocida como microcomputadora) y con el lenguaje de programación 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 demás lenguajes de programación.

Ventajas y desventajas Aunque cualquier lenguaje de programación ofrece facilidades para realizar determinadas tareas, ninguno proporciona un control absoluto con la PC, ni información fundamental de lo que sucede mientras el programa se ejecuta.

• El ensamblador le brinda la oportunidad de conocer más a fondo la operación de la PC. • El ensamblador, brinda la oportunidad de conservar el control total de lo que deberá hacer

la PC, siempre y cuando ésta sea físicamente capaz de hacerlo. • Los programas en ensamblador son más rápidos, más compactos y tienen mayor

capacidad que los creados en otros lenguajes. • Se puede optimizar al máximo sus programas (tanto en tamaño, como en velocidad de

ejecución). En el caso de otros lenguajes ya existe código que se genera de una manera predefinida, haciendo muy difícil su optimización.

Ahora que se ha visto las diferencias entre lenguajes, también es justo señalar los problemas de trabajar con el ensamblador

• El primero es que una instrucción mal interpretada o un error de lógica en el programa, pueden crear un caos, a tal grado de que será necesario apagar y encender la PC.

• El segundo problema es que la insuficiencia de conocimientos sobre el funcionamiento interno de la PC puede causar efectos impredecibles.

• Es necesario ajustarse a una convención respecto al uso de interrupciones. • El programa es más complejo conforme se le agregan rutinas o funciones adicionales.

1.4.1 REGISTROS Y CONJUNTO DE INSTRUCCIONES

Se le llama conjunto de instrucciones a la cantidad de instrucciones validas que puede ejecutar la CPU. Generalmente se tienen dos categorías de instrucciones, dependiendo de la CPU diseñada. La primera se denomina RISC (Reduced Instruction Set Computer; Computadora con un conjunto reducido de instrucciones). Este tipo de CPU está diseñado para ejecutar un conjunto de instrucciones muy pequeño, y deja la carga de lo que se considera instrucciones de alto nivel al programador. Un ejemplo de tales instrucciones de alto nivel, sería la multiplicación de dos operandos en una sola instrucción (MUL AX, BX). En el caso de la CPU tipo RISC, el programador carga con la tarea de implementar la instrucción anterior usando instrucciones de más bajo nivel proporcionadas por la misma CPU. Estas CPU permiten que la misma CPU sea optimizada vía hardware y le dan la capacidad de ejecutar las instrucciones de su repertorio en forma más eficiente y rápida. La familia de microprocesadores 80x86 está formada por procesadores tipo CISC (Complex Instruction Set Computer: Computadora con un Conjunto Complejo de Instrucciones), cuya

Page 8: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

orientación es más bien la de ejecutar instrucciones de alto nivel. Algunas familias de microprocesadores se muestran en la tabla 1.2. En la figura 1.9 se presenta uno de lo microprocesadores más recientes.

MicroProcesadores Bus de direcciones (bits)

Bus de datos (bits)

Max direccionamiento en Memoria (Mb)

8086/80186 20 16

1

8088/80188 20 8

1

80286 24 16

16

80386 SX 32 16

16

80386 DX 80486 SX 80486 DX

32 32

4 Gb

PENTIUM PENTIUM II/III/IV AMD K5/K6/K7

AMD ATHLON/THUNDERBIRD AMD ATHLON XP/MP

32 64

16 Gb

INTEL ITANIUM AMD ATHLON64 32/64 64/128

64 Gb

Tabla 1.2. Familia de microprocesadores señalando su capacidad en el bus

Figura 1.9. Procesador Intel® Core™2 Duo

LOS REGISTROSDEL uP 8086

El 8086 tiene 14 registros de 16 bits (Figura 1.10) que sirven para llevar el control de todo lo que sucede dentro de la PC. Dichos registros se dividen en categorías de acuerdo con su actividad preponderante. Existen cuatro registros de uso general, dos registros de apuntadores, dos registros índices, cuatro registros de segmento, el registro apuntador de instrucciones, y el registro de banderas.

Page 9: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

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 también 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 práctica, los registros de la CPU generalmente son conocidos por sus nombres propios.

• AX Acumulador. Envía o recibe datos de puertos y para multiplicación y división. • 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 código, 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 información 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 parámetros

• IP Registro de apuntador de siguiente instrucción. Este registro siempre apunta a la siguiente instrucción 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.

Page 10: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

Bit 15 14 13 12 11 10 9 8 7 6 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 sólo 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 podrían manipularlos internamente.

• CF Carry Flag o indicador de acarreo. Normalmente indica que "se lleva algo" después de haber sumado o restado.

• OF Overflow Flag o indicador de desbordamiento. Si después de una operación el resultado no cabe en el tamaño 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 lógicas o aritméticas 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 dirección. 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 ejecución paso a paso).

1.4.2 DECLARACION DE SEGMENTOS

Un segmento es un área especial de un programa que inicia en un límite de un párrafo, un segmento en modo real puede ser de hasta 64K. Para direccionar un segmento se usan los registros de direccionamiento de segmentos. Los tres segmentos principales son los segmentos de código, de datos, y de la pila. Estos segmentos se ilustran en la figura 1.11. Segmento de código: Contiene las instrucciones de máquina que son ejecutadas. Para direccionar este segmento se usa el registro CS. Segmento de Pila: La pila contiene los datos y direcciones que se necesitan guardar temporalmente. Este segmento se direcciona con el registro SS. Segmento de datos: Este segmento contiene datos, constantes y áreas de trabajo definidos por el programa, este segmento es direccionado por el registro por el registro DS. Existen otros registros de direccionamiento de segmento como el ES (segmento extra) el FS y el GS que tienen usos especializados. Registros de Segmento

Figura 1.11 Segmentos de los uP’s Intel

Dirección Dirección Dirección

SS DS CS

Segmento de la pila Segmento de datos Segmento de código MEMORIA

Page 11: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

1.4.3 MODOS DE DIRECCIONAMIENTO

La CPU ofrece varios métodos para calcular direcciones de memoria. Los accesos a memoria se pueden categorizar como accesos para obtener la siguiente instrucción a ejecutarse, o para obtener algún dato específico. En cuanto a conseguir la siguiente instrucción por ejecutarse, la CPU utiliza la combinación de los registros CS e IP, los cuales dan la dirección deseada. Antes de entrar en detalles sobre las diferentes modalidades de direccionamiento de la memoria para obtener algún dato específico, vale la pena aclarar algunos conceptos acerca de lo que es un segmento, así como de la manera que se forma una dirección. Los segmentos La arquitectura del 8086 obliga a usar en combinación un registro de segmento (CS, DS, ES y SS) y un desplazamiento, para obtener así la localidad absoluta de algún byte de información (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 límite 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 operación. El 8086 tiene un bus de direcciones de 20 bits, debido a que los registros son de 16 bits. Cada dirección de memoria se divide en dos partes: el segmento y el desplazamiento dentro del segmento (cada uno de 16 bits). En notación hexadecimal se tendría SSSS:DDDD donde SSSS representa el registro de segmento seguido de dos puntos y del desplazamiento representada por DDDD. Cálculo de una dirección de memoria La memoria está dividida en segmento y desplazamiento. Se debe juntarla en una sola dirección 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, sería: 2A54H * 10H = 2A540H + 0022H = 2A562H Como sólo se tienen 20 bits en el bus de direcciones, es posible que una o más combinaciones de segmentos y desplazamientos originen la misma dirección. Tal es el caso del siguiente ejemplo: 2A55H * 10H = 2A550H + 0012H = 2A562H Modos de direccionamiento. Es la forma en que una instrucción obtiene los operandos requeridos por medio de cualquier instrucción en ensamblador, para explicarlos, utilizaremos como ejemplo la instrucción "MOV destino, origen", que transfiere datos desde el origen al destino.

• Direccionamiento Inmediato MOV AX, 50 Transferencia de un valor directamente, en este caso el 50 al registro AX

Page 12: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

• Direccionamiento Directo. Un valor de 16 bits forma parte de la instrucción y es interpretado como un acceso a la memoria. que será movida al registro BX. MOV BX, Cuenta Transferencia del valor de la variable cuenta al registro BX Cuenta es una localidad de memoria que tiene alguna información

• Direccionamiento de Registro a Registro. En esta modalidad, solamente se realiza una copia del registro fuente al registro destino, dejando intacto el primero. MOV AX, BX Transfiere el contenido del registro BX al registro AX

• Direccionamiento Indirecto. Trae un valor de memoria a un registro o viceversa, pero primero se tiene que meter un registro (BX, SI, DI o BP), después pasarlo a otro registro. MOV BX, 1047H MOV AX, [BX] (Es el registro que tiene la dirección que se quiere obtener el valor, este debe ir entre corchetes) Si usamos los registros DX, SI, DI, tenemos que combinarlos con el registro DS, y si usamos el registro SP, hay que combinarlo con SS. Los corchetes indican que se trata de una referencia a memoria, y por lo tanto que debe interpretarse como el contenido de la dirección especificada.

• Direccionamiento de Base. Solo se pueden utilizar (BX o BP) es similar al anterior. MOV AX, [BX + 4] o también MOV AX, [BX][4]

• Direccionamiento Indexado. Solo se pueden utilizar los registros SI o DI MOV AX, [SI + 7] o también MOV AX, [SI][7]

• Direccionamiento Indexado de Base MOV AX, [BX + SI]

MOV AX, [BX][SI] El desplazamiento indicado por el registro BX, se toma en función al segmento DS, y el desplazamiento indicado por el registro BP se toma en función al registro de segmento SS. Cuando se usa el registro BP, debe incluirse un segundo operando, ya sea un índice o un operando inmediato. Por ejemplo: MOV AX, [BP] Será ensamblada como: MOV AX, [BP + 0].

1.4.4 CONTROL DE DISPOSITIVOS DE ENTRADA/SALIDA

Page 13: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

1.4.5 CONJUNTO DE INSTRUCCIONES

Instrucciones de Movimiento de Datos: 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.

Instrucciones Aritméticas y Lógicas:

Operaciones con uno o dos operandos. Se subdividen en dos clases: Aritméticas y lógicas. Aritméticas: suma (ADD), resta (SUB), multiplicación (MUL, IMUL), división (DIV, IDIV), incremento (INC), decremento (DEC). Lógicas: conjunción (AND), disjunción (OR), negación (NOT), desplazamientos con/sin signo (SAL, SAR,SHL, SHR), rotaciones (RCL, RCR, ROL, ROR). Las operaciones MUL, IMUL, DIV y IDIV tienen operandos implícitos.

Instrucciones de Control:

Otra parte importante de un programa es el control de la secuencia de instrucciones. El procesador debe permitir la ejecución no secuencial de instrucciones. Este mecanismo se basa en dos tipos de instrucciones: comparación y salto. La secuencia habitual para alterar el flujo de ejecución es opcionalmente comprobar una condición y realizar un salto a un lugar diferente del código.

Instrucciones de Comparación:

Los códigos de condición se almacenan el registro de estado y control del procesador y se actualizan con la ejecución de cada instrucción. Ejemplo: Si se ejecuta la instrucción equivalente a t = a + b. Los códigos de condición se modifican de la siguiente forma. • CF: Se ha producido acarreo en la suma considerando los operandos como números naturales. • ZF: t = 0 • SF: t < 0 • OF: Se ha producido overflow en la suma. El procesador posee instrucciones específicas que sólo modifican los códigos de condición pero no se guarda el resultado.

Instrucciones de Salto:

Las instrucciones de salto hacen que el programa pase a ejecutar una instrucción que no es la siguiente en memoria. Estas instrucciones modifican el registro contador de programa. La instrucción JMP requiere especificar un único parámetro que es la dirección de memoria de la instrucción a ejecutar a continuación. Las instrucciones de salto condicional reciben un único parámetro idéntico a la instrucción JMP, pero realizan el salto únicamente si la condición a la que hacen referencia se cumple. La condición se extrae de los bits de condición almacenados en el registro de estado y control. 1.4.6 ESQUELETO DE UN PROGRAMA (FORMATO EN LENGUAJE ENSAMBLADOR)

La programación en lenguaje ensamblador, necesita al menos tres herramientas: un editor de texto para crear el archivo fuente, un compilador para convertirlo en archivo objeto (masm) y un enlazador (linker) para gererar finalmente el programa ejecutable. Una cuarta herramienta sería el depurador y en caso necesario corregir el programa ejecutable (Figura 1.12). Se puede usar cualquier editor de texto, el compilador (llamado ensamblador ) es el MASM ( por Macro Assembler Microsoft) y el enlazador es el programa LINK. Al utilizar el editor de texto para

Page 14: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

crear el archivo, el archivo fuente es el archivo creado en lenguaje ensamblador que contiene todas las instrucciones en el formato del ensamblador). La extensión usada en ensamblador para el acrhivo fuente es .ASM. Este archivo es traducido por el MASM, generalmente como un archivo intermedio porque aún no es ejecutable. El enlazador (LINKER) combina uno o más archivos .OBJ para generar el archivo ejecutable, cuya extensión es .EXE (o también puede ser .COM, dependiendo de la forma que se ensamblo).

Figura 1.12 Diagrama del proceso de procedimiento de programación en ensamblador

Utilización del MASM

Una vez creado el archivo fuente, es necesario que pase por el MASM para generar el archivo intermedio (formato OBJ). El comando para ello es el MASM archivo; seguido por la tecla [Enter]. MASM es el nombre del macroensamblador, archivo es el nombre del programa (sin extensión), y el signo; le especifica al MASM que ensamble directamente el programa. Ejemplo:

MASM Prueba; Suponiendo que el nombre del programa sea prueba. Si se omitiese el punto y coma, MASM respondería con lo siguiente:

Source filename [.ASM] Prueba [Enter] Object filename [prueba.obj] [Enter] Source listing [NUL.LST] [Enter] Cross-reference [NUL.CRF] [Enter]

Masm pondrá entre corchetes la respuesta que considere correcta. La opción Source Listing (listado fuente ) permite generar un archivo que contendrá linea por línea el código máquina (en notación hexadecimal) generado y la línea de su código fuente, También contiene ingformación adicional, por ejemplo los símbolos usados en el programa y los diferentes segmentos. El nombre NUL.LST usado por MASM indica que usted no desea dicho listado. La opción Cross-reference (referencias recíprocas) contiene información sobre cada símbolo de su código fuente, mostrando el número de línea donde fue declarado y todas las líneas que hacen referencia a él. De nuevo, el nombre NUL.CRF indica que tampoco desea generar dicho listado.

Todo parámetro va despues del simbolo "/". Es posible utilizar varios parámetros a la vez. Una vez tecleados todos los parámetros se escribe el nombre del archivo a ensamblar. Por ejemplo, si queremos que el MASM ensamble un programa llamado prueba, y además deseamos que despliegue el número de líneas fuente y símbolos procesados (eso lo realiza con el parámetro /v), y si ocurre un error que nos diga en que línea ocurrió (con el parámetro /z), entonces tecleamos:

MASM /v /z prueba;

Cuando se usa el code view para visualizar, ejecutar y depurar un archivo, se debe ensamblar el archivo fuente, de la siguiente forma:

MASM /zi prueba;

Page 15: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

Usando el enlazador (linker)

El MASM traduce (ensambla) el archivo de código fuente a otro de formato .OBJ. Sin embargo, MS-DOS no puede ejecutar este último archivo. Primero es necesario pasar el archivo .OBJ por otro proceso que definirá muchos detalles y generará el archivo ejecutable; dicho proceso es realizado por el Enlazador. El comando para invocar al enlazador, tiene similitud con el que se usa para invocar al MASM. Simplemente digite LINK archivo + (otros archivos .OBJ o librerías); por ejemplo, el comando Link prueba; generará el archivo PRUEBA.EXE.

Para ampliar el concepto anterior, suponga que tiene dos archivos con extensión .OBJ: prueba1.obj y prueba2.obj y que además desea mezclar los dos archivos anteriores con una biblioteca de gráficos llamada bibliogr.lib. Usando el enlazador para generar el programa ejecutable, se utilizará el siguiente comando:

Link prueba1 + prueba2 + bibliogr; Tome en cuenta que en la línea para comandos, el primer archivo siempre debe ser el principal; es decir, el que controlará la secuencia de eventos. El objetivo de enlazar todos los archivos .OBJ es poder generar un solo archivo ejecutable con la extensión .EXE. En el ejemplo anterior, se generará el archivo Prueba1.Exe.

Como se ejecutan los programas en dos Los programas con extension .COM y .Exe, tienen una estructura diferente, al momento en que estos programas se ejecutan, el sistema operativo, crea una estructura que se almacena en memoria llamada PSP (Program Segment Prefix) de 256 bytes de tamaño, esta estructura contiene alguna de la siguiente información:

DESPLAZAMIENTO TAMAÑO (BYTES) CONTENIDO

00H 2 Llamada a la interrupción 20H

02H 2 Memoria total en párrafos

0AH 4 Dirección se salida

0EH 4 Dirección del manejador Ctrl-C

12H 4 Dirección del manejador de errores

80H 1 Longitud de línea de comandos

81H 127 Línea de comandos

Los primeros 128 bytes tienen información sobre el programa y los otros sobre la línea de comandos. La interrupción 20H hace que el programa se regrese al sistema operativo al término del mismo. La memoria total en párrafos, es la cantidad de memoria que necesita el programa para ejecutarse, un párrafo, es igual a 16 bytes. La línea de comandos es la línea que se teclea al momento de ejecutar un programa, esta se almacena a partir de la dirección 127, por ejemplo, si tecleáramos en la línea de comandos (A:\>):

A:\> dir / p En la dirección 80H habrá un 6

Page 16: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

81H = ‘d’ 82H = ‘i’ 83H = ’r’ 84H = ’ ‘ 85H = ‘/’ 86H = ‘p’

El manejador Ctrl-C sirve para que al momento de la ejecución detenemos un programa utilizando Ctrl-C, se activa y se regresa al sistema operativo. La interrupción 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 características:

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 dirección 0100H, que es 256 en decimal. Además todos los programas .COM, tienen una pila, que únicamente es de 2 bytes de tamaño, la cual se utiliza únicamente para almacenar la dirección de retorno, entonces, si restamos a 65536 que es lo máximo 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 más segmentos, ya sea de datos, de código, y además de un segmento de pila, este tipo de programas, pueden comenzar en cualquier dirección, y esto se indica a través del registro IP, dentro de estos programas, existe una cabecera, que contiene toda la información sobre el programa, por ejemplo, el número 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 código, y el registro SP al segmento de pila.

Page 17: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

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 creación de programas dentro del debug, y un formato externo, el cual se utiliza en la creación de programas fuentes, que después se ensamblaran, enlazaran, y después se ejecutaran, sin necesidad del debug. Todas las instrucciones en ensamblador, ya sea en formato interno, o en formato externo, tienen la forma:

[Etiqueta]: Nemónico Operando [;Comentario]

En donde, la etiqueta y los comentarios son opcionales

• Las etiquetas, no deben tener más de 31 caracteres, pueden contener letras y números, o cualquiera de los caracteres @, $,=, _ y ?, deben empezar con una letra, @ o _.

• Los nemónicos es el único que obligatoriamente debe estar en una sola línea, y en realidad, un nemónico es una instrucción en ensamblador.

• Los operandos dependen del nemónico, y pueden ser ninguno, uno o varios operandos, estos únicamente pueden tener hasta 31 caracteres, y estos pueden ser variables, registros, direcciones de memoria, etc.

• Los comentarios van después del punto y coma, y sirven para hacer más claro el funcionamiento de un programa o la explicación de las instrucciones, en caso de que no exista comentario, no es necesario el punto y coma.

Además de definir ciertas reglas para que el ensamblador pueda entender una instrucción es necesario darle cierta información 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 también donde inicia y donde termina nuestro código. 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 interrupción 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 continuación 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 instrucción END Programa marca el final del programa. Ejemplo práctico de un programa que escribe una cadena en pantalla: .MODEL SMALL .CODE

Page 18: MICROPROCESADORES Y MICROCONTROLADORES …sites.google.com/site/hectorhdeleon/ApuntesuP_uC_Unidad1.pdf · microprocesador está compuesto principalmente por: ... Intel desarrolló

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 código del programa y en donde comienzan las instrucciones. A continuación se coloca @DATA en el registro AX para después pasarlo al registro DS ya que no se puede copiar directamente una constante a un registro de segmento. El contenido de @DATA es el número 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 dirección donde se encuentra la cadena de caracteres en el segmento de datos. Luego utiliza la opción 9 (Dada por el valor de AH) de la interrupción 21H para desplegar la cadena posicionada en la dirección que contiene DX. Por último utiliza la opción 4CH de la interrupción 21H para terminar la ejecución del programa (aunque cargamos al registro AX el valor 4C00H la interrupción 21H solo toma como opción el contenido del registro AH). La directiva .DATA le indica al ensamblador que lo que está escrito a continuación 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 símbolo "$".

1.4.7 USO DE PROCEDIMIENTOS