Rojas Vallejo - Unidad IV Programación de Dispositivos

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 11

Instituto Tecnológico de Ciudad Madero

Leguajes de Interfaz

Unidad IV –
Programación de
Dispositivos

❖ Alumno: Juan David Rojas Vallejo

❖ Número de Control: 19070066

❖ Carrera: Ingeniería en Sistemas Computacionales

❖ Catedrático: Ing. Emilio Castán Rocha

❖ Grupo: 13:00 – 14:00 hrs.

1 de julio del 2021


Índice

4.1 El buffer de video en modo texto ………………………………………………………………… 2

4.2 Acceso a discos en lenguaje ensamblador …………………………………………………….. 3

4.3 Programación del puerto serial …………………………………………………………………... 4

4.4 Programación del puerto paralelo ………………………………………………………………... 5

4.5 Programación híbrida ……………………………………………………………………………… 6

4.6 Programación de puerto USB …………………………………………………………………….. 9

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:

MOV AH, 00h

MOV AL, 13h ; <- Modo de video

INT 10h ; <- Interrupción de video

Una vez que ya se conoce lo que es el buffer y su función, podemos definir lo que es el “modo
texto”.

El modo texto es un modo de video en el cual representamos el contenido de la pantalla con


caracteres individuales pertenecientes al código ASCII en lugar de pixeles. Este modo lo
podemos observar comúnmente como una rejilla uniforme de celdas de caracteres. El uso del
modo gráfico fue reemplazado por el modo texto ya que tiene mayores ventajas:

• Un menor consumo de memoria


• Requisitos mínimos en cuanto al uso de ancho de banda.
• Una manipulación de la pantalla mucho más rápida.

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

4.2. Acceso a discos en lenguaje ensamblador

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:

• Direccionamiento o selección del dispositivo.


• Transferencia de datos entre el procesador y el dispositivo de almacenamiento.
• Sincronización y coordinación de las operaciones.

Existen tres maneras de acceder al disco mediante el lenguaje ensamblador, mediante la


lectura, la escritura y el cálculo del espacio libre en el antes mencionado. La instrucción en
lenguaje ensamblador que nos permite interactuar con archivos, lleva la sintaxis: MOV AH, 3Dh-
Se mencionarán las funciones para llevar a cabo las operaciones de interacción con el disco:

• 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.

4.3. Programación del puerto serial

Los equipos computacionales poseen una interfaz de comunicaciones de datos digitales,


frecuentemente utilizado para transmitir información bit a bit, enviando un bit al momento, este
se conoce como puerto serial. El lenguaje ensamblador permite la manipulación de esta interfaz
para intercambiar datos. Esto puede ser llevado a cabo mediante la interrupción 14h de la ROM
para configurar, leer, escribir o reconocer mediante el puerto en serie, sin embargo, cada una de
estas cuatro operaciones tiene un servicio de interrupción:

• INT 14h, 00: Inicializar puerto serie.


• INT 14h, 01: Enviar un dato.
• INT 14h, 02: Recibir un dato.
• INT 14h, 03: Obtener el estado del puerto.

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.

Ejemplo de programación del puerto serial:

MOV AH, 00h ; SE INICIALIZA EL PUERTO.

MOV AL, 83h ; CONFIGURACIÓN 1200 BAUDIOS (TASA DE BITS) PARA EL PUERTO.

MOV DX, 00h ; SELECCIONA EL PUERTO COM1.

INT 14h ; INTERRUPCIÓN DEL BIOS.

4
MOV AH, 4Ch ; SERVICIO 4Ch de INT 21h para terminar el programa.

INT 21h ; INTERRUPCIÓN SERVICIO DEL DOS.

4.4. Programación del puerto en puerto en paralelo

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:

• De estado: Dan información al sistema al igual que el de control.


• De datos: Por ellos sale información vital, utilizada para mostrar las salidas de datos.

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:

En lenguaje ensamblador es posible programar este puerto mediante la instrucción IN o escribir


