Date post: | 30-Oct-2014 |
Category: |
Documents |
Upload: | marjorie-juliana-chinchay-cuenca |
View: | 76 times |
Download: | 6 times |
UNIVERSIDAD NACIONAL DE LOJA
AREA DE LA ENERGIA LAS INDUSTRIAS Y LO RECURSOS NO
RENOVABLES
CARRERA DE INGENIERIA EN SISTEMAS
MODULO VI PARALELO B
“TIEMPOS DE DEMORA DE IMPRESIÓN EN JAVA Y LENGUAJE ENSAMLADOR”
NOMBRE:
Marjorie Chinchay
Herrera Karla
Largo Elivar
Michay Franklin
Padilla Jhonny
DOCENTE: Ing. Pablo Ordoñez
MATERIA: Lenguaje Ensamblador
FECHA: 22 de Julio del 2012
LOJA - ECUADOR
2012
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
ESQUEMA DE CONTENIDOS
1. INTRODUCCIÓN A LA INTERFAZ NATIVA DE JAVA……………………………………2
2. INTERRUPCION DE BIOS…………………………………………………………………….2
3. INTERRUPCION DE DOS……………………………………………………………………..4
4. CODIGO DE IMPRESIÓN EN JAVA ……………………………………………………….5
4.1 Clase Principal que imprime por el Puerto LPT1
4.2 Clase Principal
4.3 Código que permite imprimir y medir el tiempo que dura la impresión
5. CODIGO DE IMPRESIÓN EN ENSAMBLADOR ………………………………………….6
6. MEZCLA DE ENMSAMBLADOR Y JAVA………………………………………………….8
6.1 Requerimientos de software
6.2 Configuración del ambiente de trabajo
6.3 Programación
6.3.1 Creación de la clase, el método nativo y la llamada a la librería para
invocar al código Ensamblador
6.3.2 Compilar el programa
6.3.3 Escribir el programa en ensamblador que implemente los métodos
nativos:
6.3.4 ImprimirEnsambladorImpl.asm
6.3.5 Usar masm32 para compilar el código nativo
6.3.6 Usar la herramienta masm32 para generar la librería nativa
6.3.7 Archivos Generados
6.3.8 Ejecución
7. INFORME ERROR…………………………………………………………………………….15
8. CONCLUSIONES……………………………………………………………………………...16
9. RECOMENDACIONES………………………………………………………………………..17
10. BIBLIOGRAFÍA………………………………………………………………………………18
CARRERA DE INGENIERÍA EN SISTEMAS Página1
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
1. INTRODUCCIÓN A LA INTERFAZ NATIVA DE JAVA
JNI es un framework de programación que permite que un programa escrito en Java
ejecutado en la Máquina Virtual Java (JVM) pueda interactuar con programas escritos en
otros lenguajes como C, C++ y ensamblador.
La plataforma Java es relativamente nueva, lo que significa que algunas veces se
necesita integrar programas escritos en Java con servicios, programas o APIs existentes
desarrollados en lenguajes distintos. Es por ello que esta plataforma proporciona la
Interfaz Nativa de Java, JNI por sus siglas en inglés, esta no es más que un framework de
programación que permite que un programa escrito en Java ejecutado en la Máquina
Virtual Java (JVM) pueda interactuar con programas escritos en otros lenguajes como C,
C++ y ensamblador.[1]
2. INTERRUPCION DE BIOS.
El BIOS contiene un extenso conjunto de rutinas de entrada/salida y tablas que indican el
estado de los dispositivos del sistema. El dos y los programas usuarios pueden solicitar
rutinas del BIOS para la comunicación con los dispositivos conectados al sistema. El
método para realizar la interfaz con el BIOS es el de las interrupciones de software. A
continuación se listan algunas interrupciones del BIOS.
INT 00H: División entre cero. Llamada por un intento de dividir entre cero. Muestra
un mensaje y por lo regular se cae el sistema.
INT 01H: Un solo paso. Usado por DEBUG y otros depuradores para permitir
avanzar por paso a través de la ejecución de un programa.
INT 02H: Interrupción no enmascarare. Usada para condiciones graves de
hardware, tal como errores de paridad, que siempre están habilitados. Por lo tanto
un programa que emite una instrucción CLI (limpiar interrupciones) no afecta estas
condiciones.
INT 03H: Punto de ruptura. Usado por depuración de programas para detener la
ejecución.
CARRERA DE INGENIERÍA EN SISTEMASPágina2
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
INT 04H: Desbordamiento. Puede ser causado por una operación aritmética,
aunque por lo regular no realiza acción alguna.
INT 05H: Imprime pantalla. Hace que el contenido de la pantalla se imprima. Emita
la INT 05H para activar la interrupción internamente, y presione las teclas Cltr +
PrtSC para activarla externamente. La operación permite interrupciones y guarda
la posición del cursor.
INT 08H: Sistema del cronometro. Una interrupción de hardware que actualiza la
hora del sistema y (si es necesario) la fecha. Un chip temporizador programable
genera una interrupción cada 54.9254 milisegundos, casi 18.2 veces por segundo.
INT 09H: Interrupción del teclado. Provocada por presionar o soltar una tecla en el
teclado.
INT OBH, INT OCH: Control de dispositivo serial. Controla los puertos COM1 y
COM2, respectivamente.
INT 0DH, INT OFH: Control de dispositivo paralelo. Controla los puertos LPT1 y
LPT2, respectivamente.
INT 0EH: Control de disco flexible. Señala actividad de disco flexible, como la
terminación de una operación de E/S.
INT 10H: Despliegue en vídeo. Acepta el número de funciones en el AH para el
modo de pantalla, colocación del cursor, recorrido y despliegue.
INT 11H: Determinación del equipo. Determina los dispositivos opcionales en el
sistema y regresa el valor en la localidad 40:10H del BIOS al AX. (A la hora de
encender el equipo, el sistema ejecuta esta operación y almacena el AX en la
localidad 40:10H).
INT 12H: Determinación del tamaño de la memoria. En el AX, regresa el tamaño
de la memoria de la tarjeta del sistema, en términos de kilobytes contiguos.
INT 13H: Entrada/salida de disco. Acepta varias funciones en el AH para el estado
del disco, sectores leídos, sectores escritos, verificación, formato y obtener
diagnóstico.
CARRERA DE INGENIERÍA EN SISTEMASPágina3
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
3. INTERUPCIONES DEL DOS.
Las interrupciones desde la 20H hasta la 3FH están reservadas para operaciones del
DOS. A continuación se mencionan algunas de ellas.
INT 20H: Termina programa. Finaliza la ejecución de un programa .COM, restaura
las direcciones para Cltr + Break y errores críticos, limpia los búfer de registros y
regresa el control al DOS. Esta función por lo regular seria colocada en el
procedimiento principal y al salir de él, CS contendría la dirección del PSP. La
terminación preferida es por medio de la función 4CH de la INT 21H.
INT 21H: Petición de función al DOS. La principal operación del DOS necesita una
función en el AH.
INT 22H: Dirección de terminación. Copia la dirección de esta interrupción en el
PSP del programa (en el desplazamiento 0AH) cuando el DOS carga un programa
para ejecución. A la terminación del programa, el DOS transfiere el control a la
dirección de la interrupción. Sus programas no deben de emitir esta interrupción.
INT 23H: Dirección de Cltr + Break. Diseñada para transferir el control a una rutina
del DOS (por medio del PSP desplazamiento 0EH) cuando usted presiona Ctlt +
Break o Ctlr + c. La rutina finaliza la ejecución de un programa o de un archivo de
procesamiento por lotes. Sus programas no deben de emitir esta interrupción.
INT 24H: Manejador de error critico. Usada por el dos para transferir el control (por
medio del PSP desplazamiento 12H) cuando reconoce un error critico (a veces
una operación de disco o de la impresora).Sus programas no deben de emitir esta
interrupción.
INT 25H: Lectura absoluta de disco. Lee el contenido de uno o mas sectores de
disco.
INT 26H: Escritura absoluta de disco. Escribe información desde la memoria a uno
o mas sectores de disco.
INT 27H: Termina pero permanece residente (reside en memoria). Hace que un
programa .COM al salir permanezca residente en memoria.
INT 2FH: Interrupción de multiplexion. Implica la comunicación entre programas,
como la comunicación del estado de un spooler de la impresora, la presencia de
CARRERA DE INGENIERÍA EN SISTEMASPágina4
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
un controlador de dispositivo o un comando del DOS tal como ASSIGN o
APPEND.
INT 33H: Manejador del ratón. Proporciona servicios para el manejo del ratón.
4. CODIGO DE IMPRESIÓN EN JAVA
4.1 Clase Principal
import java.io.IOException;
//clase principal para llamar al form
public class Imprimir {
public static void main(String args[]) {
Principal p;
try {
p = new Principal();
p.setVisible(true);
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.2 Clase Principal que imprime por el Puerto LPT1
import java.io.FileWriter;
import javax.swing.JOptionPane;
//clase para imprimir por el Puerto LPT1
public class ImprimirJava {
//método que se le un envia el string que se quiere imprimir
public void imprimirFactura(String f) {
try {
CARRERA DE INGENIERÍA EN SISTEMASPágina5
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
JOptionPane.showMessageDialog(null, "Imprimiendo
la Factura......");
FileWriter out = new FileWriter("LPT1");
out.write(f + "\n");
out.close();
} catch (Exception e) {
}
}
}
4.3 Código que permite imprimir y medir el tiempo que dura la impresión
// clases para imprimir por el piuerto LPT1
ImprimirJava p = new ImprimirJava();
// tiempo para medir el proceso
long tiempoInicio = System.currentTimeMillis();
// metodo que imprime
p.imprimirFactura(factura);
// tiempo total
long totalTiempo = System.currentTimeMillis() - tiempoInicio;
System.out.println("\nEl tiempo de demora es :" + totalTiempo+ "
miliseg");
5. CODIGO DE IMPRESIÓN EN ENSAMBLADOR
INCLUDE Irvine16.inc
.data
mensaje DB " DISTRIBUIDORA DE HARDWARE Y SOFTWARE
MAKJEF",13,10;
DB "*Dir. CARLOS YUQUI E/ SALVADOR BUSTAMANTE CELI Y
EPICLACHIMA *LOJA-ECUADOR",13,10
CARRERA DE INGENIERÍA EN SISTEMASPágina6
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
DB " *R.U.C 0705470656 *AUT. SRI. N.-
1111221409",13,10,10
DB "CLIENTE: Luis Vasquez FECHA: 22-07-
2012",13,10
DB "DIRECCION: Salvador y Quebec, Casa No. 101 TELF:
081998569",13,10
DB "R.U.C. / C.I.: 1717213183",13,10,10
DB "CANTIDAD DESCRIPCION VALOR UNITARIO VALOR
TOTAL",13,10,10
DB " -- -- -- ---",13,10
DB " -- -- -- ---",13,10
DB " -- -- -- ---",13,10
DB " Subtotal: ---",13,10
DB " Descuento: ---",13,10
DB " Iva 12%: ---",13,10
DB " Total: ---",13,10,10,10
DB " -------------- ---------------",13,10
DB " FIRMA AUTORIZADA FIRMA CLIENTE",13,10,10
DB "Tiempo de demora es:",13,10,"$"
.code
main proc
mov ax,seg mensaje
mov ds,ax
mov ah,09h ;Funcion de mostrar texto en pantalla
lea dx,mensaje ;Ponemos el mensaje en dx
int 21h ;Mostramos texto
xor ax,ax ;Esperamos a una tecla
int 16h ;Teclado
xor dx,02 ;En DX va el numero del puerto LPT (00 para LPT1
01 Para LPT2 etc...)
lea si,mensaje ;Cargamos el mensaje a imprimir en SI
CARRERA DE INGENIERÍA EN SISTEMASPágina7
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
call imprimir_impresora ;Llamamos a la funcion de impresion
mov ax,4c00h ;Function (Quit with exit code (EXIT))
int 21h
main endp
imprimir_impresora PROC near
pusha ;Guardamos todos los registros
mov ah,01h ;Funcion de inicializar impresora (DX no se
cambia)
int 17h
bucle:
lodsb ;Cargamos la etiqueta en si
or al,al;¿Llegamos al final?
je term ;Si llegamos al final entonces
terminamos
mov ah,00h ;Funcion de escribir en impresora
(AL tiene el caracter a imprimir)
int 17h ;¡IMPRIMIMOS!
loop bucle ;Hacemos un bucle de impresion hasta que no
acabe la cadena de texto
term:
popa ;Liberamos todo
ret ;Volvemos de la funcion
imprimir_impresora ENDP
end main
6. MEZCLA DE ENMSAMBLADOR Y JAVA
6.1 Requerimientos de software
1. Editor: Servirá para editar el código Java y el código del programa ensamblador
2. MASM32: Se necesita para compilar los programas ASM.
3. JDK de Java: Para la compilación del código Java
6.2 Configuración del ambiente de trabajo
CARRERA DE INGENIERÍA EN SISTEMASPágina8
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
6.2.1 Variables de entorno
InicioEquipoclic derechoPropiedadesConfiguración avanzada del
SistemaVariables de Entorno->Variables del Sistema
Creamos una nueva variable para compilar el código Java:
Creamos una nueva variable para compilar el código Ensamblador:
CARRERA DE INGENIERÍA EN SISTEMASPágina9
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
Editamos la variable del sistema Path, a la cual agregamos lo siguiente ;%JAVA_HOME
%\bin;%MASM32%\bin:
6.3. Programación
6.3.1 Creación de la clase, el método nativo y la llamada a la librería para invocar al
código Ensamblador
import java.lang.String;
public class ImprimirEnsamblador {
// método nativo para llamar al codigo ensamblador
public native void imprimirFactura(String factura);
//libreria de llamada al codigo ensamblador
static {
System.loadLibrary("ImprimirEnsambladorImpl");
}
public void llamar(String f) {
ImprimirEnsamblador pe= new ImprimirEnsamblador();
pe.imprimirFactura(f);
}
}
6.3.2 Compilar el programa
Usar javac para compilar el programa.
Usar javah -jni para generar la cabecera de C
CARRERA DE INGENIERÍA EN SISTEMASPágina10
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
6.3.3 Escribir el programa en ensamblador que implemente los métodos nativos:
6.3.3.1 ImprimirEnsambladorImpl.asm
.386
.model flat,stdcall
.code
Java_ImprimirEnsamblador_imprimirFactura proc JNIEnv:WORD,
jobject:WORD, factura:WORD
xor dx,02 ;En DX va el numero del puerto LPT (00 para LPT1
01 Para LPT2 etc...)
lea si,factura ;Cargamos el mensaje a imprimir en SI
pusha ;Guardamos todos los registros
mov ah,01h ;Funcion de inicializar impresora (DX no se
cambia)
int 17h
bucle:
lodsb ;Cargamos la etiqueta en si
or al,al;¿Llegamos al final?
je term ;Si llegamos al final entonces terminamos
mov ah,00h ;Funcion de escribir en impresora (AL
tiene el caracter a imprimir)
int 17h ;¡IMPRIMIMOS!
CARRERA DE INGENIERÍA EN SISTEMASPágina11
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
loop bucle ;Hacemos un bucle de impresion hasta que no
acabe la cadena de texto
term:
popa ;Liberamos todo
ret ;Volvemos de la funcion
ret
Java_ImprimirEnsamblador_imprimirFactura endp
END
6.3.4 Usar masm32 para compilar el código nativo
ml /c /coff /Cp ImprimirEnsambladorImpl.asm
ml es el programa de MASM32 para crear el objeto
/c le indicamos que solo habrá de ensamblar el .obj
/coff para indicar que el objeto ensamblado tendrá el formato COFF
(Common Object File Format)
/Cp indicará a MASM32 que será sensible a mayúsculas y minúsculas de los
identificadores que se usen
6.3.5 Usar la herramienta masm32 para generar la librería nativa
6.3.5.1 Creamos el archivo ImprimirEnsambladorImpl.def
LIBRARY ImprimirEnsambladorImpl
EXPORTS
Java_ImprimirEnsamblador_imprimirFactura
CARRERA DE INGENIERÍA EN SISTEMASPágina12
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
LIBRARY declara el nombre que tendrá el DLL. En nuestro ejemplo lo
llamaremos
imprimirFactura porque así lo tenemos en el código del programa
ImprimirEnsamblador.java
EXPORTS indica el nombre de las funciones o procedimientos que serán
exportados
en el DLL, nosotros tenemos el procedimiento
Java_ImprimirEnsamblador_imprimirFactura
6.3.6 Creamos el archivo .dll
link /DLL /NOENTRY /subsystem:windows
/DEF:ImprimirEnsambladorImpl.def ImprimirEnsambladorImpl.obj
La explicación:
link el programa (linker) que usaremos para generar el .dll
/DLL indica que lo que queremos generar es un DLL
/NOENTRY para poder evitar algunos posibles errores no capturados
/SUBSYSTEM:windows indicamos que el ejecutable es para windows
/DEF:archivo.def y el archivo de definición que se usará para la exportación
Finalmente indicamos el nombre de nuestro archivo ensamblado, archivo.obj
CARRERA DE INGENIERÍA EN SISTEMASPágina13
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
6.3.7 Archivos Generados
3.3.8 Ejecución:
CARRERA DE INGENIERÍA EN SISTEMASPágina14
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
7 INFORME ERROR
8. CONCLUSIONES
La mezcla de porciones de código en un lenguaje de bajo nivel como ensamblador
permite disminuir el tiempo en aquellas aplicaciones que requieren más tiempo de
procesamiento.
La programación hibrida Java-Ensamblador permite manejar el 100% del hardware a
través de un lenguaje de alto nivel.
El uso y aprendizaje de la JNI (Interfaz nativa de Java) es muy importante, ya que a
través de esta nos permite invocar a programas hechos en otros lenguajes como C,
C++ o como en nuestro caso Lenguaje Ensamblador.
El Lenguaje ensamblador además de ser utilizado en la programación de
computadoras, también se lo utiliza para la programación de dispositivos electrónicos.
CARRERA DE INGENIERÍA EN SISTEMASPágina15
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
El programar a bajo nivel así como nos permite manejar directamente el hardware de
la máquina, mayor velocidad de procesamiento requiere que conozcamos a fondo el
lenguaje y la máquina sobre la que vamos a programar.
La aplicación de este tipo de programación (hibrida) nos ayuda, ya que algunas de las
veces necesitamos hacer uso de rutinas, sea por que los lenguajes de alto nivel no las
tienen o por obtener mayor velocidad al realizar un proceso.
9. RECOMENDACIONES
La publicación de más información acerca del tema, ya que después de haber
realizado la práctica nos dimos cuenta que la información es muy escaza.
10. BIBLIOGRAFÍA
[1] Java Native Interface, Programmer's guide and specification, [22/07/12],
http://java.sun.com/docs/books/jni/html/jniTOC.html
[2]Ventajas de usar archivos DLL, [22/07/12]. Disponible en
http://msdn.microsoft.com/es es/library/dtba4t8b.aspx.
CARRERA DE INGENIERÍA EN SISTEMASPágina16