16
INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ M.S.C. Miguel Martin Millán Jiménez 5 UNIDAD I INTRODUCCION AL LENGUAJE ENSAMBLADOR Introducción Un ensamblador es una aplicación de sistema que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina, entendible por la máquina para la que se ha generado Una PC, es un ordenador o una computadora, como más nos guste, compuesto principalmente por el procesador, chips de memoria, varios chips inteligentes o programables, y el bus de datos y direcciones. Junto con todo esto, nos encontramos los periféricos como son monitor, disqueteras, teclado, etc. que se comunican con el procesador. Una computadora digital o, mejor dicho, su parte física, sólo distingue datos de tipo binario, es decir, constituidos por dos únicos valores a los que se denomina valor 0 y valor 1 y que, físicamente, se materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Para representar datos que contengan una información se utilizan una serie de unos y ceros cuyo conjunto indica dicha información. La información que hace que el hardware de la computadora realice una determinada actividad se llama instrucción. Por consiguiente una instrucción es un conjunto de unos y ceros. Las instrucciones así formadas equivalen a acciones elementales de la máquina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la máquina se denomina lenguaje máquina. Se denomina lenguaje máquina a la serie de datos que la parte física de la computadora o hardware, es capaz de interpretar El lenguaje máquina fue el primero que empleo el hombre para la programación de las primeras computadoras. Una instrucción en lenguaje máquina puede representarse de la siguiente forma: 011011001010010011110110 Esta secuencia es fácilmente ejecutada por la computadora, pero es de difícil interpretación, siendo aun más difícil la interpretación de un programa (conjunto de instrucciones) escrito de esta forma. Esta dificultad hace que los errores sean frecuentes y la corrección de los mismos costosa, cuando no imposible, al igual que la verificación y modificación de los programas. La anterior secuencia de dígitos binarios (bits) puede indicar a la computadora que: <<Traslade el contenido de la posición de memoria X a la posición de memoria Y.>> Si lo vemos escrito de esta forma, lo entenderemos fácilmente, ya que está en nuestro lenguaje natural, pero la máquina elemental será incapaz de entender nada. Vemos, pues, que la forma de indicar a la máquina lo que debe hacer es totalmente diferente de la indicar a un ser humano lo mismo, por lo que deben emplearse sistemas de traducción de una forma a otra. Con la práctica en el manejo de la máquina se cayó en la cuenta de que se podría utilizar la propia máquina para ayudar en la traducción de estos programas. Es decir, que si a una máquina elemental se le dotaba de un programa, también elemental, que tradujera un número determinado de caracteres alfabéticos en una secuencia de unos y ceros, se podría escribir un programa constituido por una secuencia de grupos de caracteres alfabéticos, en la que cada uno de los

Apuntes Unidad 1

Embed Size (px)

DESCRIPTION

Lenguaje de interfas,

Citation preview

Page 1: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 5

UNIDAD I INTRODUCCION AL LENGUAJE

ENSAMBLADOR

Introducción Un ensamblador es una aplicación de sistema que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina, entendible por la máquina para la que se ha generado Una PC, es un ordenador o una computadora, como más nos guste, compuesto principalmente por el procesador, chips de memoria, varios chips inteligentes o programables, y el bus de datos y direcciones. Junto con todo esto, nos encontramos los periféricos como son monitor, disqueteras, teclado, etc. que se comunican con el procesador. Una computadora digital o, mejor dicho, su parte física, sólo distingue datos de tipo binario, es decir, constituidos por dos únicos valores a los que se denomina valor 0 y valor 1 y que, físicamente, se materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Para representar datos que contengan una información se utilizan una serie de unos y ceros cuyo conjunto indica dicha información. La información que hace que el hardware de la computadora realice una determinada actividad se llama instrucción. Por consiguiente una instrucción es un conjunto de unos y ceros. Las instrucciones así formadas equivalen a acciones elementales de la máquina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la máquina se denomina lenguaje máquina. Se denomina lenguaje máquina a la serie de datos que la parte física de la computadora o hardware, es capaz de interpretar El lenguaje máquina fue el primero que empleo el hombre para la programación de las primeras computadoras. Una instrucción en lenguaje máquina puede representarse de la siguiente forma:

011011001010010011110110

Esta secuencia es fácilmente ejecutada por la computadora, pero es de difícil interpretación, siendo aun más difícil la interpretación de un programa (conjunto de instrucciones) escrito de esta forma. Esta dificultad hace que los errores sean frecuentes y la corrección de los mismos costosa, cuando no imposible, al igual que la verificación y modificación de los programas. La anterior secuencia de dígitos binarios (bits) puede indicar a la computadora que:

<<Traslade el contenido de la posición de memoria X a la posición de memoria Y.>> Si lo vemos escrito de esta forma, lo entenderemos fácilmente, ya que está en nuestro lenguaje natural, pero la máquina elemental será incapaz de entender nada. Vemos, pues, que la forma de indicar a la máquina lo que debe hacer es totalmente diferente de la indicar a un ser humano lo mismo, por lo que deben emplearse sistemas de traducción de una forma a otra. Con la práctica en el manejo de la máquina se cayó en la cuenta de que se podría utilizar la propia máquina para ayudar en la traducción de estos programas. Es decir, que si a una máquina elemental se le dotaba de un programa, también elemental, que tradujera un número determinado de caracteres alfabéticos en una secuencia de unos y ceros, se podría escribir un programa constituido por una secuencia de grupos de caracteres alfabéticos, en la que cada uno de los

Page 2: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 6

grupos indicaría una acción a realizar por el ordenador y, una vez escrito el programa, sería la propia máquina la que pasaría los grupos de caracteres a bits. Las ventajas de esto son evidentes, ya que para el hombre resulta más fácil manipular grupos de caracteres y la traducción se haría de manera automática. Por ejemplo, se podría escribir:

TRASLADAR 11010110, 00011101 Esto indicaría que el contenido de la posición 11010110 había que pasarlo a la posición 00011101 si se sabe que al grupo alfabético TRASLADAR le corresponde la secuencia de bits 11110101. La máquina traduciría la anterior instrucción como:

11110101 11010110 00011101 Al grupo alfabético se le denomina mnemotécnico, y existirá un mnemotécnico por cada instrucción. Se le da este nombre porque sirve para recordar con mayor facilidad el conjunto de instrucciones de una determinada máquina. De esta forma aparecieron los lenguajes ensambladores (Assembler, en inglés). Poco a poco, con el avance de la programación (Software), estas primeras y sencillas ayudas se fueron haciendo más complejas, permitiendo que, además de los mnemotécnicos correspondientes a la operación a realizar, se pudieran emplear otros para indicar, por ejemplo, los operandos. La anterior instrucción se podría escribir de la siguiente forma:

TRASLADAR POS-A POS-B Que nos resulta de más fácil comprensión.

1.1. Importancia del Lenguaje Ensamblador • Un programa escrito en lenguaje ensamblador requiere considerablemente menos memoria y

se ejecuta más rápidamente que un programa escrito en un lenguaje de alto nivel como Pascal o C.

• El lenguaje ensamblador ofrece al programador la posibilidad de realizar tareas muy específicas que sería muy difícil llevar a cabo en un lenguaje de alto nivel.

• El conocimiento del lenguaje ensamblador permite una comprensión de la arquitectura de la máquina que ningún lenguaje de alto nivel puede ofrecer.

• Desarrollar aplicaciones en lenguajes de alto nivel resulta mucho más productivo que hacerlo en ensamblador, pero este último resulta especialmente atractivo cuando hay que optimizar determinadas rutinas que suponen un cuello de botella para el rendimiento del sistema.

• Los programas residentes y las rutinas de servicio de interrupción casi siempre se escriben en ensamblador.

• La carga inicial de un S.O. debe realizarse en ensamblador, pues hacerlo con un lenguaje de alto nivel supondría usar instrucciones que en ese momento no pueden ser ejecutadas por la máquina. ¿Cuándo programar en Ensamblador?

• Hay algunas situaciones en las cuales los profesionales pudieran elegir utilizar el lenguaje ensamblador:

Page 3: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 7

• Interactuando directamente con el hardware, por ejemplo en drivers de dispositivo y manejadores de interrupción.

• Es requerida la optimización extrema. Los programadores de juegos toman ventaja de las habilidades de las características del hardware en los sistemas, permitiendo a los juegos correr más rápidamente. También las grandes simulaciones científicas requieren algoritmos altamente optimizados.

• Un sistema con severas limitaciones de recursos debe ser codificado a mano para maximizar el uso de los limitados recursos.

1.2. El procesador y sus registros internos • Los registros del procesador tienen como misión fundamental: almacenar las posiciones de

memoria que van a sufrir repetidas manipulaciones, ya que los accesos a memoria son mucho más lentos que los accesos a los registros.

• El 8086 dispone de 14 registros de 16 bits que se emplean para controlar la ejecución de instrucciones, direccionar la memoria y proporcionar capacidad aritmética y lógica. Cada registro puede almacenar datos o direcciones de memoria. Los registros son direccionables por medio de un nombre.

• Los diferentes registros del 8086 se clasifican en: • Registros de propósito general o de datos, registros de segmento, registro apuntador de

instrucciones (IP), registros apuntadores (SP y BP), registros índice (SI y DI) y registro de banderas, FLAGS o registro de estado (FL).

Registros de propósito general • Registro AX. Este registro es el acumulador principal, implicado en gran parte de las

operaciones de aritméticas y de E/S. • Registro BX. Recibe el nombre de registro base ya que es el único registro de propósito

general que se usa como un índice en el direccionamiento indexado. Se suele utilizar para cálculos aritméticos.

• Registro CX. El CX es conocido como registro contador ya que puede contener un valor para controlar el número de veces que se repite una cierta operación.

• Registro DX Se conoce como registro de datos. Algunas operaciones de E/S requieren su uso, y las operaciones de multiplicación y división con cifras grandes suponen que el DX y el AX

Page 4: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 8

trabajando juntos. • Los registros de propósito general se pueden direccionar como una palabra o como un byte. El

byte de la izquierda es la parte Alta y el byte de la derecha es la parte Baja.

• Siguiendo esta nomenclatura, es posible referirse a cada uno de los dos bytes, byte de orden alto o más significativo y byte de orden bajo o menos significativo, de cada uno de estos registros. Por ejemplo: AH es el byte más significativo del registro AX, mientras que AL es el byte menos significativo.

• Un segmento es un área especial en un programa que inicia en un limite de un párrafo, esto es, una localidad regularmente divisible entre 16 o 10 hex.

• Un segmento en modo real puede ser de hasta 64k. Se puede tener cualquier número de segmentos, para direccionar un segmento en particular basta cambiar la dirección en el registro del segmento apropiado. Los tres principales segmentos son: segmentos de código, de datos y de la pila.

• Los registros de segmento son registros de 16 bits que constituyen la implementación física de la arquitectura segmentada del 8086.

Registros de Segmento • Registro CS. Registro Segmento de Código. Establece el área de memoria dónde está el

programa durante su ejecución. • Registro DS. Registro Segmento de Datos. Especifica la zona donde los programas leen y

escriben sus datos. • Registro SS. Registro Segmento de Pila. Permite la colocación en memoria de una pila, para

almacenamiento temporal de direcciones y datos. • Registro ES. Registro Segmento Extra. Se suele utilizar en algunas operaciones con cadenas

de caracteres para direccionar la memoria. Registros Apuntador de Instrucciones (IP) • Se trata de un registro de 16 bits que contiene el desplazamiento de la dirección de la siguiente

instrucción que se ejecutará. Está asociado con el registro CS en el sentido de que IP indica el desplazamiento de la siguiente instrucción a ejecutar dentro del segmento de código determinado por CS:

• Dirección del segmento de código en CS: 25A40H • Desplazamiento dentro del segmento de código en IP:

25A40H + 0412H = 25E52H

• Dirección de la siguiente instrucción a ejecutar: 25E52H Registros Apuntadores (SP y BP) • Los registros apuntadores están asociados al registro de segmento SS y permiten acceder a

los datos almacenados en la pila: • Registro SP Proporciona un valor de desplazamiento que se refiere a la palabra actual que

está siendo procesada en la pila. • Registro BP Facilita la referencia a los parámetros de las rutinas, los cuales son datos y

direcciones transmitidos vía la pila.

Page 5: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 9

Registros Índice (SI y DI) • Los registros índice se utilizan fundamentalmente en operaciones con cadenas y para

