Want to create interactive content? It’s easy in Genially!

Get started free

Programación de Dispositivos

Jose de la Peña

Created on November 6, 2023

Start designing with a free template

Discover more than 1500 professional designs like these:

Akihabara Microsite

Essential Microsite

Essential CV

Practical Microsite

Akihabara Resume

Tourism Guide Microsite

Online Product Catalog

Transcript

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

Lenguajes de Interfaz.

programación de dispositivos.

Unidad4.

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

4.1 el buffer de video en modo texto.

Un buffer (o búfer en español) es un espacio de memoria dedicado al almacenamiento temporal de información, en el cual se guardan datos durante el tiempo de espera antes de ser procesados. El ejemplo más común de un buffer es el streaming, que es la ejecución de audio o video sin descargarlo a la computadora o dispositivo en el que se quiere utilizar, ya que de no utilizar un búfer de video la posibilidad de que se corte la reproducción por un problema en el ancho de banda es mayor. El modo texto es un modo de video en el cual el contenido de la pantalla se representa por medio de caracteres en vez de pixeles individuales. La pantalla se muestra como un plano el cual contiene celdas de caracteres, cada una de las cuales almacena un carácter para desplegarlo. Generalmente los caracteres de los que se dispone al utilizar el modo texto son los caracteres ASCII.

El uso del modo texto se extendió mayormente durante los 70’s cuando las terminales de texto orientados a video empezaron a extenderse volverse el estándar.

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

El uso del modo texto respecto al grafico permite un menor consumo de memoria, una manipulación de pantalla más rápida y requisitos de ancho de banda menores en uso remoto, aunque tiene la desventaja de que solo puede desplegar los caracteres predefinidos que posee, lo que es el mayor limitante para su uso.

Ensamblador utiliza el modo texto para desplegar en pantalla, por lo que aunque puede ser muy eficiente para el manejo de recursos, no puede tener interfaces amigables con el usuario.

+ info

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

ejemplo 1.

El siguiente ejemplo en ensmblador cambia el modo de desplegado en la consola de salida.

código

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

ejemplo 3.

ejemplo 2.

El siguiente ensamblador cambia modo tamaño del cursor.

El siguiente ensamblador utiliza la función 09h para mostrar cinco asteriscos verde claro e intermitentes sobre fondo margenta.

código

código

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

4.2 Acceso a discos en lenguaje ensamblador.

El acceso a discos desde ensamblador es complejo y requiere que se entiendan varios conceptos para poder utilizarlo. El primero es que para poder escribir o leer desde un disco, se tiene que realizar en bloques de bytes y no byte por byte ya que el acceso implica movimientos mecánicos del disco y que la información en él se almacena por sectores. El proceso de acceso a disco no es llevado a cabo por la UCP, ésta solo envía comandos a la interfaz que maneja la unidad de disco, la cual se encarga de leer o escribir información del área de acceso directo a memoria o DMA (Direct Memory Access), la cual es un espacio de memoria especial para estos procesos.

El segundo concepto importante es cómo está constituido un disco de almacenamiento. Los discos están conformados físicamente por discos a los que se les denomina caras, los cuales estan divididos en anillos concéntricos a los cuales se les denomina pistas (track) y está dividido en un numero determinado de sectores, los cuales son divisiones de las pistas.

+ info

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

discos de almacenamiento...

2. Write.

A continuacion, se presentan tres formas de utilizar el acceso a discos, siendo la primera lectura, la segunda escritura y la tercera calcular espacio libre en un disco.

+write

3. Revisar Espacio Disponible.

1. Read.

+read

+free

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

4.3 Programación del puerto serial.

En lenguaje ensamblador se puede utilizar el puerto serial para el intercambio de datos, para lograrlo, se puede acudir a la interrupción 14H de la ROM-BIOS para configurar, leer, escribir o simplemente para conocer el estado del puerto; cada una de estas cuatro opciones es un servicio de la interrupción, y se seleccionan a través del registro AH. En todos los casos, el registro DX debe contener el número del puerto serie; el primero de ellos, COM1 se especifica como 00h.

+info

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

4.3 Programación del puerto serial.

Para configurar o inicializar el puerto serie, bastará con utilizar el servicio 00 de la interrupción, colocando en el registro AL los valores equivalentes a los parámetros, como se puede observar en las sig. tablas. Con éste método es posible obtener frecuencias de transmisión que van desde los 110 hasta los 9600 baudios.

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

4.3 Programación del puerto serial.

