Práctica 0. Ejercicio propuesto


Practica 0 de ETC II

Objetivos:

Requisitos para la Practica 0 de ETC II
(conocimientos de los alumnos que se necesitan antes de la practica).

Conocimiento de la arquitectura básica del 8086.
- Registros
- Memoria. Segmentos.
- Modos de direccionamiento.
Conocimiento del ensamblador i86:
  - Directivas:
  - Comentarios,
        SEGMENT, ENDS, PROC,ENDP, ASSUME, PUBLIC, EXTRN,END.
 - Declaraciones:
      DW, DB
      DB 40 DUP (?).
Interacción básica con DOS (tal como está en las paginas WEB).
 - Teclado,
 - Consola,
 - Terminación del programa.

Estructura de un programa ASM

Estructura mínima:

A SEGMENT
INT 20h
A ENDS
END

La estructura  en nivel mas alto:

<nombre segmento> SEGMENT <atributos del segmento>
 ..... contenido del segmento
<nombre segmento> ENDS
<nombre segmento> SEGMENT <atributos del segmento>
 ..... contenido del segmento
<nombre segmento> ENDS
<nombre segmento> SEGMENT <atributos del segmento>
 ..... contenido del segmento
<nombre segmento> ENDS
 END <princ. del programa>
 

La estructura del contenido de un segmento:

 <declaraciones>

<nombre proc> PROC <atributos de procedimiento>
 ... instrucciones
<nombre proc> ENDP

En un buen programa:
 

Los comentarios del programa contienen:
  Autor, fecha, organización, titulo, breve descripción, símbolos exportados e importados,
  si el programa esta limitada a un sistema operativo o maquina.
Los comentarios del segmento describen el contenido de cada segmento, si está vacío, etc.
Los comentarios del PROC contienen:

Problemas ejemplo a resolver en esta practica:

Nivel 1:

Escribir una función que convierte un numero en AX a una cadena de símbolos ASCII en la dirección de memoria apuntada por ES:DI.
    CL contiene el numero de los decimales.
    Si  CH es 0, el contenido de AX se escribe sin signo y con ceros al principio
    Si CH es 1, el contenido de AX se escribe con signo ‘+’ o ‘-‘  y con 5 dígitos.

Nivel 2:
 Sustituir todos los ceros al principio antes de la coma decimal con espacio.

Nivel 3:
 Incluir las funciones en una biblioteca, exportando los símbolos necesarios.

Nivel 4:
 Escribir un programa principal, que utilizando la función de conversión, escribe el código ASCII que uno teclea multiplicado por 1,23. Por ejemplo: si el código ASCII es 64 la salida del programa será 78,72=64*1.23.

Enlazar el programa principal con la biblioteca y comprobar el programa.



Librerías:

Para que sirven:

Para agrupar muchos ficheros OBJ en un solo fichero.
Facilita la reutilización del código.  Estructura mejor el programa y por esto es imprescindible al escribir proyectos grandes. Normalmente es mucho mas independiente de otros módulos que una colección de ficheros OBJ.

Contenido de un fichero LIB.

En su versión más simple es una colección de ficheros OBJ. Para encontrar más fácil los símbolos que definen sus componentes se añaden estructuras extras.  Para los curiosos – leer las paginas man de ar de UNIX. Tal como cada SO o compilador proporciona herramientas para el manejo de librerías, el conocimiento de la estructura interna no es importante.

Como se  utiliza TLIB (ESSENCIAL LIB):

Añadir un fichero OBJ (MYPROG.OBJ) a una librería MYLIB.LIB y crearla si no existe:

TLIB MYLIB +MYPROG

Borrar un fichero OBJ (MYPROG.OBJ) de una librería (MYLIB.LIB).

TLIB MYLIB -MYOBJ

Sustituir un fichero OBJ (MYPROG.OBJ) de una librería con su nueva versión.

TLIB MYLIB -+MYOBJ
Nota: El orden -+ es importante.

Comprobar si la librería esta en orden:

TLIB MYLIB.

Como se utiliza una librería:

 Si el modulo que necesita una librería se llama por ejemplo MYMAIN.OBJ  y la librería MYLIB.LIB, entonces podemos escribir:

TLINK MYMAIN MYLIB.LIB



Recursos del sistema necesarios en estos ejercicios
 

El DOS y el BIOS del PC proveen de algunas rutinas de servicio que se pueden utilizar para incrementar la versatilidad de los programas del usuario. A estas rutinas se las llama utilizando las características de la interrupción por software del microprocesador 8086.


Fin de programa

    INT 21H AX = 4C00H

Descripción: Esta rutina finalizará el programa y devolverá el control al DOS. Debe llamar a esta rutina para finalizar los programas.
Uso:    Entrada:   AX = 4C00H
            Salida:     Ninguna
           Registros afectados:   Ninguno 
Status del teclado

    INT 21H AH = 0BH

Descripción: La función de esta rutina es detectar si se ha pulsado una tecla.

Uso:    Entrada:  AH = 0BH
           Salida:    AL = FF si carácter disponible
                           AL = 0 si carácter no disponible
           Registros afectados:    AL


Entrada de un carácter desde teclado

    INT 21H AH = 8H

Descripción: La función de esta rutina es esperar un carácter del teclado sin escribirlo por pantalla y almacenarlo en el
registro AL en forma de código ASCII.

Uso:    Entrada:   AH = 8H
            Salida:    AL = car cter ASCII de la tecla pulsada
            Registros afectados:   AL


Leer una línea de programa

    INT 21H AH = 0AH

Descripción: La función de esta rutina es la de obtener una línea de datos del teclado (que finaliza al pulsar el retorno de
carro) y almacenarlos en un  rea de memoria. Los caracteres son mostrados en la pantalla al ser tecleados.

Uso:    Entrada:   AH = 0AH
                            DS contiene la dirección del segmento de memoria en el cual se almacenan los datos introducidos.
                            DX contiene la dirección del offset de la zona de memoria del segmento anterior en la que se almacenan
                            los datos.
                            En el primer byte del área debe indicarse el máximo número de caracteres a introducir sin superar 255.
            Salida:     Ninguna en registro
                            En el segundo byte del área se almacena el número de caracteres tecleados sin contar el retorno de carro.
            Registros afectados:  Ninguno


Salida de un carácter por pantalla

    INT 21H AH = 2H

Descripción: La función de esta rutina es visualizar un carácter.

Uso:    Entrada:  AH = 2H
                            DL contiene el código ASCII del carácter a visualizar.
            Salida:    Ninguna
            Registros afectados:  Ninguno


Sacar un string a la pantalla

    INT 21H AH = 9H

Descripción: Su función es la de sacar una cadena de caracteres ASCII por pantalla.

Uso:    Entrada:   AH = 9H
                            DS contiene el valor de la dirección del segmento del comienzo de la cadena de caracteres a sacar.
                            DX contiene el offset de dicha cadena en el segmento anterior.
                            El último byte de la cadena de caracteres debe ser el carácter $, que no se muestra en pantalla.
            Salida:      Ninguna
            Registros afectados:   AX