direccionamiento indexado: • Registro SI Registro índice fuente requerido en algunas operaciones con cadenas de

caracteres. Este registro está asociado con el registro DS. • Registro DI Registro índice destino requerido también en determinadas operaciones con

cadenas de caracteres. Está asociado al registro DS o ES. Registro de banderas, FLAGS, o registro de estado ( FL) • Es un registro de 16 bits, pero sólo se utilizan nueve de ellos. Sirven para indicar el estado

actual de la máquina y el resultado del procesamiento. La mayor parte de las instrucciones de comparación y aritméticas modifican este registro. Algunas instrucciones pueden realizar pruebas sobre este registro para determinar la acción siguiente.

• Los bits 0, 2, 4, 6, 7 y 11 son indicadores de condición que reflejan los resultados de las operaciones del programa; los bits 8 al 10 son indicadores de control que, modificados por el programador, sirven para controlar ciertos modos de procesamiento, y el resto no se utilizan.

• OF. Bit de Overflow o desbordamiento. Indica desbordamiento de un bit de orden alto (más a la izquierda), después de una operación aritmética.

• DF. Bit de Dirección. Designa la dirección, creciente (0) o decreciente (1), en operaciones con cadenas de caracteres.

• IF. Bit de Interrupción. Indica que una interrupción externa, como la entrada desde el teclado, sea procesada o ignorada.

• TF. Bit de Trap o Desvío. Procesa o ignora la interrupción interna de trace (procesamiento paso a paso).

• SF. Bit de Signo. Indica el valor del bit más significativo del registro después de una operación aritmética o de desplazamiento.

• ZF. Bit Cero. Se pone a 1 si una operación produce 0 como resultado. • AF. Bit de Carry Auxiliar. Se pone a 1 si una operación aritmética produce un acarreo del bit 3

al 4. Se usa para aritmética especializada (ajuste BCD). • PF. Bit de Paridad. Se activa si el resultado de una operación tiene paridad par. • CF. Bit de Acarreo. Contiene el acarreo de una operación aritmética o de desplazamiento de

bits.

1.3 La memoria principal (RAM) La organización de la memoria • La unidad de memoria es un componente esencial en cualquier computadora digital, porque

almacena programas y datos. • La capacidad total de memoria de una computadora puede considerarse como una jerarquía

de componentes que consiste de todos los sistemas de almacenamiento que se emplean.

Page 6: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 10

Memoria cache • Por lo general la velocidad de la CPU es mayor que el tiempo de acceso de la memoria

principal, con lo que resulta que la velocidad de procesamiento está limitada, principalmente, por la velocidad de la memoria principal.

• Para remediar esto se usa una pequeña memoria caché extremadamente rápida, entre la CPU y la memoria principal, cuyo tiempo de acceso se acerca a un tiempo de ciclo de reloj del procesador.

• Pone disponible para la CPU los programas y datos actuales a una velocidad rápida. • Es relativamente cara. • Almacena segmentos de programas que se ejecutan en ese momento en la CPU y datos

temporales que se necesitan con frecuencia en los cálculos presentes. • Se comunica directamente con la CPU.

Memoria principal • Unidad de memoria que se comunica directamente con la CPU. • Almacena solo los programas y datos que necesita en ese momento el procesador. • Es relativamente rápida. • Se comunica directamente con los dispositivos de memoria auxiliar, mediante un

procesador de E/S. • Se comunica directamente con la memoria caché. • Tecnología fundamental: circuitos integrados semiconductores (RAM). Una parte más

pequeña de la memoria principal es ROM. • La RAM tiene dos modos de operación posibles: • RAM estática: flips-flops internos que almacenan información binaria. La información

almacenada es válida mientras la unidad está encendida. • RAM dinámica: conjunto de pequeños condensadores que pueden estar cargados o

descargados. Debe refrescarse cada pocos milisegundos para impedir la pérdida de información. Tienen mayor capacidad que las estáticas.

Memoria RAM

• Se puede acceder a las celdas de la memoria para la transferencia de información en cualquier posición aleatoria deseada.

Page 7: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 11

• El proceso de ubicar una palabra en la memoria es igual y requiere la misma cantidad de tiempo, sin importar la ubicación física de las celdas en la memoria.

