Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 1 PRESENTACIÓN El lenguaje ensamblador aun en estos días presenta ventajas sobre los lenguajes de alto nivel, lo anterior por su interacción directa sobre el Hardware. La presente Antología fue elaborada para la asignatura de Lenguaje Ensamblador incluida en la Reforma Educativa 2004, para la Carrera de Ingeniería en Sistemas Computacionales para el Instituto Tecnológico Superior de Huauchinango. Fue realizada con la finalidad de mostrar al lector las principales instrucciones y aspectos básicos del lenguaje Ensamblador. Es utilizado el compilador MASM para el desarrollo de los programas, mostrándose los pasos para la realización, compilación y ligado de un progre Esperando que la presente antología sea de utilidad Ing. Claudia Yadira Luna Carrasco Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 2 ÍNDICE Pág. Presentación Unidad I 1 Fundamentos 1.1 Introducción. 4 1.1.1 Uso y aplicaciones del lenguaje ensamblador. 5 1.1.2 Escalabilidad de los microprocesadores. 6 1.1.3 Tipos de lenguajes ensambladores. 9 1.1.4 Clasificación de Memorias. 10 1.1.5 12 Unidades de entrada / salida. 1.2 El microprocesador. 13 1.2.1 Buses. 14 1.2.2 Registros. 15 1.2.3 Modos de direccionamiento. 18 1.3 Interrupciones. 19 1.3.1 Hardware. 23 1.3.2 Software. 24 1.4 Estructura de un programa en ensamblador. 25 1.4.1 Data segment. 26 1.4.2 Snack segment. 28 1.4.3 Code segment 28 1.4.4 Instrucciones del programa. 29 1.5 Procedimiento de ensamble, enlace y ejecución. 31 1.6 Entorno de programación. 34 Unidad II Elementos del Lenguaje 2.1 Instrucciones lineales 35 2.1.1 Movimiento. 35 2.1.2 Pila. 35 2.1.3 Matemáticos. 36 2.1.4 Ajustes. 37 2.1.5 Comparación. 37 2.2 Saltos. 37 Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 3 2.2.1 Incondicional. 37 2.2.2 Condicional. 38 2.3 Tipos de ciclos. 39 2.4 Operadores Lógicos. 39 2.5 Desplazamiento. 39 2.5.1 Lineal. 39 2.5.2 Circular. 40 2.6 Procesos de control 41 2.6.1 Banderas 41 2.6.2 Cadenas 41 2.6.3 Carga 42 Unidad III Modularización 3.1 Macros 43 3.2 Procedimientos 45 3.2.1 Internos 45 3.2.2 Externos 47 Unidad IV Interrupciones Programación Híbrida 53 Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 4 UNIDAD I FUNDAMENTOS 1.1 Introducción Cuando las primeras computadoras hicieron su aparición, estas eran solo programables por sus diseñadores, puesto que ellos eran los que conocían su diseño y la forma en que debían ser programadas. Con el avance del tiempo, las computadoras fueron siendo diseñadas bajo arquitecturas similares, lo que facilitó su programación, aunque el grupo de personas que podía realizar esta labor era pequeño, puesto que se debía tener un amplio conocimiento sobre esta labor. La información que hace que el hardware de la computadora realice una determinada actividad de llama instrucción. Por consiguiente una instrucción es un conjunto de unos y ceros. Las instrucciones formadas con unos y ceros 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. El lenguaje máquina fue el primero que empleo el hombre para la programación de las primeras computadoras, por esta razón el grupo de programadores era limitado. El Lenguaje Ensamblador es la primera abstracción del Lenguaje Máquina, y consiste en asociar palabras clave a estas instrucciones, para que faciliten su uso por parte del programador. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 5 La aparición del Lenguaje Ensamblador inicio la construcción de otros lenguajes de programación, hasta llegar a los lenguajes de Alto Nivel que hoy conocemos. 1.1.1 Uso y aplicaciones del Lenguaje Ensamblador. El uso del lenguaje ensamblador le permite al programador indicarle a la computadora exactamente cómo llevar a cabo una tarea específica usando la menor cantidad de instrucciones. La optimización resulta en una mejora sustancial en términos de rendimiento y consumo de memoria así como otros recursos. El lenguaje ensamblador es usualmente utilizado en las siguientes circunstancias: Æ Para mejorar la eficiencia de una rutina o programa específico que se puede o se ha transformado en un cuello de botella. Æ Para obtener acceso a funciones de bajo nivel del procesador para realizar tareas que no son soportadas por los lenguajes de alto nivel. Æ Para escribir manejadores de dispositivos para comunicarse directamente con hardware especial. Æ Trabajar en ambientes con recursos limitados puede requerir el uso del lenguaje ensamblador pues el código ejecutable puede ser menor que el generado por un Lenguaje de alto nivel. El lenguaje ensamblador tiene como ventajas: Æ Velocidad: el proceso de traducción que realizan los intérpretes, implica un proceso de cómputo adicional al que el programador quiere realizar. Por ello el lenguaje ensamblador es más rápido que un intérprete, por que no necesita traducción. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 6 Æ Tamaño: un intérprete genera código de más al necesario y por ello un ejecutable se crece, y comparado con ello, el ejecutable generado con Lenguaje Ensamblador es relativamente pequeño. Æ Flexibilidad: los lenguajes de alto nivel no permiten el uso directo del hardware de la computadora, Lenguaje Ensamblador si lo hace. Las herramientas para programar en Lenguaje Ensamblador son: 1. Un editor de textos. 2. Un Ensamblador, que convierta el código fuente al código objeto. 3. Un Montador o de Ligado, que permita el módulo objeto en ejecutable. 1.1.2 Escalabilidad de los microprocesadores. En una computadora está contenido un chip o circuito llamado microprocesador. Todas las computadoras tienen por lo menos dos partes básicas, la unidad de control y la unidad aritmético-lógica. Todos los recursos de la computadora son administrados desde la unidad de control, cuya función es coordinar todas las actividades de la computadora. La unidad de control contiene las instrucciones del procesador para llevar a cabo comandos. El conjunto de instrucciones, que está incluido dentro de los circuitos de la unidad de control, es una lista de todas las operaciones que realiza el procesador. Cada instrucción en el conjunto de instrucciones es acompañado por un microcódigo, que son instrucciones muy básicas que le dicen al procesador cómo ejecutar las instrucciones. Cuando la computadora corre un programa, busca los comandos del programa dentro del conjunto de instrucciones del procesador y las ejecuta en orden. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 7 La unidad aritmético-lógico (ALU) se encarga de ejecutar las instrucciones que involucran aritmética o lógica. La ALU incluye un grupo de registros, es decir, memoria construida directamente en el procesador que se usa para guardar datos que están siendo procesados por la instrucción actual. Los procesadores modernos contienen más de 20 millones de transistores y pequeños de tamaño, mientras que en sus inicios contenían solo 2000 transistores y el tamaño era considerable. El microprocesador es la parte de la computadora diseñada para ejecutar programas, con tecnología semiconductora. Se eslabona desde los 50´s pero la tecnología se fusiona en los 70´s. Anteriormente se usaban tubos al vacío (bulbos) como componentes electrónicos activos. En 1948 en los laboratorios de Bell crearon el Transistor (material de silicio de bajo costo) para reemplazar al tubo al vacío. De esta forma comienzan a surgir los circuitos digitales que llevan a la reducción de la tecnología a un circuito integrado llamado microprocesador. Actualmente la capacidad de integración y el abaratamiento de las tecnologías permite que casi cualquier empresa pueda contar con una capacidad de cómputo antes inimaginable para las tareas que necesita. Se prevé que la capacidad de integración llegue a un techo tecnológico, en el cual se necesite un nuevo paradigma para poder seguir incrementando la capacidad de procesamiento de las máquinas. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 8 En la siguiente tabla se muestran algunos de los procesadores del mercado, la fecha en la que fueron presentados al mercado, la velocidad promedio que alcanzaban, el ancho de bus que contenían, un aproximado de transistores y la memoria interna de cada uno de ellos. Procesador Fecha de presentación Velocidad de Reloj Ancho de bus Transistores Memoria 4004 15/11/71 108 Khz 4 bits 2300 640 byte 8008 01/04/72 108 khz 8 bits 3500 16 kb 8080 01/04/74 2 Mhz 8 bits 6000 64 kb 8086 08/06/78 5-10 Mhz 16 bits 2900 100 Mb 8088 01/06/79 5-10 Mhz 8 bits 2900 300 Mb 80286 01/02/82 8-12 Mhz 16 bits 13400 1 Mb 80386 17/10/85 16-33 Mhz 27500 20 Mb 32 bits 80486 22/04/91 16-33 Mhz 32 bits 1185000 Pentium 22/03/93 60-200 Mhz 32 bits 3.1 millones Pentium Pro 27/03/95 150-200 Mhz 64 bits 5.5 millones AMD k5 1996 90-200 Mhz 64 bits 3.3 – 4.3 millones Pentium II 07/05/97 233-300 Mhz 64 bits 7.5 millones Intel Celaron 1998 266 Mhz 64 bits 7.5 millones AMD Duron 2000 600-1000 Mhz 64 bits 25 millones Pentium 4 2000 2000 Mhz 64 bits 42 millones 1 Gb Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 9 1.1.3 Tipos de Lenguajes Ensambladores Los lenguajes ensambladores, dependen de la arquitectura de la computadora, existen: Æ Los ensambladores de la familia Intel Æ Los ensambladores de la familia Motorota Æ Los ensambladores del procesador Power de las IBM Aunque todos los ensambladores realizan básicamente las mismas tareas, podemos clasificarlos de acuerdo a características. Æ Ensambladores Cruzados (Cross-Assembler). Se denominan así los ensambladores que se utilizan en una computadora que posee un procesador diferente al que tendrán las computadoras donde va a ejecutarse el programa objeto producido. Æ Ensambladores Residentes. Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecución, al programa objeto producido. Æ Macroensambladores. Son ensambladores que permiten el uso de macroinstrucciones debido a su potencia, normalmente son programas robustos que no permanecen en memoria una vez generado el programa objeto. Æ Microensambladores. Generalmente, los procesadores utilizados en las computadoras tienen un repertorio fijo de instrucciones, este conjunto de instrucciones sirven para un determinado código de operación y a estas se les conoce como microensambladores. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 10 1.1.4 Clasificación de Memorias. La memoria de un ordenador se puede definir como los circuitos que permiten almacenar y recuperar la información. Las memorias se clasifican, por la tecnología empleada y, además según la forma en que se puede modificar su contenido, A este respecto, las memorias se clasifican en dos grandes grupos: 1) Memorias RAM: Son memorias en las que se puede leer y escribir, si bien su nombre (Random Access Memory) no representa correctamente este hecho. 2) Memorias ROM (Read 0nly Memory): Son memorias en las que sólo se puede leer. Pueden ser: a) ROM programadas por máscara, cuya información se graba en fábrica y no se puede modificar. b) PROM, o ROM programable una sola vez. c) EPROM (erasable PROM) o RPROM (reprogramable ROM), cuyo contenido puede borrarse mediante rayos ultravioletas para regrabarlas. d) EAROM (electrically alterable ROM) o EEROM (electrically erasable ROM), que son memorias que está en la frontera entre las RAM y las ROM ya que su contenido puede regrabarse por medios eléctricos, estas se diferencian de las RAM en que no son volátiles. En ocasiones a este tipo de memorias también se las denomina NYRAM (no volátil RAM). Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 11 La memoria principal esta formada por un conjunto de unidades llamadas palabras en forma de una organización lineal. Dentro de cada una de estas palabras se guarda la información que constituye una instrucción o parte de ella (puede darse el caso de que una sola instrucción necesite varia palabras), o un dato o parte de un dato (también un dato puede ocupar varias palabras). A la cantidad de palabras que forman la Memoria Principal se le denomina capacidad de memoria. De este modo, cuanto mayor sea el número de palabras mayor será el número de instrucciones y datos que podrá almacenar la computadora. El número de bits que forman una palabra se llama longitud de palabra. La acción de guardar una información en una palabra de la memoria se llama acceso de escritura, y la acción de recuperarla, acceso de lectura. Los accesos son coordinados por la UC. La secuencia de órdenes que debe generar la Unidad de Control se indica en las siguientes tablas. Secuencia de acceso a la memoria. Acceso de Escritura Acceso de Lectura Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 12 1.1.5 Unidades de Entrada / Salida. La computadora tiene comunicación de manera interna y externa, de manera externa la comunicación se consigue a través de diversos dispositivos, como son: teclados, ratones, impresoras, monitores, escáner, etc. Tomemos en cuenta que todos los periféricos (dispositivos que pueden conectarse a la computadora) son diferentes, por tanto, el manejo que cada uno de ellos da a la información también es diferente, en otras palabras la computadora habla español y cada periférico habla un idioma diferente, entonces, para que la comunicación entre la computadora y el periférico sea la apropiada, se hace necesario un intérprete o intermediario que permita la traducción ante los diversos idiomas que cada uno maneja. La unidad que funciona como intermediario se llama Unidad de Entrada/Salida, cuya función principal es llevar a cabo las operaciones de Entrada/Salida. Definiremos una operación de E/S como el conjunto de acciones necesarias para la transferencia de un conjunto de datos (es decir, una transferencia completa de datos). Para la realización de una operación de E/S se deben efectuar las siguientes funciones: → Recuento de las unidades de información transferidas (normalmente bytes) para reconocer el fin de operación. → Sincronización de velocidad entre la CPU y el periférico. → Detección de errores (e incluso corrección) mediante la utilización de los códigos necesarios (bits de paridad, códigos de redundancia cíclica, etc.) → Almacenamiento temporal de la información. Es más eficiente utilizar un buffer temporal específico para las operaciones de E/S que utilizan el área de datos del programa. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 13 → Conversión de códigos, conversión serie/paralelo, etc. 1.2 El Microprocesador. La Unidad central de proceso o CPU, se puede definir como un circuito (chip) que interpreta y ejecuta instrucciones. El microprocesador se ocupa del control y el proceso de datos en los ordenadores. Habitualmente, la CPU es un microprocesador fabricado en un chip, un único trozo de silicio que contiene millones de componentes electrónicos. El microprocesador de la CPU está formado por una unidad aritmético lógica que realiza cálculos y comparaciones, y toma decisiones lógicas (determina si una afirmación es cierta o falsa mediante las reglas del álgebra de Boole); por una serie de registros donde se almacena información temporalmente, y por una unidad de control que interpreta y ejecuta las instrucciones. Para aceptar órdenes del usuario, acceder a los datos y presentar los resultados, la CPU se comunica a través de un conjunto de circuitos o conexiones llamado bus. El bus conecta la CPU a los dispositivos de almacenamiento (por ejemplo, un disco duro), los dispositivos de entrada (por ejemplo, un teclado o un ratón) y los dispositivos de salida (por ejemplo, un monitor o una impresora). Elementos que la componen: → Unidad de control: controla el funcionamiento de la CPU y por tanto de el computador. → Unidad aritmético-lógica (ALU): encargada de llevar a cabo las funciones de procesamiento de datos del computador. → Registros: proporcionan almacenamiento interno a la CPU. → Interconexiones CPU: Son mecanismos que proporcionan comunicación entre la unidad de control, la ALU y los registros. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 1.2.1 14 Buses. El bus es básicamente una serie de cables mediante los cuales pueden transportarse los datos de una unidad a otra. Los buses han ido evolucionando conforme lo hicieron los procesadores, entre más ancho es el bus, mas rápida es la transportación de datos, y por lo tanto del procesador. Un bus es en esencia una ruta compartida que conecta diferentes partes del sistema, como el microprocesador, la controladora de unidad de disco, la memoria y los puertos de entrada/salida (E/S), para permitir la transmisión de información. Existen: → Bus de Datos. Su función principal es la de transportar datos entre los dispositivos. → Bus de Direcciones. En donde son transportadas las direcciones de memoria principal. → Bus de Control. Transporta señales de estado de las operaciones efectuadas por el CPU con las demás unidades. → Bus de Sincronización. Transporta las señales de reloj que permiten la temporización. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 15 1.2.2 Registros. El procesador para realizar y agilizar sus funciones contiene dentro de sí, una serie de registros que a continuación se describen: REGISTROS DE PROPÓSITO GENERAL Pueden ser utilizados como un solo registro de 16 bits o bien como dos registros independientes de 8 bits. Registro AX BX CX DX Registro Acumulador Registro Base Descripción Se utiliza generalmente para el almacenamiento de datos en general, comúnmente operandos o resultados parciales de las operaciones realizadas por la ALU. Se usa para conservar la dirección base de los datos almacenados en el segmento de datos de la memoria Registro Guarda el valor del índice de conteo durante la ejecución de Contador un ciclo. Registro De Datos Se usa para almacenar la parte alta del resultado de un producto de mas de 16 bits. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 16 REGISTROS APUNTADORES E ÍNDICES Registro Apuntador IP de Descripción Contiene la dirección de la siguiente instrucción a ejecutar por el procesador. Instrucciones SP Apuntador de Pila Se utiliza para mantener la dirección del borde de la pila de la memoria. Su uso principal es el de proveer un mecanismo paa poder BP Apuntador pasar parámetros a rutinas. También se usa para conservar Base la dirección base de los datos almacenados en el segmento de pila de la memoria. SI DI Índice Fuente Su principal aplicación es en instrucciones u operaciones que Índice involucran cadenas. Destino REGISTROS DE SEGMENTO Registro CS DS SS ES Descripción Segmento Contiene la de código segmento que contiene los programas y sus procedimientos. Segmento de datos Segmento de pila Contiene la dirección dirección de de la la memoria memoria donde donde inicia inicia el segmento o bloque de memoria que contiene la mayor parte de los datos o variables utilizados en un programa. Contiene la dirección de la memoria utilizado por la pila de la memoria. Segmento Contiene la dirección de la memoria que se utiliza para extra de guardar datos cuando se ha excedido la capacidad del datos el registro de segmento de datos (cadenas). Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 17 REGISTROS DE BANDERAS F15 F14 F13 F12 F11 F10 OF DF F9 F8 F7 F6 IF TF SF ZF Registro CF bandera de flag, bandera de acarreo auxiliar Zero flan, bandera de cero Sign flag, badera de signo Trap flag, TF bandera de trampa IF CF Descripción acarreo Indica si el número de unos en el resultado de una operación es par o impar. PF = 0 indica una paridad impar. Esta bandera se activa cuando existe acarreo de la parte baja a la parte alta en el registro AL. Se activa cuando el resultado de una operación aritmética es cero. Indica si el resultado de una operación aritmética es positivo o negativo. SF = 0 si el resultado es positivo. Indica si un programa se ejecutará instrucción por instrucción, deteniéndose en cada una de ellas. Indica si las interrupciones se encuentran habilitadas o flag, bandera de deshabilitadas. IF = 1 cuando las interrupciones están habilitadas. Direcction flag, Indica el orden como serán manipulados los datos en bandera de instrucciones de cadenas. (de principio a fin o de fin a dirección OF PF F0 Interrupt enable interrupción DF F1 préstamo al final de una resta. CF = 1 indica que existe un Auxiliary carry SF AF F2 bandera de paridad ZF F3 Indica un acarreo alto al término de una suma o un Parity flag, AF F4 Carry flag, acarreo PF F5 principio) Overflow flag, Se activa cuando al final de una operación aritmética existe bandera de la condición de sobre flujo, es decir, el resultado es mayor sobreflujo a la capacidad de almacenamiento del destino. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 18 Descripción de las banderas Por medio de símbolos, el comando R nos indica el estado de cada bit en el registro de banderas. Banderas Desactivadas: XF = 0 Activadas XF = 1 OF DF IF SF ZF AF PF CF NV UP DI PL NZ NA PO NC OV DN EI NG ZR AC PE CY 1.2.3 Modos de Direccionamiento Instrucción Mov, almacena el contenido de la fuente en el destino. Formato: MOV Destino, Fuente Tipo de Direccionamiento Formato De Registro Mov Ax, BX Inmediato Mov Ax, 25H Descripción Copia el contenido de un registro a otro. Es cuando se guarda un dato de manera directa en el destino. Permite la transferencia de datos entre Directo Mov Al, [24A7] una localidad de memoria situada dentro del segmento de datos y los registros Al o AX. Permite Indirecto por Registro Mov AH, [BX] transferir los datos de una localidad de memoria por medio de los siguientes registros BP, BX, DI o SI, los cuales guardan el direccionamiento. En Relativo por Registro Mov AX, [BX+100H] este tipo de direccionamiento de agrega un desplazamiento a un registro base o índice. Base más Indexado Índice o Este tipo de direccionamiento también Mov AX, [BP+DI] interactúa en forma indirecta con los datos en la memoria. El desplazamiento Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 19 se forma por medio de un registro base (BX o BP) mas un registro índice (SI o DI). Opera similar al direccionamiento base Relativo Base más Índice Mov AL, [BP+SI+125H] más índice, donde se agrega un desplazamiento más en forma de un dato inmediato. Empuja el contenido de la fuente a la pila PUSH Fuente (Guarda en memoria), en la dirección a la De Pila (LIFO, último en que apunta SP. entrar, primero en salir) Recupera un dato de la pila y lo coloca en POP Destino el destino (extrae de memoria), de la dirección a la que apunta SP. 1.3 Interrupciones Una interrupción es una operación que suspende la ejecución de un programa de modo que el sistema pueda realizar una acción especial. La rutina de interrupción ejecuta y por lo regular regresa el control al procedimiento que fue interrumpido, el cual entonces reasume su ejecución. Una interrupción guarda en la pila el contenido del registro de banderas, el CS, y el IP. La dirección CS:IP entonces apunta al inicio de la rutina en el área del BIOS, que ahora se ejecuta. La interrupción regresa vía una instrucción IRET (regreso de interrupción), que saca de la pila el IP, CS y las banderas y regresa el control a la instrucción que sigue al INT. Las interrupciones se dividen en dos tipos las cuales son: Externas y Internas. Una interrupción externa es provocada por un dispositivo externo al procesador. Una interrupción interna ocurre como resultado de la ejecución de una instrucción INT o una operación de división que cause desbordamiento, ejecución en modo de Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 20 un paso o una petición para una interrupción externa, tal como E/S de disco. Los programas por lo común utilizan interrupciones internas, que no son enmascarables, para accesar los procedimientos del BIOS y del DOS. El BIOS contiene un extenso conjunto de rutinas de entrada/salida y tablas que indican el estado de los dispositivos del sistema. El dos y los programas usuarios pueden solicitar rutinas del BIOS para la comunicación con los dispositivos conectados al sistema. El método para realizar la interfaz con el BIOS es el de las interrupciones de software. A continuación se listan algunas interrupciones del BIOS. INT 00H: División entre cero. Llamada por un intento de dividir entre cero. Muestra un mensaje y por lo regular se cae el sistema. INT 01H: Un solo paso. Usado por DEBUG y otros depuradores para permitir avanzar por paso a través de la ejecución de un programa. INT 02H: Interrupción no enmascarare. Usada para condiciones graves de hardware, tal como errores de paridad, que siempre están habilitados. Por lo tanto un programa que emite una instrucción CLI (limpiar interrupciones) no afecta estas condiciones. INT 03H: Punto de ruptura. Usado por depuración de programas para detener la ejecución. INT 04H: Desbordamiento. Puede ser causado por una operación aritmética, aunque por lo regular no realiza acción alguna. INT 05H: Imprime pantalla. Hace que el contenido de la pantalla se imprima. Emita la INT 05H para activar la interrupción internamente, y presione las teclas Cltr + PrtSC para activarla externamente. La operación permite interrupciones y guarda la posición del cursor. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 21 INT 08H: Sistema del cronometro. Una interrupción de hardware que actualiza la hora del sistema y (si es necesario) la fecha. Un chip temporizador programable genera una interrupción cada 54.9254 milisegundos, casi 18.2 veces por segundo. INT 09H: Interrupción del teclado. Provocada por presionar o soltar una tecla en el teclado. INT OBH, INT OCH: Control de dispositivo serial. Controla los puertos COM1 y COM2, respectivamente. INT 0DH, INT OFH: Control de dispositivo paralelo. Controla los puertos LPT1 y LPT2, respectivamente. INT 0EH: Control de disco flexible. Señala actividad de disco flexible, como la terminación de una operación de E/S. INT 10H: Despliegue en vídeo. Acepta el numero de funciones en el AH para el modo de pantalla, colocación del cursor, recorrido y despliegue. INT 11H: Determinación del equipo. Determina los dispositivos opcionales en el sistema y regresa el valor en la localidad 40:10H del BIOS al AX. (A la hora de encender el equipo, el sistema ejecuta esta operación y almacena el AX en la localidad 40:10H). INT 12H: Determinación del tamaño de la memoria. En el AX, regresa el tamaño de la memoria de la tarjeta del sistema, en términos de kilobytes contiguos. INT 13H: Entrada/salida de disco. Acepta varias funciones en el AH para el estado del disco, sectores leídos, sectores escritos, verificación, formato y obtener diagnostico. Los dos módulos del DOS, IO.SYS y MSDOS.SYS, facilitan el uso del BIOS. Ya que proporcionan muchas de las pruebas adicionales necesarias, las operaciones del Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 22 DOS por lo general son mas fáciles de usar que sus contrapartes del BIOS y por lo común son independientes de la maquina. Las interrupciones desde la 20H hasta la 3FH están reservadas para operaciones del DOS. INT 20H: Termina programa. Finaliza la ejecución de un programa .COM, restaura las direcciones para Cltr + Break y errores críticos, limpia los bufer de registros y regresa el control al DOS. Esta función por lo regular seria colocada en el procedimiento principal y al salir de el, CS contendría la dirección del PSP. La terminación preferida es por medio de la función 4CH de la INT 21H. INT 21H: Petición de función al DOS. La principal operación del DOS necesita una función en el AH. INT 22H: Dirección de terminación. Copia la dirección de esta interrupción en el PSP del programa (en el desplazamiento 0AH) cuando el DOS carga un programa para ejecución. A la terminación del programa, el DOS transfiere el control a la dirección de la interrupción. Sus programas no deben de emitir esta interrupción. INT 23H: Dirección de Cltr + Break. Diseñada para transferir el control a una rutina del DOS (por medio del PSP desplazamiento 0EH) cuando usted presiona Ctlt + Break o Ctlr + c. La rutina finaliza la ejecución de un programa o de un archivo de procesamiento por lotes. Sus programas no deben de emitir esta interrupción. INT 24H: Manejador de error critico. Usada por el dos para transferir el control (por medio del PSP desplazamiento 12H) cuando reconoce un error critico (a veces una operación de disco o de la impresora).Sus programas no deben de emitir esta interrupción. INT 25H: Lectura absoluta de disco. Lee el contenido de uno o mas sectores de disco. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 23 INT 26H: Escritura absoluta de disco. Escribe información desde la memoria a uno o mas sectores de disco. INT 27H: Termina pero permanece residente (reside en memoria). Hace que un programa .COM al salir permanezca residente en memoria. INT 2FH: Interrupción de multiplexion. Implica la comunicación entre programas, como la comunicación del estado de un spooler de la impresora, la presencia de un controlador de dispositivo o un comando del DOS tal como ASSIGN o APPEND. INT 33H: Manejador del ratón. Proporciona servicios para el manejo del ratón. 1.3.1 Hardware Se les conoce con este nombre a las interrupciones causadas o generadas por dispositivos de hardware, como dispositivos de Entrada, dispositivos de salida, etc. Se dividen en: a) Interrupciones Internas de Hardware. Las interrupciones internas son generadas por ciertos eventos que surgen durante la ejecución de un programa. Este tipo de interrupciones son manejadas en su totalidad por el hardware y no es posible modificarlas. Un ejemplo claro de este tipo de interrupciones es la que actualiza el contador del reloj interno de la computadora, el hardware hace el llamado a esta interrupción varias veces durante un segundo para mantener la hora actualizada. Aunque no podemos manejar directamente esta interrupción (no podemos controlar por software las actualizaciones del reloj), es posible utilizar sus efectos en la computadora para nuestro beneficio, por ejemplo para crear un "reloj virtual" actualizado continuamente gracias al contador del reloj interno. Únicamente debemos escribir Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 24 un programa que lea el valor actual del contador y lo traduzca a un formato entendible para el usuario. b) Interrupciones Externas de Hardware. Las interrupciones externas las generan los dispositivos periféricos, como pueden ser: teclado, impresoras, tarjetas de comunicaciones, etc. También son generadas por los coprocesadores. No es posible desactivar a las interrupciones externas. Estas interrupciones no son enviadas directamente a la CPU, sino que se mandan a un circuito integrado cuya función es exclusivamente manejar este tipo de interrupciones. 1.3.2 Software Se les conoce con este nombre a las interrupciones causadas o generadas por software, como son programas en ejecución, interrupciones del Bios, interrupciones del Sistema Operativo, etc. Las interrupciones de software pueden ser activadas directamente por el ensamblador invocando al número de interrupción deseada con la instrucción INT. El uso de las interrupciones nos ayuda en la creación de programas, utilizándolas nuestros programas son más cortos, es más fácil entenderlos y usualmente tienen un mejor desempeño debido en gran parte a su menor tamaño. Este tipo de interrupciones podemos separarlas en dos categorías: las interrupciones del sistema operativo DOS y las interrupciones del BIOS. La diferencia entre ambas es que las interrupciones del sistema operativo son más fáciles de usar pero también son más lentas ya que estas interrupciones hacen uso del BIOS para lograr su cometido, en cambio las interrupciones del BIOS son mucho más rápidas pero tienen la desventaja que, como son parte del hardware son muy específicas y pueden variar dependiendo incluso de la marca del fabricante del Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 25 circuito. La elección del tipo de interrupción a utilizar dependerá únicamente de las características que le quiera dar a su programa: velocidad (utilizando las del BIOS) o portabilidad (utilizando las del DOS). 1.4 Estructura de un programa en ensamblador Un programa en ensamblador contiene cuatro partes fundamentales llamados segmentos: Cada - Segmento de Memoria - Segmento de Datos - Segmento de Pila - Segmento de Código segmento debe estar incluido en un programa de ensamblador (preferentemente), y estos segmentos generalmente (según sea el caso) deben inicializarse o configurarse. Todos los programas deberán tener mínimamente la siguiente estructura: .Model SMALL .STACK .DATA ; Sección para definir variables y constantes .CODE Inicio: MOV AX,@DATA MOV DS,AX ∶ MOV AH, ACH INT 21H END Inicio Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 26 .MODEL modelo de memoria El modelo de memoria puede ser TINY, SMALL, MEDIUM, COMPACT o LARGE. Los requisitos para cada modelo son: Puede utilizar cualquiera de estos modelos para un programa autónomo (esto es, un programa que no este enlazado con algún otro). El modelo TINY esta destinado para uso exclusivo de programas .COM, los cuales tienen sus datos, código y pila en un segmento. El modelo SMALL exige que el código quepa en un segmento de 64K y los datos en otro segmento de 64K. Los formatos generales (incluyendo el punto inicial) para las directivas que define los segmentos de la pila, de datos y de código son: .STACK [tamaño] .DATA .CODE [nombre] 1.4.1 Data Segment Este segmento es utilizado para los datos, aunque en ensamblador a diferencia de un lenguaje de alto nivel, el uso de variables es transparente, puesto que en Lenguaje Ensamblador el uso de la memoria es directo, por tanto, los nombres de las variables solo corresponden al nombre asignado para un espacio de memoria reservado de acuerdo a las especificaciones requeridas. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 27 Dicho espacio de memoria es manipulado directamente, lo cual facilita el uso y a la vez lo complica. CONSTANTES El valor de una constante se asigna en la parte correspondiente al segmento de datos por medio de la directiva EQU. Sintaxis: NOMBRE EQU VALOR Ejemplo: Constante EQU 11001B RESUL EQU 573H VARIABLES Como se mencionó anteriormente, es el nombre simbólico de una posición de memoria correspondiente a segmento de datos la cual es accesible por programa. Para declarar variables se usa cualquiera de las siguientes directivas: NOMBRE DIRECTIVA VALOR DB realiza el almacenamiento por bytes (1 localidad de memoria) DW realiza el almacenamiento por palabras (2 localidades) DD realiza el almacenamiento por palabras dobles (4 localidades) DQ realiza el almacenamiento por palabras cuádruples (8 localidades) DT realiza el almacenamiento por paquetes de diez bytes. Las variables que son de tipo cadena deberá colocarse su valor entre comillas y terminar con el signo $. El tipo de directiva es importante, por que de ella dependerá el manejo de la variable creada. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 28 1.4.2 Stack Segment Es el segmento que permite definir el tamaño del Segmento de pila. La pila, es un segmento de la memoria principal que se reserva para un uso específico. La pila funciona LIFO (Last Input, First Output), y utiliza dos funciones: PUSH Esta función sirve para almacenar información o colocar valores dentro de la pila, su sintaxis es: Push valor POP Esta función sirve para sustraer información o sacar valores almacenados en la pila, su sintaxis es: Pop variable 1.4.3 Code Segment Segmento en el que se colocan las instrucciones o código del programa, generalmente se inicia con las siguientes dos líneas de código y una etiqueta para indicar el programa principal. Inicio: MOV AX,@DATA MOV DS,AX Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 29 Estas dos instrucciones permiten a ensamblador iniciar el segmento de datos, es decir, tomar la memoria principal para iniciar la ejecución de un programa en ensamblador. 1.4.4 Instrucciones de un programa en ensamblador Una herramienta que permite visualizar el funcionamiento de las instrucciones utilizadas en lenguaje ensamblador es el DEBUG, debug se encuentra contenido dentro del sistema operativo MS-DOS. DEBUG El programa debug proporciona las órdenes que permiten controlar y examinar cada paso de un programa en lenguaje ensamblador, debug se suele usar cuando se está desarrollando un nuevo programa y se desea comprobar su funcionamiento al nivel de lenguaje máquina. Para llamar a debug: C:\> DEBUG ↵ El programa responde con el símbolo “ - ”, que es el indicador del depurador. A partir de ese momento estamos en posibilidad de invocar cualquiera de las siguientes instrucciones: COMANDO R Register, Registro DESCRIPCIÓN FORMATO Permite desplegar y modificar el contenido de -R todos - R AX los registros internos del microprocesador Despliega el contenido de un bloque de : - D [Rango] memoria correspondiente al segmento de D Dump, Vaciar datos. Muestra el contenido de cada localidad en sistema hexadecimal e indicando a la vez su correspondiente carácter ASCII. Solo sirve -D 0100 0108 Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 30 -D 0105 L12 para el segmento de datos. Donde el rango se especifica como una dirección inicial hasta una dirección final, o bien como una dirección inicial hasta L direcciones consecutivas. Si no se especifica un rango, se despliega el contenido de las 128 localidades siguientes a la última en forma localidad mostrada. Nos permite introducir código -A [Dirección] nemotécnica. En A Assemble, Ensamblar donde dirección es el valor del desplazamiento en el segmento de código a -A 0100 partir de donde será almacenado el código 1591:0100 MOV AX, [BX] introducido. 1591:0102 MOV AL, [BP+DI] Si este parámetro no es especificado, el código se guardará a partir de la localidad siguiente donde fue almacenada la última instrucción. Muestra el contenido de un bloque de 1591:0104 - -U [rango] memoria correspondiente al segmento de código. U Unassemble, Desensamblar El visualiza contenido en forma de de la memoria instrucciones lo del -U 0100 0105 ensamblador, tanto en forma desensamblada como ensamblada. Donde rango se define de manea similar al comando vaciar (D) Nos T Trace, Trazo permite ejecutar una instrucción de -T programa, visualizando los resultados por medio de una salida semejante a la del comando R Nos permite ejecutar un fragmento de un -G [direccion_final] programa. G Go, Ejecutar Donde dirección_final memoria hasta donde es la será dirección de ejecutado el -G 0109 programa Suma y resta dos cantidades hexadecimales H Aritmética hexadecimal -H op1 op2 visualizando ambos resultados. Donde op1 y op2 son los datos en hexadecimal. En el cálculo de la diferencia -H 0105 0100 op1 es el minuendo y op2 es el sustraendo. Se utiliza para dar nombre a un programa. N Name, Nombre -N nombre Donde el parámetro nombre indica un nombre de programa con extensión .COM .EXE Q Quit, Salir W Write, Grabar Termina la ejecución de debug y regresa el -Q control a la línea de órdenes del DOS. Se utiliza ara grabar programas en forma permanente. Para hacerlo debemos: -W Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 31 1. Definir la longitud del programa en bytes. -N ejemplo.com 2. Crear un nombre para el programa. 3. Colocar la longitud del programa en 4. 5. -R CX el registro CX. CX 0000 Colocar o apuntar el registro IP al :5 inicio del programa. -R IP Dar la orden de escritura. IP 0100 : -W Nos permite cargar un programa al entorno -L [direccion] de debed. Donde dirección es la posición de memoria en el segmento de código a partir de la cual será L Load, Cargar cargado el programa. Para ello se debe tomar -N ejemplo.COM en cuenta: -L 0100 1. Proporcionar el nombre del programa que va a ser cargado. 2. Cargar. 3. Desensamblar para verificar -U 0100 L5 si realmente fue cargado el archivo. Permite modificar el contenido de la memoria E Enter, Introducir -E dirección [dato] en el segmento de datos. Donde dirección es la localidad de memoria a partir de la cual se van a guardar datos. -E 0200 1.5 Procedimiento de ensamble, enlace y ejecución. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco Los archivos fuente de código ensamblador 32 deben estar en formato ASCII standard. Para esto puede usarse cualquier editor que permita crear archivos sin formato y guardarlos con extensión .asm. Los comentarios se declaran con ; y terminan al final de la línea. El ensamblado se lleva a cabo invocando al MASM. Este puede ser invocado, usando una línea de comando, de la siguiente manera: MASM archivo [,[objeto][,[listado][,[cross]]]]][opciones][;] Donde: archivo.- Corresponde al programa fuente. Por defecto se toma la extensión .ASM. objeto.- Es el nombre para el archivo objeto. listado.- Nombre del archivo de listado de ensamblado. cross.- Es un archivo de referencias cruzadas. opciones.- Pueden ser: /A escribe los segmentos en orden alfabético /S escribe los segmentos en orden del fuente /Bnum fija buffer de tamaño num /C especifica un archivo de referencias cruzadas /L especifica un listado de ensamble /D crea listado del paso 1 /Dsym define un símbolo que puede usarse en el ensamble /Ipath fija path para buscar archivos a incluir /ML mantiene sensitividad de letras (mayús./minús) en nombres /MX mantiene sensitividad en nombre públicos y externos /MU convierte nombres a mayúsculas /N suprime tablas en listados /P checa por código impuro /R crea código para instrucciones de punto flotante /E crea código para emular instrucciones de punto flotante /T suprime mensajes de ensamble exitoso /V despliega estadísticas adicionales en pantalla /X incluir condicionales falsos en pantalla /Z despliega líneas de error en pantalla Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 33 La otra forma de invocar al ensamblador es sólo tecleando MASM y respondiendo a la información que se solicita. Para omitir algún valor sólo basta teclear ENTER si dar ningún valor. De la misma forma que el ensamblado, la fase de liga se lleva a cabo con el LINK. Este puede ser invocado de la misma forma que el MASM. Los parámetros que este requiere son: LINK objeto [,[ejecutable][,[mapa][,[librería]]]]][opciones][;] Donde: objeto.- Es el nombre para el archivo .OBJ ejecutable.- Nombre del archivo .EXE mapa.- Nombre del archivo mapa librería.- Nombre del archivo biblioteca de rutinas opciones.- Pueden ser: /HELP muestra lista de opciones /PAUSE pausa en el proceso /EXEPACK empaca archivo ejecutable /MAP crea mapa se símbolos públicos /LINENUMBERS copia número de líneas al mapa /NOIGNORECASE mantiene sensitividad en nombres /NODEFAULTLIBRARYSEARCH /STACK:size fija el tamaño del stack a usar /CPARMAXALLOC:número /HIGH fija alojación máxima de espacio fija la dirección de carga más alta /DSALLOCATE aloja grupo de datos /NOGROUPASSOCIATION ignora asociaciones para direcciones /OVERLAYINTERRUPT:número /SEGMENTS:número /DOSSEG no usa bibliotecas por defecto asigna nuevo número a la INT 03Fh procesa un número de segmentos sigue la convención de orden de DOS Para la ejecución del programa simplemente basta teclear su nombre en el prompt de MS-DOS y teclear ENTER. Con esto el programa será cargado en memoria y el ejecutarlo. sistema procederá a Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 34 1.6 Entorno de programación El entorno de programación del Lenguaje Ensamblador, es el entorno de consola, por tanto, antes de programar en ensamblador se necesita aprender los comandos básicos del DOS. Como ya se mencionó la edición de un programa en ensamblador, tiene que ser mediante un editor de texto (Ejemplo el bloc de notas) y tiene que almacenarse con extensión .asm y después salir al símbolo del sistema (en el caso de Windows) y ahí ensamblar, enlazar y ejecutar el programa construido. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 35 UNIDAD II ELEMENTOS DEL LENGUAJE 2.1 Instrucciones Lineales Las instrucciones básicas en Lenguaje ensamblador son las siguientes: 2.1.1 Movimiento La instrucción para mover información de un lugar a otro es la instrucci{on MOV, que funciona como si fuera el operador = Instrucción Mov, almacena el contenido de la fuente en el destino. Formato: MOV Destino, Fuente Y se puede utilizar como ya se mencionó en los Modos de Desplazamiento. 2.1.2 Pila Las instrucciones para la manipulación de la Pila son Push y Pop. PUSH Esta función sirve para almacenar información o colocar valores dentro de la pila, su sintaxis es: Push valor Donde valor puede ser una constante o una variable Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 36 POP Esta función sirve para sustraer información o sacar valores almacenados en la pila, su sintaxis es: Pop variable Recordando siempre que la pila funciona LIFO. 2.1.3 Matemáticos Instrucción ADD Suma sin acarreo ADC Suma con acarreo SUB Resta SBB Resta con préstamo MUL Multiplicació n IMUL Multiplicació n con signo DIV División IDIV División con signo INC DEC Incrementar Decrementar Descripción Formato Suma la fuente al destino y guarda el resultado en el desino ADD destino, fuente Suma la fuente con el destino, guardando el resultado en el destino e incrementándolo en 1 si la bandera de acarreo (CF) está activada. Se utiliza para sumar datos de 32 bits, donde el resultado se guarda en el registro par DX:AX Resta la fuente del destino almacenando el resultado en el destino. Resta la fuente del destino, almacenando el resultado en el destino y decrementándolo en 1, si la bandera CF se encuentra activada. Realiza la multiplicación de dos datos sin signo. Dependiendo de la longitud de los operandos se puede se puede tener: Fuente * AL = AX Fuente * AX = DX:AX Es similar a la instrucción MUL, con la única diferencia de que opera con datos representados en notación de complemento a 2 con signo. Realiza una división sin signo. Existen dos casos: AL AX Fuente AX Fuente DX:AX AH DX ADC destino, fuente Opera de manera similar que DIV a excepción de que los números son representados en notación de complemento a 2 con signo. Incrementa en 1 al destino IDIV fuente Decrementa en 1 al destino DEC destino SUB destino, fuente SBB destino, fuente MUL fuente IMUL fuente DIV fuente INC destino Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 37 2.1.4 Ajustes Instrucción Descripción Negación bit a bit Negativo NOT NEG Formato Realiza la negación bit a bit del operando destino NOT Destino Genera el complemento a 2 del operando destino NEG Destino 2.1.5 Comparación Instrucción Descripción CMP Comparar TEST Probar Formato Resta operando fuente del destino sin guardar el resultado, afectando únicamente el registro de banderas. Realiza la conjunción bit a bit entre el operando fuente y el destino, sin guardar el resultado. Afectando únicamente al registro de banderas. CMP Destino, Fuente TEST Destino, Fuente 2.2 Saltos Al ser el lenguaje ensamblador un lenguaje estructurado, existen instrucciones para “Saltar” la ejecución normal de un programa, es decir, se envía el flujo de la ejecución a otro lado del programa, estos saltos pueden ser condicionales o incondicionales. 2.2.1 Incondicional Un salto incondicional, como su nombre lo dice, no necesita condiciones para saltar, es decir, simplemente se coloca la función y el salto se realiza sean cual sean las condiciones del programa. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 38 El salto incondicional puede realizarse mediante la función: Instrucción JMP Salto incondicional Descripción Envía el flujo de control del programa a la dirección de memoria situada en el segmento Formato JMP etiqueta 2.2.2 Condicional Los saltos condicionales, solo envían el flujo del control del programa si la condición que especifican se ha cumplido. Los saltos condicionales son: SALTO AL COMPARAR NÚMEROS SIN SIGNO Instrucción JA JNBE JAE JNB JB JNAE JBE JNA Salta si está por encima Salta si no está por debajo o igual Salta si está por encima o igual Salta si no está por por debajo Salta si está por debajo Salta si no esta por encima o igual Salta si está por debajo o igual Salta si no está por encima Descripción Formato CF = 0 CF = 0 ZF = 0 ZF = 0 CF = 0 Envía el flujo de control del programa a la dirección de memoria situada en el segmento CF = 0 CF = 1 CF = 1 CF = 1 CF = 1 ZF = 1 ZF = 1 SALTO AL COMPARAR NÚMEROS CON SIGNO Instrucción JG JNLE JGE JNL JL JNGE JLE JNG JE JNE Salta si es mayor que Salta si no es menor o igual que Salta si es mayor o igual Salta si no es menor Salta si es menor Salta si no es mayor o igual Salta si es igual o menor Salta si no es mayor Salta si es igual Salta si no es igual Descripción Formato ZF = 0 Y SF = OF ZF = 0 Y SF = OF SF = OF SF = OF Envía el flujo de control del programa a la dirección de memoria situada en el segmento SF = OF SF = OF ZF = 1 O SF = OF ZF = 1 O SF = OF ZF = 1 ZF = 0 Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 39 2.3 Tipos de Ciclos Instrucción LOOP Ciclo Descripción Decrementa CX en 1 y después transfiere el flujo de control a una etiqueta corta si CX es diferente de 0. Formato LOOP etiqueta 2.4 Operadores Lógicos Instrucción Conjunción AND Disyunción OR XOR Disyunción exclusiva Descripción Realiza la operación lógica Y Formato AND Destino, Fuente Realiza la operación lógica O OR Destino, Fuente Realiza las operaciones lógicas correspondientes XOR Destino, Fuente 2.5 Desplazamiento Los desplazamientos dentro del Lenguaje Ensamblador, se trabajan a nivel de bits de los valores de las variables (como todas las operaciones en ensamblador), para entender los desplazamientos, se necesita tener el valor de una variable en su equivalente binario y los desplazamientos o corrimientos se realizan de acuerdo a la instrucción indicada, y pueden ser lineales o circulares. 2.5.1 Lineal Los desplazamientos o corrimientos lineales, mueven los bits hacia la derecha o izquierda según sea el caso, y pierden bits del lado del corrimiento. El número de bits que se pierde en este tipo de corrimientos depende del conteo especificado, los bits perdidos son sustituidos por ceros. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco Instrucción SHL Corrimiento a la izquierda SHR Corrimiento a la derecha 40 Descripción SHL Å Destino Formato Realiza corrimientos de bits a la izquierda en dato almacenado en el destino. Conteo indica número de desplazamientos a realizar. Realiza corrimientos de bits a la derecha en dato almacenado en el destino. Conteo indica número de desplazamientos a realizar. el el SHL Destino, Conteo el el SHR Destino, Conteo SHR Å0 Æ Destino 0Æ 2.5.2 Circular Los desplazamientos o corrimientos circulares, mueven los bits hacia la derecha o izquierda según sea el caso de forma circular, es decir, no se pierde ningún bit por que estos dan vuelta en circulo. Instrucción ROL ROR RCL RCR Rotación a la izquierda Rotación a la derecha Rotación a la izquierda con acarreo Rotación a la derecha con acarreo ROL Descripción ROR Destino, Conteo Desplaza un número determinado de bits en el destino, colocando los bits que salen del registro al principio o al final. Conteo indica el número de desplazamientos a realizar. ROR Destino RCL Destino RCL Destino, Conteo RCR Destino, Conteo Destino CF Formato ROL Destino, Conteo RCR Destino CF Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 41 2.6 Procesos de Control Los procesos de control se refiere a instrucciones para el control de algunas características especiales, entre ellas: 2.6.1 Banderas Banderas Desactivadas: XF = 0 Activadas XF = 1 OF DF IF SF ZF AF PF CF NV UP DI PL NZ NA PO NC OV DN EI NG ZR AC PE CY SALTO SEGÚN EL ESTADO DEL REGISTRO DE BANDERAS Instrucción Acarreo Cero Sobreflujo Signo Paridad Descripción JC JNC JZ JNZ JO JNO JS JNS JP JNP Salta Salta Salta Salta Salta Salta Salta Salta Salta Salta si si si si si si si si si si Formato existe acarreo no existe acarreo es cero no es cero hay sobreflujo no hay sobreflujo es negadito no es negativo o es positivo el número de 1 es par el número de 1 es impar o no es par CF = 1 CF = 0 ZF = 1 ZF = 0 OF = 1 OF = 0 SF = 1 SF = 0 PF = 1 PF = 0 2.6.2 Cadenas Instrucción CMPS Descripción Formato Compara cadenas, es decir, compara dos secciones de datos de memoria de bytes, palabras o palabras dobles. Utiliza para la comparación los registros DS y SI como apuntadores para las cadenas a comparar. CMPS Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 42 2.6.3 Carga Instrucción LEA Descripción Formato Carga la dirección efectiva de Fuente en Destino, es decir, Destino convierte en un puntero a Fuente se Lea Destino, Fuente Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 43 UNIDAD III MODULARIZACIÓN 3.1 Macros Una macro es un grupo de instrucciones que efectua una tarea con un formato muy parecido al de un procedimiento. La diferencia que existe con respecto a una rutina es que el MACRO se inserta o expande en el programa principal como nuevo código que contiene una secuencia de instrucciones. Las macros se asemejan a las funciones en los lenguajes de alto nivel. Las macrosecuencias se ejecutan con mayor rapidez que los procedimientos por que no hay que ejecutar instrucciones de llamado ni retorno. En este caso las instrucciones de macro se colocan en el programa en el punto donde se les invoca. Para delinear una macrosecuencia se hace uso de las directivas: MACRO y ENDM NOMBRE MARCO PARAM1, PARAM2, … , PARAMN ∶ ENDM El primer enunciado de un macro contiene su nombre y una lista de parámetros relacionados con el mismo. El siguiente ejemplo define a la macro MOVER donde se manejan 2 parámetros. MOVER MACRO A,B PUSH AX MOV AX,B MOV B,AX Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 44 POP AX ENDM 3.1.1 Internas Una Macro interna, como su nombre lo dice se encuentra dentro del programa principal. Ejemplo: ;PROGRAMA QUE ACEPTA DOS DATOS DESDE TECLADO, LOS SUMA Y DESPLIEGA EL RESULTADO .MODEL SMALL SUMA MACRO R,S1,S2 PUSH AX MOV AX,S1 ADD AX,S2 MOV R,AX POP AX ENDM .STACK .DATA VAR1 DW ? VAR2 DW ? RESUL DW ? M1 DB "INTRODUCE EL PRIMER VALOR:$" M2 DB 10,13,"INTRODUCE EL SEGUNDO NÚMERO:$" M3 DB 10,13,"SUMA:$" .CODE EXTRN RECIBE_DATO:FAR EXTRN IMP_CADENA:FAR EXTRN IMP_AX:FAR INICIO: MOV AX,@DATA MOV DS,AX LEA DX,M1 CALL IMP_CADENA CALL RECIBE_DATO Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 45 MOV VAR1,SI LEA DX,M2 CALL IMP_CADENA CALL RECIBE_DATO MOV VAR2,SI LEA DX,M3 CALL IMP_CADENA SUMA RESUL,VAR1,VAR2 MOV AX,RESUL CALL IMP_AX MOV AH,4CH INT 21H END INICIO 3.2 Procedimientos Los procedimientos son subprogramas que se encuentran dentro o fuera del programa principal. Estos pueden ser: 1. Internos 2. Externos 3.2.1 Internos Esta clase de rutinas o subprogramas se encuentra dentro del archivo del programa principal. En programa pueden incluirse cuantos procedimientos sean necesarios. .MODEL SMALL .STACK .DATA Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 46 ∶ Se usa la palabra Call para llamar o usar el procedimiento .CODE INICIO: ∶ CALL NOMBRE_PROCEDIMIENTO ∶ MOV AH,4CH INT 21H Para procedimientos Internos NOMBRE_PROCEDIMIENTO PROC NEAR PUSH REGISTROS Regresa el control al programa principal ∶ CODIGO DEL PROCEDIMIENTO Deben guardarse los valores de todos los registros para que no se pierdan ∶ POP REGISTROS RET NOMBRE_PROCEDIMIENTO ENDP Se regresan los valores a los registros END INICIO Ejemplo: Programa que incluye un procedimiento interno que imprime una cadena .MODEL SMALL .STACK .DATA CADENA DB “Procedimientos..$” .CODE INICIO: MOV AX,@DATA Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 47 MOV DS,AX LEA DX, CADENA CALL IMPCADENA MOV AH,4CH INT 21H IMPCADENA PROC NEAR PUSH AX MOV AH,9 INT 21H POP AX RET IMPCADENA ENDP END INICIO 3.2.2 Externos Es aquella que se encuentra en un segmento de código diferente al que almacena el programa principal, es decir, se encuentra en un archivo diferente. Su formato es semejante al de un procedimiento interno donde la única diferencia estriba en que será de tipo lejano (FAR) en lugar de cercano (NEAR). Para incluir una rutina externa dentro de un programa usar: Extrn Nombre_Procedimiento:far El archivo principal puede llamar a todas las rutinas externas necesarias, y el archivo que contiene la rutina externa puede contener mas de una rutina. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 48 Ejemplo: ; ESTE ARCHIVO CONTIENE EL PROGRAMA PRINCIPAL, LLAMADO PRINCIPAL.ASM .MODEL SMALL .STACK .DATA CADENA DB “Procedimientos..$” .CODE Incluye el procedimiento externo EXTRN IMPCADENA:FAR INICIO: MOV AX,@DATA MOV DS,AX LEA DX, CADENA CALL IMPCADENA MOV AH,4CH INT 21H END INICIO ;ESTE ARCHIVO CONTIENE LA RUTINA EXTERNA LLAMADA IMPCAD.ASM .MODEL SMALL .CODE PUBLIC IMPCADENA INICIO: IMPCADENA PROC FAR PUSH AX MOV AH,9 INT 21H POP AX RET IMPCADENA ENDP END INICIO Alcance del procedimiento Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 49 Para crear el archivo ejecutable: 1. Compilar por separado cada archivo fuente MASM PRINCIPAL; MASM IMPCAD; se obtendrá: Principal.obj Impcad.obj 2. Enlazar de la siguiente manera: LINK PRINCIPAL + IMPCAD; Al final se genera el ejecutable PRINCIPAL.EXE y es el que se ejecuta. La ventaja principal de las rutinas externas, es que puede generarse un archivo que contenga a todas ellas, y usarlas para cualquier archivo, puede generarse una rutina para: - Aceptar a AX desde teclado - Imprimir el valor de AX A continuación se presenta el archivo MODULO.ASM, que contiene estas tres principales rutinas. .MODEL SMALL .DATA NUM DB 5 DUP (?) E DB " $" .CODE PUBLIC IMP_CADENA PUBLIC RECIBE_DATO PUBLIC IMP_AX INICIO: Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco IMP_CADENA PROC FAR ;imprime una cadena apuntada por DX PUSH AX MOV AH,9 INT 21H POP AX RET IMP_CADENA ENDP RECIBE_DATO PROC FAR ;recibe un dato desde teclado y lo almacena en SI PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AX,@DATA MOV DS,AX LEA DI,NUM MOV CL,4 S1: MOV AH,1H INT 21H CMP AL,0DH JE S2 MOV [DI],AL DEC CL INC DI CMP CL,0 JE S2 JMP S1 S2: MOV CL,24H MOV [DI],CL MOV BX,0 MOV CX,0 MOV SI,DI LEA DI,NUM MOV CX,1 50 Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco E3: DEC SI MOV AH,0 MOV AL,[SI] SUB AL,30H MOV DX,0 MUL CX ADD BX,AX MOV DX,0 MOV AX,CX MOV CX,10 MUL CX MOV CX,AX CMP DI,SI JNE E3 MOV SI,BX POP DI POP DX POP CX POP BX POP AX RET RECIBE_DATO ENDP IMP_AX PROC FAR; imprime en pantalla el contenido de AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH AX MOV AX,@DATA MOV DS,AX POP AX MOV BX,10 LEA SI,E 51 Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco ADD SI,3 CICLO: MOV DX,0 DIV BX ADD DL,30H MOV [SI],DL DEC SI CMP AX,0 JNE CICLO LEA DX,E MOV AH,9H INT 21H POP SI POP DX POP CX POP BX RET IMP_AX ENDP END INICIO 52 Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 53 UNIDAD IV PROGRAMACIÓN HÍBRIDA Interrupciones INTERRUPCIONES DEL DOS Realiza Llamada FIJAR POSICIÓN DEL CURSOR AH 02H BH Número de página (0 para modos gráficos) DH Renglón Int 10/02 DL Columna Devuelve Descripción Nada Se usa para colocar el cursor en una posición específica. Las posiciones se definen en relación con la esquina superior izquierda (0,0) cuando la pantalla está en modo de texto. La esquina inferior izquierda es (79,24) en el modo de texto 80x25 y (39,24) en el modo 40x25. Realiza Llamada ESCRIBIR CARÁCTER Y ATRIBUTO AH 90H AL Carácter ASCII BH Página de presentación visual BL Byte de atributo del carácter en AL CX Número de caracteres por escribir Int 10/09 Devuelve Descripción Nada Escribe los bytes del carácter ASCII y atributo en la posición del cursor en una página específica de presentación. Esta función no cambia la posición del cursor. Escribe hasta 65536 caracteres en modo de texto. Conforme la función escribe caracteres, cambia de renglón al terminar cada uno. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 54 En el modo de graficación, la función solo va al final del renglón en curso y el byte de atributo de video asignado a BL determina el color del carácter escrito. Si el bit 7 vale 1, se le aplica XOR al valor en BL, con el color del fondo cuando se muestra el carácter. Realiza Llamada FIJAR PALETA DE COLOR AH 0BH BH Identificación de la paleta de color que se está fijando 0, BL tienen el color de fondo y borde 1, BL tiene color de paleta BL Valor del color que se usará Devuelve Descripción Nada Esta función selecciona o fija el contenido de la paleta de color y solo trabaja en pantallas de gráficos de definición media. La función no tiene efecto directo sobre la memoria; Int 10/0B afecta la forma en que el controlador de TRC 6845 interpreta la memoria de video. En modo de texto, esta función establece el color del borde. Las paletas de color válidas para esta función son: Paleta 0 1 Píxel Color 0 Igual que el fondo 1 Verde 2 Rojo 3 Café 0 Igual que el fondo 1 Cianato 2 Magenta 3 Blanco Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 55 Realiza ESCRIBE UN SOLO PÍXEL EN LA PANTALLA EN UNA COORDENADA ESPECIFICADA Llamada AH 0CH AL Valor del color BH Número de página Int 10/0C CX Número de columna del píxel DX Número de renglón del píxel Devuelve Descripción Nada En modos de definición media, el efecto de esta función depende de la paleta en uso. Si el bit de Al es 1, al nuevo color se le aplica XOR con el píxel actual. Realiza ESCRIBIR CADENA Llamada AH 13H AL Modo de escritura BH Página de video BL Atributo (modos de escritura 0 y 1) CX Longitud de la cadena DH Renglón en el cual se escribirá la cadena DL Columna en la cual se escribirá la cadena Int 10/13 ES:BP Apuntador a cadena Devuelve Descripción Nada Escribe una cadena de caracteres en la pantalla actual. La cadena designada puede tener atributos de caracteres incorporados o globales. El modo (AL) se especifica de la siguiente manera: MODO 0 COMENTARIOS Atributo en BL. La cadena es solo de caracteres. No se actualiza el cursor. 1 Atributo en BL. La cadena es solo de caracteres. Se Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 56 actualiza el cursor. 2 La cadena alterna caracteres y atributos. No se actualiza el cursos. 3 La cadena alterna caracteres y atributos. Se actualiza el cursor. Realiza Llamada LEER DISQUETE AH 02H AL Número de sectores por transferir (1 a 9) ES:BX Apuntador al buffer de disco del usuario CH Número de pista (0 a 39) CL Número de sector(1 a 39) DH Número de cabeza (0 o 1) DL Número de unidad (0 a 3) Int 13/02 Devuelve Bandera de acarreo en cero si hubo éxito AL número de sectorses transferidos Bandera de acarreo en uno si hubo error AH byte de estado Descripción Transfiere uno o más sectores de un disquete a la memoria. Todos los parámetros cuidadosamente antes de de entrada expedir deben una verificarse llamada para servicio; pasar un valor inválido puede producir resultados impredecibles. Int 13/03 Realiza Llamada ESCRIBE SECTORES DE DISCO AH 03H AL Número de sectores por transferir(1ª 9) ES:BX Apuntador al buffer de disco del usuario CH Número de pista (0 a 39) CL Número de pista(0 a 39) Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 57 CL Número de sector(1 a 9) DH Número de cabeza(0 o 1) DL Número de unidad(0 a 3) Devuelve Bandera de acarreo en cero si hubo éxito AH 0 AL Número de sectores transferidos Bandera de acarreo en uno si hubo error AH Byte de estado Descripción Escribe uno o mas sectores de la memoria al disquete. Excepto por el número de unidad de disco, no se verifica la validez de los valores. Pasar un valor invalido puede producir resultados impredecibles. Realiza Llamada DAR FORMATO A PISTA DEL DISCO AH 05H ES:BX Apuntador a lista de campos de direcciones de pistas CH Número de pista DH Número de cabeza DL Número de unidad Devuelve Int 13/05 Descripción AH Código de retorno Da formato a una pista de disco iniciando los campos de dirección de disco y los sectores de dastos. La operación de dar formato a disco es controlada por la lista de campos de direcciones de pistas (ES:BX).l atabla está dispuesta como una serie de entradas de 4 bytes (una para cada sector de la pista), con cada entrada de la manera siguiente: DESPLAZAMIENTO SIGNIFICADO 00H Número de pista 01H Número de cabeza 02H Número de sector Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 58 03H Código de tamaño Realiza PREPARA PUERTO DE COMUNICACIONES Llamada AH 00H AL Parámetro de iniciación DX Número de puerto (0=COM1, 1=COM2, 2=COM3, 3=COM4) Devuelve AH Estado de puerto AL Estado de MODEM Descripción Se usa para preparar un puerto serial (DX). Especifique como debe prepararse el puerto (AL) usando lo siguiente: Bit 2 Int 14/00 Bits 7,6,5 Bits 4,3 Velocidad de paridad Bits 1,0 Bits de Longitud alto bauds de palabra 000=110 00=ninguna 0=1 10=7 bits 001=150 01= impar 11=8 bits 010=300 10=ninguna 011=600 11=par 1=2 100=1200 101=2400 110=4800 111=9600 Int 14/01 Realiza Llamada ESCRIBE UN CARÁCTER EN PUERTO DE COMUNICACIONES AH 01H AL Carácter por escribir DX Número de puerto (0=COM1, 1=COM2, 2=COM3, 3=COM4) Devuelve AH bit 7=0 no hubo error Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 59 AH bit 7=1 error; los bits 0 a 6 muestran la causa de la falla Descripción Escribe un carácter en el puerto serial especificado y devuelve el estado de este. Antes de llamar a esta función, asegúrese de usar Int 14/00 para preparar el puerto. Realiza LEE CARÁCTER DEL PUERTO DE COMUNICACIONES Llamada AH 02H DX Número de puerto (0=COM1, 1=COM2, 2=COM3, 3=COM4) Int 14/02 Devuelve AH bit 7=0 no hubo error AL Carácter AH bit 7 = 1 error Descripción Lee un carácter del puerto serial especificado y devuelve el estado del puerto. Antes de llamar a esta función se debe preparar el puerto. Realiza Llamada SOLICITAR EL ESTADO DEL PUERTO DE COMUNICACIONES AH 03H DX Número de puerto (0=COM1, 1=COM2, 2=COM3, 3=COM4) Int 14/03 Devuelve AH Estado del puerto AL Estado del modem Descripción Esta función, que devuelve el estado del puerto de comunicaciones especificado, solicita el estado sin hacer E/S adicionales ni afectar el puerto de alguna otra manera. Int 15/4F Realiza Llamada INTERCEPCIÓN DEL TECLADO AH 4FH Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 60 Bandera de acarreo en 1 AL Código de examinación del teclado Devuelve Bandera de acarreo en uno AL Nuevo código de examinación Bandera de acarreo en cero AL Código de examinación original Descripción Devuelve el código de examinación en el registro AL con la bandera de acarreo en uno. Realiza Llamada ABRIR DISPOSITIVO AH 80H BX Identificación del dispositivo Int 15/80 CX Identificación del proceso Devuelve Bandera de acarreo en uno si hubo error AH 86H Descripción Fue diseñada para usarse en operaciones rudimentarias de múltiples tareas. Realiza Int 15/85 TECLA DE SOLICITUD DE SISTEMA PRESIONADA Llamada AH 85H Devuelve AL 00H tecla presionada 01H yecla liberada Descripción BIOS llama a esta función siempre que la tecla de solicitud del sistema se presionada o liberada. Int 15/86 Realiza ESPERA Llamada AH 86H CX,DX Tiempo antes del regreso en microsegundos (exacto Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 61 hasta en 976 microsegundos) Devuelve Bandera de acarreo en uno (espera en progreso) Bandera de acarreo en cero (espera exitosa) Descripción Fue diseñada para usarse dentro del software de sistema operativo para establecer esperas del sistema. Realiza Int 16/00 LEER CARÁCTER DE TECLADO Llamada AH 00H Devuelve AH Código de examinación de teclado AL Código de carácter ASCII Descripción Espera y lee un solo carácter del buffer del teclado y lo devuelve junto con su código de examinación. El buffer del teclado por lo general se localiza en 0040;001ª Realiza LEER ESTADO DEL TECLADO Llamada AH 01H Devuelve Bandera de cero en cero si se oprimió un atecla AH Código de examinación AL carácter ASCII Int 16/01 Bandera de cero en uno si no se oprimió tecla alguna Descripción Si se oprimió alguna tecla, esta función pone cero en la bandera de cero y devuelve el código ASCII de la digitación y el código de examinación del teclado. Si no hay digitaciones por procesar, la función pone 1 en la bandera de cero y regresa. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 62 Realiza DEVOLVER BANDERAS DE TECLADO Llamada AH 02H Devuelve AL Byte de banderas de teclado de BIOS ROM Descripción Devuelve el esdtaso de los conmutaciones biestables y las teclas shift del registro de estado de BIOS mantenido en la localidad de memoria 0000:0417H. la siguiente tabla muestra el significado de los bits del registro AL al volver de la función. Int 16/02 Realiza Int 16/10 7 6 5 4 3 2 1 0 Significado . . . . . . . 1 Tecla shift derecha oprimida . . . . . . 1 . Tecla shift izquierda oprimida . . . . . 1 . . Tecla ctrl. oprimida . . . . 1 . . . Tecla Alt oprimida . . . 1 . . . . Scroll Lock habilitado . . 1 . . . . . Num Lock habilitado . 1 . . . . . . Caps Lock habilitado 1 . . . . . . . Tecla Insert activada OBTENER DIGITACIÓN Llamada AH 10H Devuelve AH Código de examinación AL caracter Descripción Int 17/00 Realiza Llamada Permite el reconocimiento de teclas similares ESCRIBIR CARÁCTER EN IMPRESORA AH 00H AL Carácter DX Número de impresora (0 a 2) Devuelve AH Estado de impresora Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 63 Descripción Escribe el carácter especificado en el puerto de impresora y devuelve el estado actual de la impresora. Realiza Llamada Int 17/01 PREPARAR PUERTO DE IMPRESIÓN AH 001H DX Número de impresora (0 a 2) Devuelve Descripción AH Estado de la impresora Prepara el puerto paralelo de la impresora y devuelve el estado de este. Realiza LEER RELOJ DE TIEMPO REAL Llamada AH 02H Devuelve Bandera de acarreo en cero si hubo éxito CH Horas (BCD) CL Minutos (BCD) Int 1A/02 DH Segundos (BCD) DL Bandera de tiempo de aprovechamiento de la luz de día Bandera de acarreo en uno si hubo error Descripción Devuelve los valores del reloj en BCD (decimal codificado en binario) Int 1A/03 Realiza Llamada FIJAR RELOJ DE TIEMPO REAL AH 03H CH Horas (BCD) CL Minutos (BCD) DH segundos (BCD) DL Tiempo de ahorrro de luz de día Devuelve Nada Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 64 Descripción Los valores deben establecerse en BCD. DL se codifica para indicar si el reloj mantiene un tiempo estándar (DL=0) o tiempo de aprovechamiento de la luz del día(DL=1) Realiza LEER FECHA DEL RELOJ DE TIEMPO REAL Llamada AH 04H Devuelve Bandera de acarreo en cero si hubo éxito CH Siglo (BCD) Int 1A/04 CL Año DH Mes DL Día Bandera de acarreo en uno si hubo error Descripción Realiza Llamada Devuelve los valores de reloj en BCD. FIJAR FECHA DEL RELOJ DE TIEMPO REAL AH 5H CH Siglo CL Año Int 1A/05 DH Mes DL Día Devuelve Descripción Int 1A/06 Realiza Nada Los valores del reloj deben establecerse en BCD FIJAR ALARMA DEL SISTEMA, FIJA EL CRONÓMETRO DE ALARMA DEL SISTEMA PARA GENERAR UNA INTERRUPCIÓN EN UN MOMENTO FUTURO Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 65 Llamada AH 06H CH Horas CL Minutos DH Segundos Devuelve Bandera de acarreo en cero si hubo éxito Bandera de acarreo en uno si hubo error Descripción Los valores para fijar la alarma deben estar en BCD. Fijar la alarma representa un desplazamiento del tiempo presente. Cuando el tiempo se acaba, el sistema emitirá una Int 04 (desborde aritmético) . antes de reestablecer la alarma, debe inhabilitarla con un Int 1A/07 y definir un manejador de interrupción para manejarla. Realiza Int 1A/07 INHABILITA ALARMA DEL RELOJ DE TIEMPO REAL Llamada AH 07H Devuelve Nada Descripción Esta función inhabilita la alarma del reloj de tiempo real. Si ya se fijó la alarma, se debe usar esta función para poder fijarla de nuevo. Realiza Llamada MOSTRAR SALIDA AH 02H DL Datos con caracteres de 8 bits Int 21/01 Devuelve Descripción Nada Dirige la salida a la pantalla de video (STDOUT). La función manejará el carácter de retroceso (backspace) adecuadamente como un retroceso no destructivo en pantalla. Ctrl-C y Ctrl-Break se manejan a través de Int 23. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 66 Realiza SALIDA AUXILIAR Llamada AH 04H Int 21/04 DL Datos de 8 bits como salida para STDAUX Devuelve Descripción Realiza Llamada Nada Se usa para enviar un carácter por el puerto serial. MOSTRAR CADENA AH 09H DS:DX Apuntador a cadena terminada con $ Int 21/09 Devuelve Descripción Nada Envía a la salida series contiguas de caracteres del mismo modo que Int 02 muestra caracteres individuales. Todos los caracteres que comienzan en una dirección especificada se envían a la salida hasta que se encuentra un signo de $ Realiza OBTENER FECHA DEL SISTEMA Llamada AH 2AH Devuelve CX Año (1980 a 2099) DH Mes (1 al 12) Int 21/2A DL Día(1 a 31) AL Día de la semana (0=domingo, 1=lunes, etc) Descripción Devuelve la fecha del sistema basándose en el reloj interno de DOS. Int 21/2B Realiza Llamada ESTABLECER FECHA DEL SISTEMA AH 2BH CX Año (1980 a 2099) Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 67 DH Mes DL Dia Devuelve AL 00H, fecha establecida exitosamente FFH fecha invalida, no establecida Descripción Normalmente solo se establece la porción de fecha del reloj interno del DOS, pero si la computadora tiene un reloj CMOS con esta función también se establece la fecha de este. Realiza OBTENER HORA DEL SISTEMA Llamada AH 2CH Devuelve CH Hora (0 a 23) CL Minutos (0 a 59) Int 21/2C DH Segundos (0 a 59) DL centésimas de segundo (0 a 99) Descripción Obtiene la hora del reloj interno del DOS, la cual solo es exacta si fue establecida correctamente. Realiza Llamada ESTABLECER LA HORA DEL SISTEMA AH 2DH CH Hora CL Minutos DH Segundos Int 21/2D DL centésimas Devuelve AL 00H hora fijada exitosamente FFH hora inválida, no establecida Descripción Normalmente, solo se establece la porción de hora del reloj interno de DOS. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 68 Realiza TERMINAR Y PERMANECER RESIDENTE Llamada AH 31H AL Código de retorno DX Tamaño de memoria por reservar(en párrafos) Int 21/31 Devuelve Descripción Nada Termina la operación del programa pero no libera la memoria asignada a este ni cierra los archivos abiertos. Esta función permite mas de 64K de memoria y el control del código de retorno, que está disponible para el programa padre a través de Int 21/4D Realiza Llamada OBTENER ESPACIO LIBRE DEL DISCO AH 36H DL Unidad de diso 0=omisión 1=A, 2=b, etc Int 21/36 Devuelve AX Sectores por grupo, FFFFH si la unidad es inválida BX Número de grupos disponibles CX bytes por sector DX Grupos en unidad Descripción Esta función devuelve información básica que puede usarse para determinar el espacio disponible en disco Realiza Llamada CREAR SUBDIRECTORIO AH 39H DS:DX Apuntador a especificación de trayectoria ASCII Int 21/39 Devuelve Bandera de acarreo en cero si hubo éxito Bandera de acarreo en uno si hubo error AX 03H trayectoria no encontrada 05H acceso negado Descripción Permite la creación de nuevos directorios. La función Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 69 devolverá un error y no creará el directorio si este ya existe, si cualquier elemento del nombre de la trayectoria no existe o si el directorio proviene de la raíz y la raíz está llena. Realiza Llamada ELIMINAR SUBDIRECTORIO AH 3AH DS:DX Apuntador a especificación de trayectoria ASCII Devuelve Bandera de acarreo en cero si hubo éxito Bandera de acarreo en uno si hubo error Int 21/3A AX 03H trayectoria no encontrada 05H acceso negado 06H directorio actual 10H directorio actual Descripción Permite el borrado de un directorio especificado, pero solo si existe, está vacío y no es el directorio por omisión. Realiza ESTABLECER DIRECTORIO Llamada AH 3BH DS:DX Apuntador a cadena de trayectoria ASCII Int 21/3B Devuelve Bandera de acarreo en cero si hubo éxito Bandera de acarreo en uno si hubo error AX 03H trayectoria no encontrada Descripción Le permite cambiar el directorio actual (similar a la orden CD) Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 70 Realiza BORRAR ARCHIVO Llamada AH 41H DS:DX apuntador a especificación de archivo ASCII Devuelve Bandera de acarreo en cero si hubo éxito Bandera de acarreo en uno si hubo error AX 02H archivo no encontrado Int 21/41 05H acceso negado Descripción Borra un archivo marcando la entrada de directorio con un E5H en el primer byte del nombre del archivo. Solo ese byte se modifica en la entrada del directorio. Los grupos asignados al archivo son devueltos al sistema para un nuevo uso. No se permiten caracteres comodín en el nombre del archivo. Realiza Llamada RENOMBRAR ARCHIVO AH 56H DS:DX apuntador a nombre ASCII de archivo actual ES:DI apuntador a nuevo nombre ASCII de archivo Devuelve Bandera de acarreo en cero si hubo éxito Bandera de acarreo en uno si hubo error AX 02H archivo no encontrado Int 21/56 03H trayectoria no encontrada 05H acceso negado 11H no es el mismo dispositivo Descripción Permite renombrar archivos incluso en directorios diferentes. En esta función no es válido usar caracteres comodín, pero sí es posible especificar nombres de trayectorias completas. No renombre archivos abiertos pues esto puede traer resultados impredecibles. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco 71 Realiza CREAR ARCHIVO Llamada AH 5BH CX atributo DS:DX apuntador a especificación de archivo ASCII Devuelve Bandera de acarreo en cero si hubo éxito AX Control Bandera de acarreo en uno si hubo error AX 03H trayectoria no encontrada Int 21/5B 04H no hay controles disponibles 05H acceso negado 50H archivo ya existe Descripción Esta función que consitutye el método normal para crear un archivo, devuelve un control de archivo para un acceso posterior. El archivo se crea como un archivo normal con acceso de lectura/escritura. No se pueden crear etiquetas de volumen ni subdirectorios. Lenguaje Ensamblador Ing. Claudia Yadira Luna Carrasco CONJUNTO DE CARACTERES ASCII EN HEXADECIMAL 72