Un. VIII. Generación de Código Objeto

Documentos relacionados
Los registros son la memoria principal de la computadora. Existen diversos registros de propósito general y otros de uso exclusivo.

Arquitectura (Procesador familia 80 x 86 )

Estructura de Computadores: Tema 1. Introducción. Índice. Arquitectura del i8086

Programación en lenguaje ensamblador. Instrucciones básicas. Formatos. Direccionamientos

Arquitectura Interna del 8088

1.2.- EL MICROPROCESADOR.

ARQUITECTURA INTERNA DEL µp8086

Tema: Lenguaje ensamblador embebido

6-REGISTROS DEL 8086 Y DEL 80286

Tema 1. Fundamentos del lenguaje ensamblador

Cuadro Comparativo Registros de Microprocesadores

Objetivo. Introducción. Tema: GENERACION DE CODIGO. Compiladores, Guía 11 1

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

Universidad Nacional de Ingeniería Arquitectura de Maquinas I. Unidad I: Arquitectura y Programación de un Microprocesador (8086)

TEMA 1. PROGRAMACIÓN DE UN COMPUTADOR

Contenidos. Arquitectura de ordenadores (fundamentos teóricos) Elementos de un ordenador. Periféricos

Examen de teoría (5 puntos)

El Diseño de un Lenguaje Máquina

UNIVERSIDAD NACIONAL DE INGENIERIA RECINTO UNIVERSITARIO SIMON BOLIVAR FACULTAD DE ELECTROTECNIA Y COMPUTACION

Tema 6. Segmentación y modos de direccionamiento

Tema 2: Lenguaje máquina. La interfaz entre el hardware y el software

El nivel ISA (II)! Conjunto de Instrucciones

FUNCIONAMIENTO DEL ORDENADOR

Introducción al EMU8086

Examen de teoría (5 puntos)

GUIA 24: REPERTORIO DE INSTRUCCIONES

TEMA VI DISEÑO DEL PROCESADOR

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

ÍNDICE CAPÍTULO 1 FUNDAMENTOS DE LOS MICROCONTROLADORES

Microprocesador. Introducción. Instituto Sagrado Corazón de Jesús

Organización de Computadoras. Clase 7

Unidad Nº II Capacidad de la unidad central. de procesamiento. Instituto Universitario Politécnico. Santiago Mariño

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

Repaso concepto de programa

UNIVERSIDAD NACIONAL DE COLOMBIA SEDE BOGOTÁ FACULTAD DE INGENIERÍA INGENIERÍA MECATRÓNICA

UNIDAD 1.- INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR. Alumno: Oliver Garibo Urias

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

USO DE MEMORIA Y PERIFÉRICOS CON EMU8086. Kervin Sánchez Herrera.

Arquitectura del MIPS: Introducción

Unidad IV: Programación de microcontroladores

UNIDAD I CONCEPTOS GENERALES. Conceptos Generales Microprocesadores Otoño 2011

SISTEMAS OPERATIVOS Arquitectura de computadores

Tema 4. Lenguaje máquina y lenguaje ensamblador

Arquitectura del CPU. Organización del Computador 1 Verano 2016

La arquitectura del 8086/8088

FUNCIONAMIENTO DE LA UNIDAD DE CONTROL DEL PROCESADOR

EVOLUCIÓN HISTÓRICA DE LOS µp

Arquitectura de Computadores

Unidad I: Organización del Computador. Ing. Marglorie Colina

1.2.-Analisis de los componentes

Todos los comandos de DEBUG se invocan usando una sola letra y son los siguientes:

Sistema Operativo. Repaso de Estructura de Computadores. Componentes Hardware. Elementos Básicos

Tema: Microprocesadores

Registros Arquitectura x86. M. en C. Erika Vilches

Tema 5: La pila, las macros y los procedimientos

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Funcionamiento del 8086/8088

Unidad 5 Unidad central de proceso

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

Conceptos de Arquitectura de Computadoras Curso 2015

