Rojas Vallejo - Unidad IV Programación de Dispositivos
Rojas Vallejo - Unidad IV Programación de Dispositivos
Rojas Vallejo - Unidad IV Programación de Dispositivos
Leguajes de Interfaz
Unidad IV –
Programación de
Dispositivos
Bibliografía ……………………………………………………………………………………………... 10
1
4.1. El buffer de video en modo texto
Antes de que se desarrolle el tema por completo, es necesario dejar en claro qué es el buffer.
Se define al buffer como un espacio de memoria donde se almacenan datos de manera temporal
con la finalidad de ser procesados durante la ejecución de un programa, normalmente cuando
los datos llegan con una velocidad mayor que la de procesamiento o cuando estos arriban
esporádicamente. Por lo general, dichos datos son generados por algún dispositivo de entrada
como las teclas presionadas en un teclado, las cuales se almacenan en el buffer antes de ser
impresas en pantalla. Uso del modo de video en ensamblador:
Una vez que ya se conoce lo que es el buffer y su función, podemos definir lo que es el “modo
texto”.
Sin embargo, una enorme desventaja del modo texto, es que no tiene una interfaz orientada al
usuario, por lo que puede ser complicado adaptarse a su uso.
Un ejemplo de programas que utilizan el modo texto, muy utilizados en la actualidad, son “Shell”
de las distribuciones Linux, el Debug del lenguaje ensamblador y la CMD de Windows, siguiendo
un formato bastante similar, donde no se utilizan componentes gráficos y la manera de interactuar
con ellos es a través de comandos. A continuación, se muestran algunas imágenes
representativas del modo texto:
2
CMD en Windows SHELL en Linux
La lectura de discos es uno de los procesos más complejos que pueden llevarse a cabo desde
el lenguaje ensamblador, ya que se requieren diversos pasos y conceptos a comprender para
que esto sea llevado a cabo de manera exitosa. La lectura o escritura del disco se lleva a cabo
en bloques de bytes, debido a que el acceso implica movimientos mecánicos del disco y que la
información en él se almacena por sectores, denominados “tracks” o pistas, que se encuentran
físicamente en el disco donde se encuentran los datos.
El equipo debe poseer tres funciones para llevar a cabo operaciones de entrada/salida:
• MOV AH, 3Fh: Transfiera el contenido de uno o más sectores del disco al buffer
especificado, entrando directamente a los sectores lógicos. Cuando surge un error, el bit
de acarreo es encendido y AX contiene el código de error.
• MOV AH, 40h: Transfiere el contenido del buffer especificado a uno o más sectores
lógicos del disco. En caso de que exista un error, sucede lo mismo que con la operación
de escritura.
3
• : Esta función retorna en DX:AX el espacio libre en disco. Este valor se encuentra
cuantificado en Kilobytes, y si ocurre un error, se enciende el bit de acarreo.
• MOV AH, 3Dh: Esta función permite abrir un archivo existente en el ordenador,
generalmente va acompañada de la función MOV AL, 0, que indica el modo lectura.
• MOV AH, 3Eh: Permite cerrar el archivo que se abrió durante el programa.
• MOV CX, valor: Define cuantos bytes se van a ir leyendo del archivo.
• MOV BX, valor: Cantidad de bytes que serán leídos en el disco, en este caso, el tamaño
del archivo.
• MOV DX, offset var: Esta instrucción obtiene después de “offset” la dirección del archivo
a leer.
Es necesario que el registro DX posea el número del puerto en serie. El primero se denomina
00h, su nombre es “COM1”. Para configurar o inicializar el puerto serial, se colocan los valores
en el registro AL que sean equivalentes a los parámetros.
MOV AL, 83h ; CONFIGURACIÓN 1200 BAUDIOS (TASA DE BITS) PARA EL PUERTO.
4
MOV AH, 4Ch ; SERVICIO 4Ch de INT 21h para terminar el programa.
El puerto en paralelo es una interfaz que funciona de manera similar a la del puerto en serie,
con la finalidad de transmitir datos digitales desde el computador, con la condición de que estos
no van bit por bit, sino que se transmiten al mismo tiempo, dependiendo la capacidad del cable
utilizado. La información se envía en paquetes de bytes, y es posible que vayan en ambas
direcciones por caminos diferentes. El puerto en paralelo se compone de los siguientes pines:
Cabe destacar, que cada uno de los pines del puerto tiene un identificador que permite saber
su funcionalidad. Esto se mostrará a continuación en la siguiente imagen:
Este tipo de programación mezcla lenguajes de programación de alto nivel con lenguaje
ensamblador, llevando a cabo operaciones a nivel de máquina y esto permite que se aprovechen
las características de ambos tipos de lenguaje, buscando que los códigos se ejecuten con mayor
facilidad y de manera más eficiente.
La programación híbrida es utilizada principalmente por las ventajas de ambos paradigmas que
son combinados para su creación. Mientras que el lenguaje ensamblador proporciona un mayor
control sobre el hardware del equipo computacional, los lenguajes de alto nivel permiten una
mejor estructuración de los programas de modo que sean más legibles para los programadores,
además de tener mayor compatibilidad con el software del equipo. Por lo anterior, es que se
recomienda el uso de la programación híbrida para la implementación de código ensamblador,
de modo que sea más sencilla la manipulación y modulación de las instrucciones, sin perder las
ventajas sobre el hardware que nos permiten.
Uno de los ejemplos más comunes de programación híbrida, es Turbo Pascal. Este lenguaje
tiene una conexión directa con Turbo Ensamblador, lo cual permite hacer implementación de
procedimientos y funciones escritas en el lenguaje ensamblador e incluirlas en código escrito en
Pascal, mediante las palabras reservadas Assembler y Asm, esto con la finalidad de indicar que
se utilizará la sintaxis en ensamblador para la implementación de instrucciones. A continuación,
se ejemplifica el uso de Turbo Pascal con ensamblador:
Assembler; Indica que el código será escrito en lenguaje ensamblador (también se usa “asm”).
BEGIN;
END;
De la misma manera, es posible llevar a cabo programación híbrida con otros lenguajes de alto
nivel, como lo es JAVA, el cual utiliza el componente JNI ( Java Native Interface) para llevar a
6
cabo instrucciones en ensamblador, bajo el riesgo de que es posible desestabilizar la máquina
virtual de JAVA (JVM), que es el entorno donde se ejecutan los programas.
Cabe mencionar, que JNI no es una API segura o sencilla de utilizar, se requiere de altos
conocimientos en programación para hacer uso de ella, debido a que existen muchos riesgos en
caso de cometer un error, siendo el más común impedir la carga de código de alto nivel en el
equipo o deshabilitando funcionalidades a nivel máquina. Además de lo anterior, es necesario
que siempre que se dejen de utilizar las instancias de objetos, se deslocalicen los punteros, ya
que no existe el “recolector de basura” para eliminar los componentes de manera automática.
public native int sumar(int a, int b); //INVOCACIÓN DE LAS FUNCIONES NATIVAS
static {
System.loadLibrary("operacionesImpl");
int n1 = 2;
int n2 = 3;
Otra manera de programar de manera híbrida, es a través del lenguaje C, haciendo uso de la
palabra reservada “asm”:
asm{
mov ah,0
int 10h
8
4.6 Programación de puerto USB
El Bus Universal en Serie o USB por sus silgas en inglés, es un bus de datos estándar que
promueve los protocolos para la alimentación de energía o transmisión de información entre los
dispositivos electrónicos como lo son los computadores, los teléfonos celulares y periféricos. Este
bus ha permitido la interconexión entre dispositivos de diferentes fabricantes, ya que sigue ciertos
estándares aplicados en la mayor parte de los dispositivos actuales, desde simples memorias
hasta tarjetas de red o televisiones inteligentes.
Con el lenguaje ensamblador, podemos acceder al puerto USB mediante la interrupción INT
14h, ya sea para configurar, leer, escribir o conocer el estado de la interfaz. Dichas opciones se
pueden seleccionar a través del registro AH, seleccionando mediante parámetros los servicios
de la interrupción, los cuales se muestran:
Las instrucciones nos permitirán configurar al puerto de modo que podamos establecer una
velocidad menor o mayor dependiendo el dispositivo, o incluso leer archivos directamente desde
el antes mencionado con mayor eficiencia.
Un ejemplo de cómo configurar la velocidad del puerto USB a 1200 baudios mediante el
lenguaje ensamblador, es el siguiente:
9
Bibliografía
10