Interrupciones del Sistema, Funciones DOS y Segmentación de Memoria en Ensamblador

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,8 KB

Categorías de Interrupciones

  • Interrupciones de la CPU: La CPU genera estas interrupciones ante eventos internos.
  • Interrupciones de hardware: Producidas por dispositivos externos.
  • Servicios básicos de ROM BIOS: Funciones disponibles en la ROM.
  • Servicios BIOS de DOS: Funciones básicas provistas por DOS.
  • Funciones DOS: Funciones de alto nivel para el manejo del sistema de archivos y la E/S (Entrada/Salida).

Algunas Interrupciones de DOS Más Comunes

  • Función 01h: Permite dar entrada a un carácter desde el teclado y, al mismo tiempo, dicho carácter aparece en pantalla en la posición actual del cursor.
  • Función 02h: Permite enviar un carácter desde el procesador hacia la pantalla. Dicho carácter debe estar almacenado previamente en el registro DL. Aparecerá en la posición donde se encuentre el cursor.
  • Función 09h: Visualización de una cadena de caracteres. Permite enviar una cadena de caracteres hacia la pantalla. Dicha cadena aparecerá a partir de la posición en la que se encuentre el cursor.
  • Función 4Ch: Finalizar el proceso con código de retorno. Permite realizar el retorno al Sistema Operativo. Termina el proceso actual, enviando un código de retorno al programa que lo llamó. Se trata de uno de los diversos métodos para provocar una salida definitiva de un programa.

Segmentos de Memoria en Programas

Los programas en memoria tienen varias secciones o segmentos, los cuales sirven para organizar el manejo de la memoria por parte del programa.

Tipos de Segmentos de Memoria

  • CS (Code Segment - Segmento de Código): En este segmento se guardan las instrucciones, en lenguaje máquina, de nuestro programa.
  • DS (Data Segment - Segmento de Datos): En este segmento se guardan las variables globales del programa.
  • SS (Stack Segment - Segmento de Pila): En este segmento se guardan:
    • Las llamadas a las funciones.
    • Los parámetros de las funciones llamadas.
    • Las variables locales.

    Nota: Si la recursión es demasiado “profunda”, corremos el riesgo de llenar la pila y rebasarla. Este es un error de tiempo de ejecución llamado Desbordamiento de Pila (Stack Overflow).

  • HS (Heap Segment - Segmento de Montículo/Heap): En este segmento se guardan los objetos que han sido creados dinámicamente en tiempo de ejecución.

Directivas del Ensamblador MASM

El MASM (Microsoft Macro Assembler) posee un conjunto de instrucciones denominadas directivas. En general, las directivas son usadas para especificar la organización de memoria, realizar ensamblado condicional, definir macros, gestionar entrada/salida, controlar archivos, listados, referencias cruzadas, direcciones e información acerca de la estructura de un programa y las declaraciones de datos.

Directivas Importantes en MASM

Conjunto de Instrucciones

Dentro de las directivas más importantes, tenemos las que establecen el conjunto de instrucciones a soportar para un microprocesador en especial:

  • .8086 (default): Activa las instrucciones para el 8086 y 8088 e inhibe las del 80186 y 80286.
  • .8087 (default): Activa instrucciones para el coprocesador 8087 y desactiva las del 80287.
  • .186: Activa las instrucciones del 80186.
  • .286c: Activa instrucciones del 80286 en modo no protegido.
  • .286p: Activa instrucciones del 80286 en modo protegido y no protegido.
  • .287: Activa las instrucciones para el coprocesador 80287.

Declaración de Segmentos

En lo que respecta a la estructura del programa, tenemos las directivas SEGMENT y ENDS que marcan el inicio y final de un segmento del programa.

Un segmento de programa es una colección de instrucciones y/o datos cuyas direcciones son todas relativas al mismo registro de segmento. Las opciones alineación, combinación y clase proporcionan información al enlazador (LINK) sobre cómo ajustar los segmentos.

Opciones de Alineación

Para la opción “alineación” tenemos los siguientes valores:

  • byte: Usa cualquier dirección de byte.
  • word: Usa cualquier dirección de palabra (word) (2 bytes/word).
  • para: Usa direcciones de párrafo (16 bytes/párrafo, default).
  • page: Usa direcciones de página (256 bytes/page).

Entradas relacionadas: