SoloCodigo
Programación General => ASM (Ensamblador) => Mensaje iniciado por: WOLFLIVING en Martes 6 de Julio de 2004, 06:36
-
hola compañeros espero alguien me pueda ayudar, bueno pue estoy haciendo un tutor matematico sobre areas lleva teoria y ejercicios la cosa es que me he topado con un problema la teoria ya esta en distintos archivos dependiendo de los archivos y la leo asi:
CALL MODO ;;;SUBRUTINA PARA INICIALIZAR MODO TEXTO
LEA DX, TRI ;;;;CARGANDO VARIBLE DONDE SE ENCUENTRA ARCHIVO DEFINIDA ABAJO
CALL PINTAR ;;;;LLAMADO A SUBRRUTINA PARA IMPRESION DE ARCHIVO
;;;;;;;;SUBRRUTINA PARA IMPRIMIR EN PANTALLA;;;;;;;;;;
pintar:
MOV AL,0 ; modo de lectura
MOV AH,3Dh ; función para abrir fichero
INT 21h ; llamar al DOS
MOV handle,AX ; código de acceso al fichero
trocito:
MOV BX,handle ; código de acceso al fichero
MOV CX,2048 ; número de bytes a leer
LEA DX,buffer ; dirección del buffer
MOV AH,3Fh ; función para leer del fichero
INT 21h ; llamar al DOS
MOV CX,AX ; bytes leídos realmente
JCXZ cerrar ; no hay nada que imprimir
PUSH AX ; preservarlos
LEA BX,buffer ; imprimir buffer ...
imprime:
MOV DL,[BX] ; carácter a carácter
MOV AH,02h ; ir llamando al servicio 2 del
INT 21h ; DOS para imprimir en pantalla
INC BX ; siguiente carácter
LOOP imprime ; acabar caracteres
POP AX ; recuperar nº de bytes leídos
CMP AX,2048 ; ¿leidos 2048 bytes?
JE trocito ; sí, leer otro trocito más
cerrar:
MOV BX,handle ; código de acceso al fichero
MOV AH,3Eh ; cerrar fichero
INT 21h ; llamar al DOS
ret
;;;DEFINICION DE VARIABLES
handle DW 0 ; handle de control del fichero
TRI DB 'triang.txt','$'
buffer DB 2048 DUP (0) ; " " " " el disco
bueno pues esto funciona te lee el archivo y lo imprime en la pantalla mi problema esta cuando quiero poner otro archivo en pantall es decir por ejemplo que al presionar barra espaciadora pase a otra pagina cuando lo hago habiendo previamente definido variables para este nuevo archivo la aplicacion se traba. Si alguien me puede ayudar o decirme otra forma de leer un archivo para imprimir en pantalla se lo agradeceria mucho, espero no les de hueva leerlo GRACIAS DE ANTE MANO
-
El progrma parece estar Bien, solo tengo una observacion el nombre del archivo deberia ser tipo AsciiZ y me parece extraño que funcione, pues las pirmeras veces que experimente las funciones de archivos de la int 21h no funcionaban cuando el nombre de los archivos no eran tipo AsciiZ.
-
Poniendo las funciones en procedimientos y alguna que potra cosilla mas, aqui pongo el programa (de arriba) modificado. Compilado con TASM 2.1 (D.O.S.)
-
muchassss gracias SUPERG solo tengo una pequeña duda con respecto al programa que me has facilitado tu funcion ESPERAR soy nuevo en esto y no entiendo como funciona
esperar macro <----macro¿?
mov ah,0
int 16h
endm <---- endm
lo de enmedio si se que es la funcion para leer la tecla pulsada y guardar ascii en AL
pero como seria si yo quiero que pasa la pagina SOLO SI PRESIONO LA TECLA SPACE si presiono otra no pasa nada o si presiono R regresar a la pantalla anterior serias tan amable de aclararme estas dudas?¿ oye muchas gracias que me va a servir muchisimo no tienes idea
:huh:
-
OYE he probado poniendo un tercer archivo y me ha dado el mismo problema sera que solo pasa en mi maquina? podrias hecharme una mano y hacer la prueba con un tercer archivo a ver si a ti te funciona gracias por prestarme tiempo :kicking:
-
estaba revisando y creo que podria ser algun problema con las variables DB ya que si las cambio de lugar en distinto orden este funciona pero no se pero lo que si estoy casi 100% seguro es que es problema con el DB talvez exista una manera de tener un solo DB que maneje las distintas direcciones de los archivos que se cambie a medida vaya necesitando cada uno de ellos no se si podra <_< solo necesito saber eso para que mi proyecto funcione a la perfeccion necesito poder tener mis pantallas muchas gracias
-
para lo de las teclas, con la tecla de ESC no hay problema se verifica si en AL se encuantra el Ascii de ESC(27) y si es asi se pasa al siguiente; para ir "artas" ¿como "atras"? ¿anterior segmento del archivo ó antarior archivo?. lo del archivo no es dificil pero si para ver la parte anteriro del archivo se debe tomar en cuante lo siguiente:
las funciones de lectura escritura de que provee la int 21h manejador de archivo de 16Bits, este hara referencia a un puntero de 32bits que desplazara sobre el archivo, el control directo sobre este puntero lo tendra el sistema.
Cuando se hace una lectura o escritura el puntero se incrementara dependiendo d ecaunto Bytes se hayan leido ó escrito sobre su posicion anterior a L/E.
Existen funcines sencilas de la int 21h que permiten poner el puntero al final o al principio del archivo, otras(que no entiendo) que dejan el puntero en posiciones "relativas"(otras posiciones en el archivo).
Entoces para ver el contenido de los archivos de forma mas eficiente, por partes controlado por el usuario, no puedo ofrcer ayuda al respecto. mi solucion seria usar varios buffers y limitar el tamaño del archivo ó el tamaño que se podra ver.
eso seria leyendo primero todo el archivo en buffers, y por ultimo mostrar segun el usuario disponga, solo testeando las teclas.
-
funciona con tres archivos
-
algo asi como:
nombres dw offset nom1,offset nom2, offset nom3
nom1 db '........
nom2 db '......
nom3 db '.......
-
MUCHAS GRACIAS POR TU AYUDA!! ahorita me encuentro realizando mi proyecto de manera eficiente y si encontrar errores, lo tengo que entregar el lunes y creo que me esta quedando bien :kicking: si alguien lo necesita luego cuando lo termine se lo puedo prestar solo digan, ayudandonos entre todos podemos salir adelante :comp: :hola:
-
Hola, yo estoy interesado en tu proyecto, me gustaria estudiarlo un poco ya que recien empiezo con esto.
Si puedes hacerme el favor, mandamelo a:
Angel_K_Y_do@hotmail.com
O súbelo a este foro.
Desde ya, muchas gracias. :)
-
ok ahorita te lo mando, el codigo esta bien comentariado asi que no creo que te cueste tanto entenderlo ademas te lo mando con el manual de usuario y todo, si tienes alguna duda me preguntas ok te lo mando al correo ahorita bye :kicking:
-
me cuentas si te ha servido de algo ahi sale
-
:D Eternamente agradecido Wolfliving, he aprendido mucho gracias a tu proyecto.
Muchas gracias por ayudar a los que recien empezamos.
Saludos :hola: y nuevamente, gracias.