• Es volátil. • El Procesador de E/S administra las transferencias entre las memorias principal y auxiliar.

• n líneas de entrada de datos: proporcionan la información que se va almacenar en la memoria.

• n líneas de salida de datos: proporcionan la información que sale de la memoria.

• k líneas de direccionamiento: proporcionan un número binario que k bits que especifica una palabra particular elegida entre las 2k palabras disponibles dentro de la memoria.

• líneas de control: lectura, escritura.

Operaciones que se pueden ejecutar con la RAM • Lectura

– Aplicar la dirección binaria de la palabra deseada a las líneas de dirección. – Activar Lectura.

• Escritura – Aplicar la dirección binaria de la palabra deseada a las líneas de dirección. – Aplicar los bits de los datos que deben almacenarse en la memoria a las líneas de

entada de datos. – Activar Escritura.

1.4 El concepto de interrupciones ¿ Qué es una interrupción ?

• Una interrupción es una situación especial que suspende la ejecución de un programa de modo que el sistema pueda realizar una acción para tratarla. Tal situación se da, por ejemplo, cuando un periférico requiere la atención del procesador para realizar una operación de E/S.

• Las interrupciones constituyen quizá el mecanismo más importante para la conexión del microcontrolador con el mundo exterior, sincronizando la ejecución de programas con acontecimientos externos.

Page 8: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 12

Tratamiento de interrupciones • Cuando se produce una petición de interrupción, se desencadena una secuencia de acciones: • Finalizar la ejecución de la instrucción en curso. • Almacenar en la pila el registro de estado. • Almacenar en la pila la dirección de retorno: registros CS e IP. • Inhibir las interrupciones. • Colocar en CS: IP la dirección de comienzo de la rutina que tratará la interrupción. • La rutina toma el control y almacenará todos los registros que utilice. • Tratamiento de la interrupción. • Se recuperan de la pila los registros previamente apilados. • Con la instrucción IRET la rutina devuelve el control, ya que se restituye el registro de estado y

la dirección de retorno CS:IP almacenada previamente. • Se ejecuta la instrucción que sigue a aquella que estaba ejecutándose cuando se produjo la

interrupción. • La rutina de tratamiento de la interrupción debe almacenar en la pila todos aquellos registros

que vaya a utilizar antes de comenzar su tarea y restituirlos al finalizar, de modo que cuando se reanude la tarea interrumpida, se mantengan los valores que había en los registros.

Tipos de Interrupciones • Las interrupciones hardware hacen referencia a aquellas peticiones de interrupción, que

llegan al procesador mediante una línea externa denominada INTR, procedentes de algún dispositivo periférico (por ejemplo, el teclado).

• Una petición de interrupción sobre este pin es enmascarable mediante el bit IF del registro de estado, es decir, si se pone a cero IF no se reconocerán las peticiones de interrupción, mientras que si está a uno sí se admiten tales peticiones. En ese momento la CPU termina la ejecución de la instrucción en curso y realiza las siguientes operaciones:

• Finaliza la ejecución de la instrucción en curso. • Almacena en la pila el registro de estado. • Almacena en la pila la dirección de retorno: registros CS e IP. • Inhibe las interrupciones. • Activa el pin INTA (a nivel bajo). El dispositivo al comprobar la activación de INTA sabe

Page 9: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 13

que su petición ha sido reconocida. • El dispositivo periférico pone en el bus de datos el número de vector de interrupción, y

éste es leído por la CPU. • Multiplica el número de vector leído por cuatro para obtener la dirección de la tabla

donde se encuentra el vector de interrupción. • Coloca en CS:IP la dirección de comienzo de la rutina que tratará la interrupción. • Se ejecuta la rutina de servicio de interrupción que finaliza en IRET, restituyéndose el

registro de estado, y los registros CS e IP.

• Existe una colección de procedimientos en código máquina que forman parte del sistema operativo y que pueden ser usados por el programador de aplicaciones. Para acceder a estos procedimientos contamos con las correspondientes entradas en la tabla de vectores de interrupción. Todos los procedimientos finalizan con la instrucción IRET, por lo que la llamada a estos procedimientos no se realiza con la instrucción CALL sino con la instrucción INT N donde N es el número del vector de interrupción. Estos procedimientos llamados mediante INT reciben el nombre de interrupciones software.