Para utilizar correctamente el puerto serial, es necesario conocer el significado de cada uno de sus bits, los cuales se pueden ver en la sig. Figura. Para enviar un dato por el puerto serial, bastará con colocar en el registro AH el valor 01 correspondiente a este servicio y en el registro AL el dato a ser enviado, invocando de nuevo la interrupción 14H.

La lectura de un dato que ha llegado al puerto se logra con el servicio 02, el cual devuelve en el registro AL el dato. La lectura del estado del puerto se consigue a través del servicio 03 de esta misma interrupción, y retorna en el registro AX el estado del puerto, el cual contendrá los bits que se muestran en la siguiente figura.

+read

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

ejemplo.

En este ejemplo se utiliza el lenguaje ensamblador para configurar el puerto serial para 1200 baudios, sin bit de paridad, sin bit de parada y 8 bits, realizando el siguiente programa:

Ensamblador.

mov ah,0 ;Servicio 00 de INT 14h: inicializa el puertomov al,83h ;configuración: 1200 baudios, no paridad, ;sin bit de parada, 8 bits de datosmov dx,00 ;Selecciona el puerto COM1int 14 ;Interrupción del BIOSmov ah,4c ;Servicio 4ch de INT 21h: terminarint 21 ;Interrupción servicio del DOS

En el libro “Lenguaje Ensamblador y Programación para PCs y Compatibles”, es posible profundizar mas en el tema. En el Capitulo 21 "Otras facilidades de Entrada/Salida" se habla de puertos (pag. 386), así como en otros temas a lo largo del libro.

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

4.3 Programación del puerto serial.

IN transfiere información desde un puerto de entrada al AL si es un byte y al AX si es una palabra. El formato general es: IN reg-acum,puerto. OUT transfiere información desde un puerto de salida al AL si es un byte y al AX si es una palabra. El formato general es: OUT puerto,reg-acum.

Un puerto es un dispositivo que conecta a un procesador con el mundo exterior. Por medio de un puerto, el procesador recibe una señal desde un dispositivo de entrada y envía una señal a un dispositivo de salida. Los puertos son identificados por sus direcciones en el intervalo de OH3FFH, o 1,024 puertos en total. Note que no son direcciones convencionales de memoria. Puede usar las instrucciones IN y OUT para manejar E/S directamente a nivel de puerto:

+info

+info

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

4.4 programación de puerto paralelo.

Es necesario saber que antes de utilizarlo, que el puerto paralelo se compone de los siguientes tipos de pines: De estado: Dan información al sistema al igual que el de control. De datos: Que son los más importantes, ya que por estos sale información crucial, la cual es la que se utiliza para mostrar las salidas de datos. Cada uno de los pines del puerto paralelo cuenta con un identificador y una función como se puede ver en la siguiente figura:

+ info

DB25 se utiliza para conexiones por el puerto paralelo. En un principio se utilizó para conectar impresoras y por este motivo, se le conoce como el "puerto de impresora" (abreviado LTP).

+ info

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

4.5 Programación Híbrida.

En C es posible utilizar programación hibrida. Para el siguiente ejemplo se utilizara lenguaje ensamblador y C++.. Es posible escribir procedimientos y funciones en código ensamblador e incluirlas como parte de programas escritos en C, para lo cual utiliza dos palabras reservadas: Assembler y Asm. Assembler permite indicarle a C que la rutina o procedimiento que se está escribiendo está escrita en código ensamblador. Los programas con código ensamblador alineado no son totalmente portables a otras plataformas de hardware. Si está diseñando para la portabilidad, evite utilizar el ensamblador alineado. El ensamblado en línea no se admite en los procesadores ARM y x64.

La programación hibrida consiste en mezclar lenguaje ensamblador con lenguajes de alto nivel, creando programas que aprovechen las ventajas de cada uno de estos, con el fin de que sean mas rápidos y eficientes.

La programación hibrida ó cruzada es regularmente utilizada programando la mayoría de la funcionalidad de la aplicación con un Lenguaje de programación de Alto Nivel, y cuando haya necesidad de ejecutar ciertas rutinas relacionadas al hardware y las cuales se ejecutarán más rápido debido a su sencillez y naturaleza de ser ensambladas, estas se pueden hacer en ensamblador. Sin embargo; el ensamblador alineado se compila en el compilador; por lo tanto, no necesitará un ensamblador independiente como Microsoft Macro Assembler (MASM). Dado que el ensamblador alineado no requiere pasos de ensamblado y vínculo independientes y de vínculo, es más aconsejable que un ensamblador independiente.

+info

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

4.6 Programación de puerto usb.