Arquitectura de Computadoras

Fecha de Introducción. Velocidad de reloj. Anchura del bus. Número de transistores. (microns) Memoria direccionable.

Ensamblador. Introducción. Dpto. Física y Arquitectura de Computadores. Universidad Miguel Hernandez

APUNTES DE LENGUAJE ENSAMBLADOR APÉNDICE B DEBUG

Arquitectura de Computadoras

Estructuras de Control

Tema 2: Conceptos básicos. Escuela Politécnica Superior Ingeniería Informática Universidad Autónoma de Madrid

Tema 2 INSTRUCCIONES DE UN COMPUTADOR. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

Introducción a la arquitectura de computadores

Conceptos y definiciones básicos en computación

ENSAMBLADOR. M.C. Laura Cuayahuitl Romero MODO DE DIRECCIONAMIENTO DIRECTO

Universidad Nacional de Ingeniería Arquitectura de Maquinas I. Unidad II: Arquitectura y Programacion de un Microprocesador (80X86)

Estructura de los sistemas de cómputo

8 ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES I

Práctica 5 - Memoria Cache

PROBLEMAS TEMA 1: Estructuras de interconexión de un computador

Intel Departamento de Arquitectura 1. Facultad de Ingeniería Universidad de la República. Arquitectura de Computadoras, 2016

ARQUITECTURA SPARC: FORMATO DE INSTRUCCIÓN

Introducción a los microcontroladores. Decanato de Postgrado Mayo de 2011

Examen de teoría (4 puntos)

Ejercicios del tema 4. El procesador

Tecnologías, Organización y Microarquitectura

Computadora y Sistema Operativo

5 - Lenguaje Ensamblador

UNIDAD CENTRAL DE PROCESO

CUESTIONARIO. Instituto Tecnológico de Iztapalapa Ingeniería en Sistemas computacionales. LENGUAJE ENSAMBLADOR Temas: 1.3 y 1.4

PROBLEMAS DE ESTRUCTURA DE LOS COMPUTADORES LENGUAJE MÁQUINA Y ENSAMBLADOR

TEMA III: OPERACIONES CON LOS DATOS

UNIVERSIDAD AUTÓNOMA DE SAN LUIS POTOSÍ FACULTAD DE CIENCIAS

ARQUITECTURA DE VON NEUMANN Y HARVARD

Instituto Tecnológico de Morelia

Tema 5.1: Presentación de datos en pantalla

Transcripción:

Un. VIII. Generación de Código Objeto 8.1 Lenguaje Máquina Es el que proporciona poca o ninguna abstracción del microprocesador de un ordenador. El lenguaje máquina solo es entendible por las computadoras. Se basa en una lógica binaria de 0 y 1, generalmente implementada por mecanismos eléctricos. En general el lenguaje maquina es difícil de entender para los humanos por este motivo hacemos uso de lenguajes más parecidos a los lenguajes naturales. 8.1.1 Características El lenguaje máquina realiza un conjunto de operaciones predeterminadas llamadas micro operaciones. Las micro operaciones sólo realizan operaciones del tipo aritmética (+,-,*,/), lógicas (AND, OR, NOT) y de control (secuencial, de control y repetitiva). El lenguaje maquina es dependiente del tipo de arquitectura. Así un programa máquina para una arquitectura Intel x86 no sé ejecutara en una arquitectura Power PC de IBM (al menos de manera nativa). Algunos microprocesadores implementan mas funcionalidades llamado CISC, pero son más lentos que los RISC ya que estos tienen registros más grandes. Ventajas Mayor adaptación al equipo. Máxima velocidad con mínimo uso de memoria. Desventajas Imposibilidad de escribir código independiente de la máquina. Mayor dificultad en la programación y en la comprensión de los programas. El programador debe conocer más de un centenar de instrucciones. Es necesario conocer en detalle la arquitectura de la máquina. 8.1.2 Direccionamiento Es la forma en cómo se accede a la memoria. Recordar que un programa no puede ejecutarse sino se encuentra en memoria principal. La forma de acceder a la memoria depende del microprocesador, pero en general existen dos tipos de direccionamiento: directo e indirecto. El direccionamiento directo también recibe el nombre de direccionamiento absoluto y el acceso a las direcciones se hace de manera directa.