• Las Interrupciones de software se pueden clasificar en procedimientos BIOS (10H a 1FH) y procedimientos DOS (20H a 3FH) (el BIOS contiene un conjunto de rutinas que se encuentran en un chip de memoria ROM, o memoria de sólo lectura, para dar soporte a los dispositivos).

Llamada a procedimientos DOS y BIOS

• Las interrupciones internas o excepciones son generadas por el propio procesador cuando se produce una situación anormal:

– INT 0: error de división, generada automáticamente cuando el cociente no cabe en el registro o el divisor es cero. Sólo se puede producir cuando se ejecutan DIV o IDIV.

– INT 1: paso a paso, se produce tras cada instrucción cuando el procesador está en modo traza (utilizada en la depuración de programas).

• La INT 2 o interrupción no enmascarable (NMI) es una interrupción externa que tiene prioridad absoluta y se produce incluso aunque estén inhibidas las interrupciones (con CLI) para indicar un hecho muy urgente (fallo de alimentación o error de paridad en la

Page 10: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 14

memoria). Pasos para el procesamiento de una IRQ:

• 1) Terminar la ejecución de la instrucción máquina en curso. • 2) Salva el valor de contador de programa, IP, en la pila, de manera que en la CPU, al

terminar el proceso, pueda seguir ejecutando el programa a partir de la última instrucción. • 3) La CPU salta a la dirección donde está almacenada la rutina de servicio de interrupción

(ISR, Interrupt Service Routine) y ejecuta esa rutina que tiene como objetivo atender al dispositivo que generó la interrupción.

• 4) Una vez que la rutina de la interrupción termina, el procesador restaura el estado que había guardado en la pila en el paso 2 y retorna al programa que se estaba usando anteriormente.

1.5 Llamadas a servicios del sistema Las llamadas son peticiones a ejecución de rutinas y proporcionan la interfaz entre el sistema operativo y un programa en ejecución. Estas llamadas son instrucciones de lenguaje ensamblador y se presentan en los manuales que emplean los programadores de este lenguaje. Algunos sistemas permiten efectuar llamadas al sistema directamente desde un programa realizado en el lenguaje de mayor nivel, normalmente estas llamadas se asemejan a una función o sub-rutinas predefinidas, que generan una llamada a una ruta en especial de tiempo de ejecución, que realice efectivamente la llamada al sistema, o bien pueden generarla directamente en la línea.

Los programadores de sistemas de aplicación invocan con frecuencia los servicios del sistema operativo desde sus programas mediante llamadas del sistema. Las ordenes del sistema emitidas por los usuarios que manejan el lenguaje de ordenes (lenguaje de control JCL) normalmente se convierten a lenguaje de máquina y se ejecutan como una serie de llamadas del sistema.

Además de proporcionar la mayoría de la funcionalidad accesible a los usuarios del lenguaje de órdenes, las llamadas del sistema usualmente permiten un control más fino sobre las operaciones del sistema y un acceso más directo a las facilidades del hardware especialmente el sistema de E/S. Pero para algunas operaciones de entrada en comunicación y funciones de gestión del sistema, las llamadas del sistema representan usualmente un súper conjunto de las funciones accesibles a nivel de órdenes.

El conjunto de instrucciones del 8086 El conjunto de instrucciones primitivas que puede realizar un microprocesador es conocido como su conjunto de instrucciones. El conjunto de instrucciones del 8086 consiste de seis tipos de instrucciones, que están resumidas en la tabla 2.5. Programar satisfactoriamente en lenguaje ensamblador del 8086 requiere un entendimiento de todos estos tipos de instrucciones. 1. Instrucciones de transferencia de datos MOV Mover PUSH, POP Operaciones de la pila (stack) XCHG Intercambio IN, OUT Puertos de E/S

Page 11: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 15