un dato en el puerto con la instrucción OUT. Es necesario manipular el registro AL para que
funcione como fuente o como destino del dato, en operaciones de lectura o escritura
respectivamente. A continuación, se ilustra con un ejemplo el uso de estas instrucciones:

OUT DX, AL; Lleva al puerto DX el contenido del registro AL.

IN AL, DX; Lleva al registro AL lo que se encuentra en el puerto DX.

El puerto que se va a manipular es señalado por el registro DX en todo momento.


5
4.5. Programación híbrida

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:

procedure limpiar; Declaramos el procedimiento en Pascal,

Assembler; Indica que el código será escrito en lenguaje ensamblador (también se usa “asm”).

BEGIN;

Asm MOV AX, 0600h; Manipulamos el registro AX

INT 10h; Limpiamos pantalla.

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.

El propósito principal de JNI es el permitir a los programadores con experiencia el utilizar la


programación híbrida con lenguaje ensamblador, C o C++, con la finalidad de que puedan añadir
sus propias funcionalidades de software o hardware al lenguaje, haciendo uso de sintaxis a nivel
inferior. Con JNI, es posible que los objetos de JAVA sean manipulados por otros lenguajes, y
viceversa, permitiendo conexiones con distintos códigos para que estos sean modificados
haciendo uso de las secuencias de alto o bajo nivel.

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.

A continuación, se muestra un ejemplo del lenguaje JAVA con el componente JNI:

public class Operaciones {

public native int sumar(int a, int b); //INVOCACIÓN DE LAS FUNCIONES NATIVAS

public native int restar(int a, int b);

public native int multiplicar(int a, int b);

static {

System.loadLibrary("operacionesImpl");

public static void main(String[] args) {

int n1 = 2;

int n2 = 3;

Operaciones op = new Operaciones ();


7
int resultado = op.sumar(n1, n2);

System.out.println("El resultado de la suma es: " + resultado);

resultado = op.restar(n1, n2);

System.out.println("El resultado de la resta es: " + resultado);

resultado = op.multiplicar(n1, n2);

System.out.println("El resultado de la multiplicacion es: " + resultado);

Otra manera de programar de manera híbrida, es a través del lenguaje C, haciendo uso de la
palabra reservada “asm”:

void SetVideoMode (char modo) {

asm{

mov ah,0

mov al, [modo]

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:

• MOV AH, 00: Inicializar el puerto USB.


• MOV AH, 01: Enviar un dato.
• MOV AH, 02: Recibir un dato.
• MOV AH, 03: Obtener el estado del puerto.

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:

MOV AH, 00h: Se inicializa el puerto.

MOV AL, 83h; Configuramos a 1200 baudios sin paridad.

MOV DX, 00h; Seleccionamos el puerto COM1

INT 14h; Interrupción de la BIOS.

MOV AH, 4Ch; Terminamos el proceso.

INT 21h: Interrupción servicio del DOS.

9
Bibliografía

• (2003). “Modo de Video”. Universidad Tecnológica Nacional. Recuperado de:


https://www.investigacion.frc.utn.edu.ar/labsis/publicaciones/invesdes/3deng/Intro/13h.ht
m
• Beltrán B. (2011). “Ensamblador”. Benemérita Universidad Autónoma de Pueblo.
Recuperado de: http://bbeltran.cs.buap.mx/EnsambladorDisco.pdf
• (2013). “Programación de dispositivos”. Instituto Tecnológico de Piedras Negras.
Recuperado de:
http://itpn.mx/recursosisc/6semestre/lenguajesdeinterfaz/Unidad%20IV.pdf
• (2001). “Capítulo XIII: EL ENSAMBLADOR Y EL LENGUAJE C”. Universidad Autónoma
de Madrid. Recuperado de:
http://arantxa.ii.uam.es/~gdrivera/labetcii/curso0001/udigxiii.htm
• (2021). “Comunicación serial en lenguaje ensamblador”. Recuperado de:
https://hgr.tripod.com/puertos_ensamblador.html
• (2021). “Comunicación con el puerto paralelo en lenguaje ensamblador”. Recuperado de:
https://hgr.tripod.com/puertos_ensamblador.html

10

También podría gustarte