ups .. me olvide, alli mando mi codigo assembler
Publicado por ayudiita control de impresora (2 intervenciones) el 14/12/2006 15:48:19
PILA SEGMENT STACK 'STACK' ; Abre el segmento de PILA.
DW 100h DUP (?) ; Reserva 100 palabras para la PILA.
PILA ENDS ; Cierra el segmento de PILA.
DATOS SEGMENT 'DATA' ; Abre el segmento de DATOS.
mensaje DB 13,10,"Programa Servicios de Impresora",13,10,13,10,'$' ; Mensaje a escribir.
mensaje1 DB "1. Estado de impresora",13,10,'$'
mensaje2 DB "2. Inicializar impresora",13,10,'$'
mensaje3 DB "3. Imprimir caracter",13,10,'$'
mensaje4 DB "4. Salir",13,10,13,10,'$'
mensaje5 DB "Ingrese opcion:",'$'
mensaje6 DB 10,13,"Existe un Error",'$'
mensaje7 DB 10,13,"Ingrese cadena:",'$'
mensaje8 DB 10,13,"El estado de la impresora es:",'$'
DATOS ENDS ; Cierra el segmento de DATOS.
CODIGO SEGMENT 'CODE' ; Abre el segmento de CODIGO.
ASSUME CS:CODIGO, DS:DATOS, SS:PILA
ENTRADA:
MOV ax, DATOS ; Valor de segmento para DATOS.
MOV ds, ax ; Para acceder a "mensaje".
MOV dx, OFFSET mensaje ; Para la interrupción 21h, función 09.
MOV ah, 09 ; Especifica el servicio o función 09.
INT 21h ; Invoca el servicio 09: Imprimir Cadena.
MOV dx, OFFSET mensaje1
INT 21h
MOV dx, OFFSET mensaje2
INT 21h
MOV dx, OFFSET mensaje3
INT 21h
MOV dx, OFFSET mensaje4
INT 21h
MOV dx, OFFSET mensaje5
INT 21h
MOV ah, 01h
INT 21h
cmp al,31h
je L1
cmp al,32h
je L2
cmp al,33h
je L3
jmp Salir
;----------------------------------------------------------------
L1:
MOV dx, OFFSET mensaje8
mov ah,09
INT 21h
call Estado
jmp ENTRADA
;----------------------------------------------------------------
L2:
MOV dx, OFFSET mensaje8
mov ah,09
INT 21h
call Inicializa
jmp ENTRADA
;----------------------------------------------------------------
L3:
MOV dx, OFFSET mensaje8
mov ah,09
INT 21h
call Imprime
jmp ENTRADA
;----------------------------------------------------------------
Estado proc
MOV AH, 02H
MOV DX, 00
INT 17H
;TEST AH, 00101001B
;JNZ errormsg
mov dl,ah
mov ah,02h
int 21h
ret
Estado endp
;----------------------------------------------------------------
Inicializa proc
MOV AH, 01H ; Petición para inicializar el puerto
MOV DX, 00 ; Selecciona el puerto 0 para la impresora
INT 17H ; Llama al BIOS
mov dl,ah
mov ah,02h
int 21h
ret
inicializa endp
;----------------------------------------------------------------
Imprime proc
MOV AH,02h
MOV DX,00
int 17h
mov dl,ah
mov ah,02h
int 21h
MOV dx, OFFSET mensaje7
mov ah,09
INT 21h
label1:
MOV AH,01h
int 21h
CMP AL,0Dh
je exit
mov ah,00h
mov dx,00
int 17h
jmp label1
exit:
ret
Imprime endp
;----------------------------------------------------------------
errormsg:
mov dx, offset mensaje5
mov ah, 09
int 21h
jmp ENTRADA
;----------------------------------------------------------------
Salir:
MOV ax, 4C00h ; Servicio (Función) 4Ch, con valor de retorno 0.
INT 21h ; Invoca servicio 4Ch: Retorno al DOS.
CODIGO ENDS ; Cierra el segmento de CODIGO.
END ENTRADA
DW 100h DUP (?) ; Reserva 100 palabras para la PILA.
PILA ENDS ; Cierra el segmento de PILA.
DATOS SEGMENT 'DATA' ; Abre el segmento de DATOS.
mensaje DB 13,10,"Programa Servicios de Impresora",13,10,13,10,'$' ; Mensaje a escribir.
mensaje1 DB "1. Estado de impresora",13,10,'$'
mensaje2 DB "2. Inicializar impresora",13,10,'$'
mensaje3 DB "3. Imprimir caracter",13,10,'$'
mensaje4 DB "4. Salir",13,10,13,10,'$'
mensaje5 DB "Ingrese opcion:",'$'
mensaje6 DB 10,13,"Existe un Error",'$'
mensaje7 DB 10,13,"Ingrese cadena:",'$'
mensaje8 DB 10,13,"El estado de la impresora es:",'$'
DATOS ENDS ; Cierra el segmento de DATOS.
CODIGO SEGMENT 'CODE' ; Abre el segmento de CODIGO.
ASSUME CS:CODIGO, DS:DATOS, SS:PILA
ENTRADA:
MOV ax, DATOS ; Valor de segmento para DATOS.
MOV ds, ax ; Para acceder a "mensaje".
MOV dx, OFFSET mensaje ; Para la interrupción 21h, función 09.
MOV ah, 09 ; Especifica el servicio o función 09.
INT 21h ; Invoca el servicio 09: Imprimir Cadena.
MOV dx, OFFSET mensaje1
INT 21h
MOV dx, OFFSET mensaje2
INT 21h
MOV dx, OFFSET mensaje3
INT 21h
MOV dx, OFFSET mensaje4
INT 21h
MOV dx, OFFSET mensaje5
INT 21h
MOV ah, 01h
INT 21h
cmp al,31h
je L1
cmp al,32h
je L2
cmp al,33h
je L3
jmp Salir
;----------------------------------------------------------------
L1:
MOV dx, OFFSET mensaje8
mov ah,09
INT 21h
call Estado
jmp ENTRADA
;----------------------------------------------------------------
L2:
MOV dx, OFFSET mensaje8
mov ah,09
INT 21h
call Inicializa
jmp ENTRADA
;----------------------------------------------------------------
L3:
MOV dx, OFFSET mensaje8
mov ah,09
INT 21h
call Imprime
jmp ENTRADA
;----------------------------------------------------------------
Estado proc
MOV AH, 02H
MOV DX, 00
INT 17H
;TEST AH, 00101001B
;JNZ errormsg
mov dl,ah
mov ah,02h
int 21h
ret
Estado endp
;----------------------------------------------------------------
Inicializa proc
MOV AH, 01H ; Petición para inicializar el puerto
MOV DX, 00 ; Selecciona el puerto 0 para la impresora
INT 17H ; Llama al BIOS
mov dl,ah
mov ah,02h
int 21h
ret
inicializa endp
;----------------------------------------------------------------
Imprime proc
MOV AH,02h
MOV DX,00
int 17h
mov dl,ah
mov ah,02h
int 21h
MOV dx, OFFSET mensaje7
mov ah,09
INT 21h
label1:
MOV AH,01h
int 21h
CMP AL,0Dh
je exit
mov ah,00h
mov dx,00
int 17h
jmp label1
exit:
ret
Imprime endp
;----------------------------------------------------------------
errormsg:
mov dx, offset mensaje5
mov ah, 09
int 21h
jmp ENTRADA
;----------------------------------------------------------------
Salir:
MOV ax, 4C00h ; Servicio (Función) 4Ch, con valor de retorno 0.
INT 21h ; Invoca servicio 4Ch: Retorno al DOS.
CODIGO ENDS ; Cierra el segmento de CODIGO.
END ENTRADA
Valora esta pregunta


0