2. Instrucciones aritméticas ADD Adición INC Incremento SUB Substracción DEC Decremento NEG Negatividad CMP Comparar MUL Multiplicar DIV Dividir 3. Instrucciones lógicas NOT Complemento AND AND OR OR inclusivo XOR OR exclusivo TEST Prueba de bits SHL, SHR Desplazamiento izquierda/derecha ROL, ROR Rotación izquierda/derecha 4. Instrucciones de manipulación de cadenas MOVS Mover cadena CMPS Comparar cadenas SCAS Inspeccionar cadena LODS Cargar de cadena STOS Almacenar en cadena 5. Instrucciones de transferencia de control CALL Llamada a una subrutina RET Retorno de una subrutina JMP Salto JN, JNZ, Etc. Saltos condicionales LOOP Iteración LOOPNE.. Iteración condicional INT Interrupción IRET Retorno de interrupción 6. Instrucciones de control del procesador CLC,STC, Etc. Aclarar/establecer banderas

1.6 Modos de direccionamiento

El 8086 ofrece una multitud de vías para direccionar la información: registro a registro,

direccionamiento inmediato, direccionamiento directo y varios tipos diferentes de direccionamiento

indirecto. Cada modo tiene siempre un operando fuente y uno destino. El operando destino está

ubicado a la izquierda de la coma; y el fuente a la derecha. Adicionalmente, los modos directo e

indirecto involucran el uso de un registro de segmento. (1231)

Direccionamiento Registro

Es aquel en el cual la operación se lleva a cabo entre los contenidos de dos

registros. Por ejemplo, la instrucción

mov AX,BX

Indica que el contenido del registro BX sea copiado en el registro AX. (1231)

Juan Jose Lee
Resaltado
Page 12: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 16

Direccionamiento Inmediato

En este modo de direccionamiento, uno de los operándoos está presente en el o

los bytes siguientes al código de operación. Por ejemplo, la instrucción

add AX,3064h

Indica que el número 3064h sea sumado al contenido del registro AX y el resultado

almacenado en dicho registro. (1231)

Direccionamiento Directo

EL 8086 implementa el direccionamiento directo a memoria, sumando un

desplazamiento de 16 bits, indicado por los dos bytes que siguen al código de operación, al

contenido del registro de segmento de datos. La suma es pues, la posición de memoria

direccionada. Por ejemplo, la instrucción:

mov AH,TABLA

Señala que el contenido de la posición de memoria cuya dirección está indicada por el

identificador TABLA, sea copiado en el registro AH. (1231)

Direccionamiento Indirecto

El modo de direccionamiento indirecto es el más difícil de comprender, pero

también el más poderoso.

Existen cuatro métodos de direccionamiento indirecto: indirecto a registro, relativo

a base, indexado e indexado a base. (1231)

Indirecto a Registro

En el modo de direccionamiento indirecto a registro, la dirección de memoria

donde se encuentra uno de los operándoos es indicada a través del contenido de los registros BX,

BP, SI o DI. La instrucción

mov AX,[DI]

Establece que el contenido de la palabra de memoria cuya dirección está indicada por el

contenido del registro DI, sea copiado en el registro AX. (1231)

Relativo a Base

El direccionamiento a la memoria de datos, relativo a base simplemente usa el

contenido del registro BX o BP como base para la posición efectiva de memoria. La instrucción

mov CL,[BP]+DESP

Copia el contenido de la posición de memoria cuya dirección está determinada por la suma

del contenido de BP y DESP, en el registro CL. (1231)

Indexado

El direccionamiento indexado directo está permitido especificando los registros SI o

DI como índices.

Empleando este modo de direccionamiento es posible acceder a los elementos de

un vector. La instrucción

Page 13: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 17

sub AH,MATRIZ[SI]

Resta del contenido del registro AH, el valor contenido en la posición de memoria

especificada por la suma del desplazamiento indicado por el identificador MATRIZ y el contenido

del registro SI. (1231)

Indexado a Base

Resulta de la combinación de los modos de direccionamiento Relativo a Base e

Indexado Directo. La instrucción

mov DH,VECTOR[BX][DI]

Señala que el contenido de la posición de memoria cuya dirección viene indicada por la

suma de los contenidos de los registros BX y DX y del desplazamiento establecido por el

identificador VECTOR, sea copiado en DH. (1231)

