CODIGO JAVA PARA IMPRESIÓN

23
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

Transcript of CODIGO JAVA PARA IMPRESIÓN

Page 1: CODIGO JAVA PARA IMPRESIÓN

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

Page 2: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 3: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 4: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 5: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 6: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 7: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 8: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 9: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 10: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 11: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 12: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 13: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 14: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 15: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 16: CODIGO JAVA PARA IMPRESIÓN

Á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

Page 17: CODIGO JAVA PARA IMPRESIÓN

Á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