El direccionamiento indirecto también recibe el nombre de direccionamiento relativo y se basa a partir de una dirección genérica, generalmente el inicio del programa. Para acceder a una dirección relativa se suma a la dirección base el número de espacios de memorias necesarias. El direccionamiento relativo hace a los programas relocalizables e independientes. Si la dirección base es el inicio de la memoria fija el direccionamiento pasa a ser un variante de direccionamiento absoluto. 8.2 Lenguaje Ensamblador El ensamblador (del inglés assembler) es un traductor de un código de bajo nivel a un código, ejecutable directamente por la máquina para la que se ha generado. 8.2.1 Características El programa lee un archivo escrito en lenguaje ensamblador y sustituye cada uno de los códigos mnemotécnicos por su equivalente código máquina. Los programas se hacen fácilmente portables de máquina a máquina y el cálculo de bifurcaciones se hace de manera fácil. Clasificación Ensambladores básicos: Son de muy bajo nivel, y su tarea consiste básicamente, en ofrecer nombres simbólicos a las distintas instrucciones, parámetros y cosas tales como los modos de direccionamiento. Ensambladores modulares, o macro ensambladores: Descendientes de los ensambladores básicos, fueron muy populares en las décadas de los 50 y los 60, fueron antes de la generalización de los lenguajes de alto nivel. Un macroinstrucción es el equivalente a una función en un lenguaje de alto nivel. 8.2.2 Almacenamiento Una de las principales ventajas del uso del ensamblador, es que se encarga de administrar de manera transparente para el usuario la creación de memoria, las bifurcaciones y el paso de parámetros. Además nos permite acceder directamente a los recursos de la máquina para un mejor desempeño.

8.3 Registros Los registros son la memoria principal de la computadora. Existen diversos registros de propósito general y otros de uso exclusivo. Algunos registros de propósito general son utilizados para cierto tipo de funciones. Existen registros acumuladores, puntero de instrucción, de pila, etc. 8.3.1 Distribución. La UCP o CPU tiene 14 registros internos, cada uno de ellos de 16 bits (una palabra). Los bits están enumerados de derecha a izquierda, de tal modo que el bit menos significativo es el bit 0. Los registros se pueden clasificar de la siguiente forma: Registros de datos: AX: Registro acumulador. Es el principal empleado en las operaciones aritméticas. BX: Registro base. Se usa para indicar un desplazamiento. CX: Registro contador. Se usa como contador en los bucles. DX: Registro de datos. También se usa en las operaciones aritméticas. Estos registros son de uso general y también pueden ser utilizados como registros de 8 bits, para utilizarlos como tales es necesario referirse a ellos como por ejemplo: AH y AL, que son los bytes alto (high) y bajo (low) del registro AX. Esta nomenclatura es aplicable también a los registros BX, CX y DX. Registros de segmentos: CS: Registro de segmento de código. Contiene la dirección de las instrucciones del programa. DS: Registro segmento de datos. Contiene la dirección del área de memoria donde se encuentran los datos del programa. SS: Registro segmento de pila. Contiene la dirección del segmento de pila. La pila es un espacio de memoria temporal que se usa para almacenar valores de 16 bits (palabras). ES: Registro segmento extra. Contiene la dirección del segmento extra. Se trata de un segmento de datos adicional que se utiliza para superar la limitación de los 64Kb del segmento de datos y para hacer transferencias de datos entre segmentos.