El Bus Universal en Serie o USB por sus siglas en inglés, es un bus estándar industrial que define los cables, conectores y protocolos utilizados en bus para conectar, comunicar y proveer de alimentación eléctrica a dispositivos y periféricos. Fue creado por las empresas que buscaban unificar la forma de conectar periféricos a los equipos, y aunque su versión 1.0 se publicó en 1996, no fue sino hasta 1998 con la especificación 1.1 que se comenzó a utilizar de forma masiva. La utilización del puerto USB en ensamblador es con los objetivos principales de reorientar la utilización de los periféricos para que tengan mejor rendimiento y utilizar al máximo sus capacidades, así como poder crear nuevos periféricos.

Fuentes Bibliográficas: Lenguaje Ensamblador y programacioón para IBM PC y Compatitbles, Peter Abel British Colombia Institute of Tecnology -3era Edición. Blog de Sistemas por Brandon Esquivel

DAY 2

DAY 3

DAY 4

DAY 5

DAY 6

DAY 7

DAY 1

Fin de Unidad.

Gracias.

Algunas de las direcciones de puertos principales son:

; Author: Jose Ruben de la Peña Fuentes; Program Name: u4_modo1.asm; Program Description: Ensamblador para cambiar tamaño del cursor ; Date:.model small.stack 64.data.code mov ah, 01h ; designar tamano de cursor mov ch, 00 ; linea inicial de rastreo mov cl, 14 ; linea final de rastraeo int 10h salir: mov ah,4ch int 21hend

; Author: Jose Ruben de la Peña Fuentes; Program Name: u4_modo1.asm; Program Description: Ensamblador cinco asteriscos verde claro e; intermitentes sobre fondo magenta; Date:.model small.stack 64.data.code mov ah, 09h ;solicita desplegar mov AL, '*' mov bh, 00h ; pagina num 0 mov bl, 0DAh ; atributo de color mov cx, 05 ; 5 veces int 10h salir: mov ah,4ch int 21hend

_FreeDiskSpace:

Devuelve en DX:AX el espacio libre en disco, expresado en Kilobytes. En caso de error, se enciende el bit de acarreo.

Es posible especificar una dirección de puerto estática o dinámicamente:

  • Estáticamente. Utilice un operando desde 0 hasta 255 directamente como:
Input IN AL,port# /Entrada de un byteOutput OUT port#,AX ,-Salida de una palabra
  • Dinámicamente. Utilice el contenido del registro DX, 0 a 65,535, indirectamente. Este método es adecuado para que incrementando el DX se procese de forma consecutiva las direcciones de los puertos. El ejemplo siguiente utiliza el puerto 60H:
MOV DX, 60H ;Puerto 60H (teclado)IN AL,DX ;Obtiene un byte

AbsoluteRead:

Transfiere el contenido de uno o mas sectores del disco al buffer especificado, accesando directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código de error.

En lenguaje ensamblador, se puede leer un dato del puerto mediante la instrucción IN ó escribir un dato en el puerto con la instrucción OUT , en ambos casos el registro AL debe participar activamente en la instrucción, bien sea como fuente (en operaciones de escritura) o destino (en operaciones de lectura) del dato, como en los siguientes casos: out DX, AL ;Lleva al puerto DX el contenido del registro AL in AL,DX ;Lleva al registro AL, el contenido del puerto DX Otra, exigencia, es que el número del puerto sobre el que se va a realizar la transferencia de datos debe estar señalado por el registro DX, a excepción de los casos en los cuales el número del puerto es inferior a 255 (FFh), en cuyo caso la instrucción que lee o escribe puede señalar directamente el puerto.

#include <stdio.h> int main() { int var; var = 2000; _asm { mov ecx, [var] bucle: sub ecx, 1 jnz bucle } printf("Bienvenido a la programacion en lenguaje C\n"); return 0; }

Bits de Retorno del Estado de Puerto Serial.

Representación de Discos de Almacenamiento.

; Author: Jose Ruben de la Peña Fuentes; Program Name: u4_modo1.asm; Program Description: Ensamblador para cambiar modo de video Texto; o estandar a color 80x25; 01:40 x 25 usando un adaptador de color; 10:80 x 25 usando un adaptador de color; 11:10 x 25 usando un adaptador monocromatico;; Date:.model small.stack 64.data.code; peticion para designar modo Texto o estandar a color 80 x 25 mov ah, 00h mov al, 03h ; cambiar 1, 2, 3 int 10h salir: mov ah,4ch int 21hend

Puertos en una PC (Desktop).

_AbsoluteWrite:

Transfiere el contenido del búfer especificado a uno o más sectores de disco, accesando directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código de error.