jueves, 8 de diciembre de 2016

Control de los Puertos en Lenguaje Ensamblador

Comunicación serial en lenguaje ensamblador.  
En lenguaje ensamblador, 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. La figura 1 muestra los valores que debe contener el registro AH para invocar cada uno de los servicios. En todos los casos, el registro DX debe contener el número del puerto serie; el primero de ellos, COM1 se especifica como 00h.  
 
Servicio
Descripción
00
Inicializar puerto serie
01
Enviar un dato
02
Recibir un dato
03
Obtener el estado del puerto

figura 1.Servicios para el puerto serial disponibles a través de la interrupción 14H

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 la figura 2. Con éste método es posible obtener frecuencias de transmisión que van desde los 110 hasta los 9600 baudios. 


figura 2
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 figura 3.
 


figura 3
Por ejemplo, podemos utilizar 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: 
mov ah,0   ;servicio 00 de INT 14h: inicializar puerto
mov a1,83 ;configuración: 1200 baudios, no paridad,    
                ;un bit de parada, 8 bits de datos  
mov dx,00 ;Seleccionar puerto COM1 
int 14        ;interrupción del BIOS  
mov ah,4c ;servicio 4ch de INT 21h: terminar 
int 21        ;interrupción servicio del DOS
Este programa (en donde todos las cantidades están expresadas en hexadecimal) se puede tornar ejecutable utilizando algunos de los ensambladores para PC, o utilizando el comando DEBUG del DOS. 
Otra forma de seleccionar los parámetros de la comunicación y lograr ésta, es mediante la modificación y consulta de los registros correspondientes al circuito integrado que maneja la comunicación serial: el UART 8250 o similar. Como se sabe, este circuito integrado puede ser manejado como un puerto, en el cual es posible la escritura o lectura de sus estados. 
Comunicación con el puerto paralelo en lenguaje ensamblador.
En lenguaje ensamblador, se puede leer un dato del puerto mediante la instrucción IN ó escribir un dato en el puerto con la instrució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 le 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. 
Como veran la utilización del puerto paralelo en lenguaje emsamblador es muy sencilla. 


Encender led mediante puerto paralelo.

Codigo.

STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP(0)
STACK ENDS
ASSUME CS:COD ,DS:COD
COD SEGMENT

MES1 DB  ‘Encender y Apagar LED con puerto paralelo’
MES2 DB  ‘Oprimir S para Salir ‘
MES3 DB  ‘Fin del Programa’
MENSAJE DW 0

MAIN PROC FAR
MOV AX.CS
MOV DS.AX

MOV MENSAJE OFFSET MES1
CALL ESCRIBIR
MOV MENSAJE OFFSET MES2
CALL ESCRIBIR
bucle

MOV AH.1
MOV DL.0FFH
INT 21H
CMP AL ‘S’
JE SALIR
MOV DX.378H
OUT DX.AL
JMP bucle
MAIN  ENDP

ESCRIBIR PROC NEAR
PUSH AX
PUSH DX
MOV AH.09H
MOV DX.MENSAJE
INT 21H

MOV AX.06
MOV DL.0DH
INT 21H
MOV AH.06H
MOV DL.0AH
INT 21H
POP DX
POP AX
RET
ESCRIBIR ENDP

SALIR
MOV AH.06
MOV DL.0DH
INT  21H
MOV AH.06H
MOV DL.0AH
INT 21H

MOV MENSAJE OFFSET MES3
CALL ESCRIBIR

MOV AH.4CH
INT 21H
COD ENDS
END MAIN

Fuentes: http://hgr.tripod.com/puertos_ensamblador.html

              https://www.youtube.com/watch?v=ImamnvO1YOE





miércoles, 7 de diciembre de 2016

MySQL workbench

Insertar y Mostrar Datos.



Modificar y Eliminar Datos.





Esquema Entidad Relacion.






Operaciones Aplicadas en Consulta.









Consultas con patron like.




Operadores de comparacion.








Convercion y Extraccion de Cadenas.






Conversion de base Numerica.






Triggers (Tabla) 


Trigger Insertar.




Trigger Modificar.






Trigger Eliminar.







lunes, 5 de diciembre de 2016

Programas En Turbo Assembler


 Suma de dos números ASCII (mediante suma Hexadecimal). 


Suma de dos números introducidos como binarios. 


Suma de dos números. 

Unidad IV (Lenguajes de Interfaz)


Programación de dispositivos
Programar interfaces de software y hardware para la manipulación de puertos y dispositivos de computadora.


4.1 El buffer de video en modo texto

 4.2 Acceso a discos en lenguaje ensamblador

4.3 Programación del puerto serial

4.4 Programación del puerto paralelo

 4.5 Programación híbrida


4.6 Programación de puerto usb