Registros punteros de pila: SP: Puntero de la pila. Contiene la dirección relativa al segmento de la pila. BP: Puntero base. Se utiliza para fijar el puntero de pila y así poder acceder a los elementos de la pila. Registros índices: SI: Índice fuente. DI: Índice destino. Puntero de instrucciones: IP: Registro puntero de instrucción o contador de programa (PC). Contiene el desplazamiento de la siguiente instrucción a ejecutar respecto al segmento de código en ejecución. Por lo tanto, la dirección completa de la siguiente instrucción sería CS:IP. La única forma de influir en este registro es de forma indirecta mediante instrucciones de bifurcación. Registro de banderas (flags): Cada bandera es un bit y se usa para registrar la información de estado y de control de las operaciones del microprocesador. Hay nueve banderas (los 7 bits restantes no se utilizan): Banderas de estado: Registran el estado del procesador, normalmente asociado a una comparación o a una instrucción aritmética. CF: Bandera de acareo. OF: Bandera de desbordamiento (aritmético). ZF: Bandera de resultado 0 o comparación igual. SF: Bandera de resultado o comparación negativa. PF: Bandera de paridad (número par de bits). AF: Bandera auxiliar. Indica si hay necesidad de ajuste en las operaciones aritméticas con números BCD. Banderas de control: DF: Bandera de dirección. Controla la dirección de las operaciones con cadenas de caracteres incrementando o decremento automáticamente los registros índices (SI y DI). IF: Bandera de interrupciones. Indica si están permitidas o no las interrupciones de los dispositivos externos. TF: Bandera de atrape. Controla la operación de modo paso a paso (usada por el programa DEBUG).

8.3.2 Asignación. La arquitectura de los procesadores x86 obliga al uso de segmentos de memoria para manejar la información, el tamaño de estos segmentos es de 64kb. La razón de ser de estos segmentos es que, considerando que el tamaño máximo de un número que puede manejar el procesador esta dado por una palabra de 16 bits o registro, no sería posible accesar a más de 65536 localidades de memoria utilizando uno solo de estos registros, ahora, si se divide la memoria de la pc en grupos o segmentos, cada uno de 65536 localidades, y utilizamos una dirección en un registro exclusivo para localizar cada segmento, y entonces cada dirección de una casilla específica la formamos con dos registros, nos es posible acceder a una cantidad de 4294967296 bytes de memoria, lo cual es, en la actualidad, más memoria de la que veremos instalada en una PC. Para que el ensamblador pueda manejar los datos es necesario que cada dato o instrucción se encuentren localizados en el área que corresponde a sus respectivos segmentos. El ensamblador accede a esta información tomando en cuenta la localización del segmento, dada por los registros DS, ES, SS y CS, y dentro de dicho registro la dirección del dato específico. Es por ello que cuando creamos un programa empleando el Debug en cada línea que vamos ensamblando aparece algo parecido a lo siguiente: 1CB0:0102 MOV AX, BX En donde el primer número, 1CB0, corresponde al segmento de memoria que se está utilizando, el segundo se refiere a la dirección dentro de dicho segmento, y a continuación aparecen las instrucciones que se almacenaran a partir de esa dirección. La forma de indicarle al ensamblador con cuales de los segmentos se va a trabajar es por medio de las directivas.code,.data y.stack. El ensamblador se encarga de ajustar el tamaño de los segmentos tomando como base el número de bytes que necesita cada instrucción que va ensamblando, ya que sería un desperdicio de memoria utilizar los segmentos completos. Por ejemplo, si un programa únicamente necesita 10kb para almacenar los datos, el segmento de datos únicamente será de 10kb y no de los 64kb que puede manejar.

8.4 Administración de memoria La administración de la memoria es un proceso hoy en día muy importante, de tal modo que su mal o buen uso tiene una acción directa sobre el desempeño de memoria. En general un ensamblador tiene un administrador de memoria más limitado que un compilador; en la mayoría de los lenguajes de programación el uso de punteros no estaba vigilado por lo que se tienen muchos problemas con el uso de memoria. Los lenguajes más recientes controlan el uso de punteros y tienen un programa denominado recolector de basura que se encarga de limpiar la memoria no utilizada mejorando el desempeño.