No. Modo Operando Segmento Ejemplo 1 Registro Registro - mov ax,bx 2 Inmediato Valor - mov ax,500 3 Directo Variable DS mov ax,TABLA 4 Inmediato a registro [BX] DS mov ax,[bx] [BP] DS mov ax,[bp] [DI] SS mov ax,[di] [SI] DS mov ax,[si] 5 Relativo a base [BX]+desp DS mov ax,[bx+4] [BP]+desp SS mov ax,[bp+6] 6 Indexado [DI]+desp DS mov ax,TABLA[di] [SI]+desp DS mov ax,TABLA[si]¡ 7 Indexado a base [BX][SI]+desp DS mov ax,TABLA[bx][si] [BX][DI]+desp DS mov ax,TABLA[bx][di] [BP][SI]+desp SS mov ax,TABLA[bp][si] [BP][DI]+desp SS mov ax,TABLA[bp][di]

1.7 Proceso de ensamblado y ligado Procedimiento de ensamble, enlace y ejecución

Proceso de ensamblaje

Un ensamblador es el programa que convierte un listado de código fuente en código objeto, es decir, lenguaje máquina (el que finalmente interpretará el procesador) en el que sólo le faltan las referencias a rutinas externas. El código fuente es un fichero que contiene la secuencia de instrucciones en lenguaje ensamblador que forma el programa, así como ciertas directivas o comandos.

Enlace y Ejecución

Page 14: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 18

Al construir un programa algunos de sus módulos pueden colocarse en el mismo módulo fuente y ensamblarse juntos, otros pueden estar en módulos diferentes y ser ensamblados separadamente. Si se ensamblan por separado, el módulo principal, que contiene la primera instrucción que se va a ejecutar, debe acabar con una sentencia END que indique el punto de entrada al programa, y cada uno de los otros módulos deben terminar con una sentencia END sin ningún operando. En cualquier caso, los módulos objeto resultantes, algunos de los cuales pueden estar agrupados en librerías, deben ser enlazados para formar el módulo de carga, antes de que se pueda ejecutar el programa. Además de dar como salida el módulo de carga, el linker o enlazador imprime un mapa de memoria que indica donde serán cargados los módulos objeto en la memoria. Después de crearse el módulo de carga, éste es cargado por el cargador en la memoria del ordenador y comienza la ejecución.

Independientemente del sistema, la combinación linker/cargador debe crear todos los segmentos y asignaciones de dirección necesarios para permitirle al programa funcionar correctamente. En concreto, esta combinación debe:

• Encontrar los módulos que van a ser enlazados

• Construir el módulo de carga asignando las posiciones de todos los segmentos de todos los módulos objeto que se están enlazando.

• Rellenar todos los desplazamientos de segmento que no pudieron ser determinados por el ensamblador.

• Rellenar todas las direcciones de los segmentos.

• Cargar el programa para su ejecución. (151)

Procedimiento de ensamble, enlace y ejecución Paso 1: Cosiste en instalar el programa tasm, ya que lo tienes adentro de la carpeta tasm estarás guardando los programas que vayas a realizar.

Paso 2: Realizar o capturar el programa de ensamblador en bloc de notas, al terminar la realización de dicho código se deberás guardar en la carpeta creada de tasm, este tendrá que

Page 15: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 19

llevar un nombre x a su vez este tendrá una extensión .asm que servirá para que el código sea ejecutable.

Pasó 3: Después da guarda el código con extensión .asm, se abre el archivo en la ruta específica del símbolo de sistemas (MS-DOS) ya que en este programa compilaremos y ligaremos nuestro programa y pondremos la ruta del tasm para trabajar dentro de ella.

Paso 4: Ya estando en símbolo de sistemas empezamos la compilación del programa dando las siguientes instrucciones. c:\tasm40>tasm hola.asm Esta es la dirección donde se encuentra guardado el código tasm.

Page 16: Apuntes Unidad 1

INSTITUTO TEGNOLOGICO SUPERIOR DE LOS CABOS MATERIA: LENGUAJES DE INTERFAZ

M.S.C. Miguel Martin Millán Jiménez 20

Paso 5: Ligamento del código que está guardado en tasm. Para poder ligar el código usaremos una instrucción tlink como se verá a continuación. c:\tasm40>tlink hola El tlink se utiliza para encontrar la dirección y mostrara la ejecución del programa c:\tasm40>Hola Muestra el programa en ejecución.