Académique Documents
Professionnel Documents
Culture Documents
CARRERA:
ING. EN SISTEMAS COMPUTACIONALES
ASIGNATURA:
LENGUAJES DE INTERFAZ
DOCENTE:
ING. JESS A. SANTOS TEJERO
INTEGRANTES:
MARIO A. RAMREZ ARANDA
ALBERTO J. BARBOSA TREJO
KEMISH M. SALINAS GUILLERMO
FECHA DE ENTREGA:
28/MAYO/20
PROGRAMACIN DE DISPOSITIVOS
DESPLAZAMIENTO
TAMAO
DESCRIPCIN
00H
2 Bytes
Nmero de cilindros
02H
1 Byte
Nmero de cabezas
03H
11 Bytes
0EH
1 Byte
0FH
1 Byte
(Reservado)
(Reservados)
SERVICIO
DESCRIPCIN
00H
01H
Enviar un dato
02H
Recibir un dato
03H
BIT
4
3
Relacin de baudios.
Paridad.
Bits de parada.
UTILIZACIN
PARIDAD
RELACIN DE BAUDIOS
Bits
Velocidad
Bits
Significado
000
110
00
Ninguna
001
150
01
Paridad impar
010
300
10
Ninguna
011
600
11
Paridad par
100
1200
101
2400
110
4800
BITS DE PARADA
111
9600
Bits
Significado
Uno
Dos
Significado
00
No se utiliza
01
No se utiliza
10
7 bits
11
8 bits
Para enviar un dato por el puerto serial, bastar con colocar en el registro AH el
valor 01H correspondiente a este servicio y en el registro AL el dato a ser enviado,
invocando de nuevo la interrupcin 14H.
La lectura de un dato que ha llegado al puerto se logra con el servicio 02H, el cual
devuelve en el registro AL el dato. La lectura del estado del puerto se consigue a
travs del servicio 03H de esta misma interrupcin, y retorna en el registro AX el
estado del puerto.
MOV AL,83H
MOV DX,00H
INT 14H
MOV AH,01H
INT 14H
MOV AH,02H
MOV AX,03H
INT 14H
MOV AH,4CH
INT 21H
DIRECCIN DIRECCIN
LPT1
LPT2
Datos
378H
278H
Estado
379H
279H
Control
37AH
27AH
Ejemplo:
A continuacin, se muestra un programa para enviar distintas secuencias al puerto
paralelo y as tener efectos con Leds.
CMP AL,'*'
;Compara el valor de AL con el valor ASCII del asterisco
JE SALIR
;Si es igual, saltar a la etiqueta SALIR
MOV DX, 378H ;DIRECCION DEL PUERTO PARALELO
; El comando OUT tiene como funcin escribir en el puerto cuya direccin
;de 16 bits se encuentra almacenada en DX, el valor a escribir de 8 bits se
;almacena en AL
OUT DX, AL
JMP BUCLE
MAIN ENDP
; Rutina de salida
SALIR:
;Se escribe un return o alimentacin de lnea
MOV AH, 06
MOV DL, 0DH
INT 21H
MOV AH, 06H
MOV DL, 0AH
INT 21H
MOV MENSAJE, OFFSET MSJ3
CALL ESCRIBIR
; La funcin 4CH de la interrupcin 21H devuelve el control al SO.
MOV AH, 4CH
INT 21H
;Rutina para desplegar mensajes
ESCRIBIR PROC
PUSH AX
PUSH DX
MOV AH, 09H
MOV DX, MENSAJE
INT 21H
MOV AH, 06H
MOV DL, 0DH
INT 21H
MOV AH, 06H
MOV DL, 0AH
INT 21H
POP DX
POP AX
RET
ESCRIBIR ENDP
CODE ENDS
END MAIN
Programacin Hbrida
La programacin hbrida proporciona un mecanismo por medio del cual podemos
aprovechar las ventajas del lenguaje ensamblador y los lenguajes de alto nivel, todo
esto con el fin escribir programas ms rpidos y eficientes.
Este tipo de programacin se usa en casos en donde el cdigo en ensamblador
dificulta la estructuracin del programa.
Las directivas de programacin hibrida son aquellas que nos permiten ejecutar
los comandos de ensamblador en un lenguaje de alto nivel.
La programacin hbrida proporciona un mecanismo por medio del cual
podemos aprovechar las ventajas del lenguaje ensamblador y los lenguajes de alto
nivel, todo esto con el fin de escribir programas ms rpidos y eficientes.
El procedimiento utiliza la funcin 06H de la INT 10H del BIOS para limpiar la
pantalla. Este procedimiento es anlogo al procedimiento ClrScr de la unidad CRT
de Turbo Pascal.
En fin, podemos mezclar el cdigo ensamblador con el cdigo de cualquier otro
lenguaje que admita este procedimiento. En pascal antes de escribir el cdigo en
ensamblador hay que poner Asm y al final de nuestro cdigo End.
Ejemplo 2. Programa con un bloque de instrucciones en ensamblador
El programa solicita que se introduzcan dos nmeros, despus calcula la suma por
medio de la instruccin ADD de ensamblador y finalmente imprime el resultado en
pantalla.
Programa hbrido:
Uses Crt;
Val
Nun1, Num2, Resp : Integer;
BEGIN
WriteLine (Introduce el primer nmero: );
ReadLine(Num1);
WriteLine (Introduce el segundo nmero: );
ReadLine(Num2);
Assembler;
Asm
MOV AL, Num1
ADD AL, Num2
MOV Resp, AL
End
WriteLine(El resultado de la suma es: , Resp);
ReadLine();
End;
Ahora, para poder crear nuestro programa ASM necesitaremos saber cmo
llamaremos a nuestro procedimiento dentro del programa, para esto JNI hace
algo llamado decorado de nombres en el cual concatena con signos de guin
bajo (_) con los siguientes datos:
Por default primero aparece la palabra "Java" seguido del nombre de la clase y
finalmente el nombre del mtodo y los parmetros del mismo.
Para hacer esto realizamos los siguientes pasos:
1.
2.
3.
4.
5.
Y una vez que el programa sea compilado sin errores abra el archivo
Operaciones.h con el editor de cdigo y ver un programa en C++ como este:
Operaciones.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Operaciones */
#ifndef _Included_Operaciones
#define _Included_Operaciones
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Operaciones
* Method: Sumar
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_Operaciones_sumar
(JNIEnv *, jobject, jint, jint);
/*
* Class: Operaciones
* Method: Restar
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_Operaciones_restar
(JNIEnv *, jobject, jint, jint);
/*
* Class: Operaciones
* Method: Multiplicar
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_Operaciones_multiplicar
(JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
Programa hbrido:
.386
.MODEL flat,stdcall
.CODE
Java_Operaciones_Sumar PROC JNIEnv:DWORD, jobject:DWORD,a:DWORD,
b:DWORD
MOV EAX, a
MOV EBX, b
RET
Java_Operaciones_sumar ENDP
RET
Java_Operaciones_restar ENDP
RET
Java_Operaciones_multiplicar ENDP
END
; Interface Descriptor
retlw
9
; bLength Length of this descriptor
retlw
DSC_INTF
; bDescType INTERFACE
retlw
0x00
; Interface number
retlw
0x00
; Alternate setting
retlw
0x01
; Number of endpoints in this interface
retlw
COMM_INTF
; Class code
retlw
ABSTRACT_CONTROL_MODEL
; Subclass code
retlw
V25TER
; Protocol code
retlw
0x00
; Interface string index
; CDC Class-Specific Descriptors
retlw
5
; bFNLength (USB_CDC_HEADER_FN_DSC)
retlw
CS_INTERFACE ; bDscType
retlw
DSC_FN_HEADER
; bDscSubType
retlw
0x10
; bcdCDC (low byte)
retlw
0x01
; (high byte)
retlw
retlw
retlw
retlw
4
CS_INTERFACE
DSC_FN_ACM
0x02
; bFNLength (USB_CDC_ACM_FN_DSC)
; bDscType
; bDscSubType
; bmCapabilities
retlw
retlw
retlw
retlw
retlw
5
; bFNLength (USB_CDC_UNION_FN_DSC)
CS_INTERFACE ; bDscType
DSC_FN_UNION ; bDscSubType
CDC_COMM_INTF_ID
; bMasterIntf
CDC_DATA_INTF_ID
; bSaveIntf0
retlw
retlw
retlw
retlw
retlw
5
; bFNLength (USB_CDC_CALL_MGT_FN_DSC)
CS_INTERFACE ; bDscType
DSC_FN_CALL_MGT
; bDscSubType
0x00
; bmCapabilities
CDC_DATA_INTF_ID
; bDataInterface
; Endpoint Descriptor
retlw
7
; bLength (USB_EP_DSC)
retlw
DSC_EP
; bDscType
retlw
_EP02_IN
; bEPAdr
retlw
3
; bmAttributes (_INT)
retlw
low (CDC_INT_EP_SIZE) ; wMaxPktSize
retlw
high (CDC_INT_EP_SIZE)
retlw
0x02
; bInterval
; Interface Descriptor
retlw
9
retlw
DSC_INTF
retlw
1
retlw
0
retlw
2
retlw
DATA_INTF
retlw
0
retlw
retlw
; Endpoint Descriptors
retlw
7
; bLength (USB_EP_DSC)
retlw
DSC_EP
; bDscType
retlw
_EP03_OUT
; bEPAdr
retlw
2
; bmAttributes (_BULK)
retlw
low (CDC_BULK_OUT_EP_SIZE) ; wMaxPktSize
retlw
high (CDC_BULK_OUT_EP_SIZE)
retlw
0x00
; bInterval
retlw
retlw
retlw
retlw
retlw
retlw
retlw
EndConfig1
7
; bLength (USB_EP_DSC)
DSC_EP
; bDscType
_EP03_IN
; bEPAdr
2
; bmAttributes (_BULK)
low (CDC_BULK_IN_EP_SIZE)
; wMaxPktSize
high (CDC_BULK_IN_EP_SIZE)
0x00
; bInterval
String1
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
(String2-String1)/2
DSC_STR
'M'
0x00
'i'
0x00
'c'
0x00
'r'
0x00
'o'
0x00
'c'
0x00
retlw
retlw
retlw
retlw
retlw
retlw
'h'
0x00
'i'
0x00
'p'
0x00
String2
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
(String3-String2)/2
DSC_STR
'P'
0x00
'I'
0x00
'C'
0x00
'1'
0x00
'8'
0x00
''
0x00
'U'
0x00
'S'
0x00
'B'
0x00
''
0x00
'C'
0x00
'D'
0x00
'C'
0x00
String3
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
(String4-String3)/2
DSC_STR
'V'
0x00
'1'
0x00
'.'
0x00
'1'
0x00
'F'
0x00
'S'
0x00
String4
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
(String5-String4)/2
DSC_STR
'C'
0x00
'f'
0x00
'g'
0x00
'1'
0x00
REFERENCIAS
Alva Hilario, G., Becerril Lpez, N., Cruz Matas, D., Gonzlez Maldonado, M. Y., Romero
Ortega, F. J., & Sanchez Cruz, G. (15 de Abril de 2008). Programacin En Ensamblador
Para Procesadores 80x86. Recuperado el 26 de Mayo de 2014, de
http://es.scribd.com/doc/120689070/Ensamblador
Hurtado, A. V. (21 de Obtubre de 2012). Abre Ojos Ensamblador. Recuperado el 26 de Mayo de
2014, de http://www.abreojosensamblador.net/Productos/AOE/html/Pags/Cap08.html
Martnez, B. B. (13 de Enero de 2011). Ensamblador. Recuperado el 26 de Mayo de 2014, de
http://bbeltran.cs.buap.mx/EnsambladorDisco.pdf
Medina, R. (09 de Marzo de 2002). Programacin Avanzado en Lenguaje Ensamblador.
Recuperado el 26 de Mayo de 2014, de
http://www.ramonmedina.name/files/universidad/ac/ac0001.PDF
Vzquez, G. (26 de Noviembre de 2010). Programcin Hbrida. Recuperado el 26 de Mayo de
2014, de http://es.scribd.com/doc/44098211/programacion-hibrida