Problema con búsqueda de archivos, Ensamblador, función 4EH INT 21
Publicado por Eddie (2 intervenciones) el 13/12/2015 18:14:01
Buenas tardes, acudo a uds debido a una cuestión que ya me ha dado problemas por mas de una semana, actualmente me encuentro concluyen mi curso de Arquitectura de computadores en la cual pudimos tener la maravillosa oportunidad de manejar la programación a bajo nivel, actualmente me encuentro trabajando sobre un proyecto que implica manejo de archivos pero me ha surgido un problema con la función 4E de la int 21 y es el siguiente (anexo código simplificado):
Según el libro de Peter Abel la función 4e de la interrupción 21 es capaz de interpretar los comodines * y ? de los cuales sabemos que el comodín ? sirve para reemplazar un único carácter y el * para reemplazar múltiples letras o caracteres, pero a la hora de implementar el código planteado en el libro al llamar al DOS me está devolviendo el código de error 03 en el AX y me deja el bufer en blanco.
Lo curioso es que si cambio la dirección a 'E:\ASD\????.*' y la interrupción funciona perfectamente aunque obviamente solo me soporta archivos con nombres de no mas de 4 caracteres cosa que me representa un gran problema.
Resumiendo: Me gustaría saber porque la función 4e de la int 21 no me reconoce los comodines de búsqueda si los estoy implementando tal cual los plantea el libro ('*.*' -----> cualquier archivo de cualquier extensión).
De antemano eh de aclarar que estoy trabajando a 16 bits y sobre entiendo las limitaciones de esta interrupción (máximo soporta archivos con 8 caracteres en su nombre y tres en su extensión )
Si he cometido algún error o falta alguna instrucción sabría agradecerles que me indicaran cual, de ante mano muchas gracias.
Según el libro de Peter Abel la función 4e de la interrupción 21 es capaz de interpretar los comodines * y ? de los cuales sabemos que el comodín ? sirve para reemplazar un único carácter y el * para reemplazar múltiples letras o caracteres, pero a la hora de implementar el código planteado en el libro al llamar al DOS me está devolviendo el código de error 03 en el AX y me deja el bufer en blanco.
Lo curioso es que si cambio la dirección a 'E:\ASD\????.*' y la interrupción funciona perfectamente aunque obviamente solo me soporta archivos con nombres de no mas de 4 caracteres cosa que me representa un gran problema.
Resumiendo: Me gustaría saber porque la función 4e de la int 21 no me reconoce los comodines de búsqueda si los estoy implementando tal cual los plantea el libro ('*.*' -----> cualquier archivo de cualquier extensión).
De antemano eh de aclarar que estoy trabajando a 16 bits y sobre entiendo las limitaciones de esta interrupción (máximo soporta archivos con 8 caracteres en su nombre y tres en su extensión )
Si he cometido algún error o falta alguna instrucción sabría agradecerles que me indicaran cual, de ante mano muchas gracias.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
.MODEL SMALL
.386
.STACK 64
.DATA
INFO DB 43 DUP(?),'$'
DIR DB 'E:\ASD\*.*',00H
.CODE
MAIN PROC NEAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
MOV AH,06H
MOV AL,00H
MOV BH,1BH
MOV CX,0000H
MOV DX,184FH
INT 10H ;LIMPIAR PANTALLA
MOV AH,1AH
LEA DX,INFO
INT 21H ;CARGO EL BUFER
MOV AH,4EH
MOV CX,00H
LEA DX,DIR
INT 21H ;LLAMO AL DOS PARA BUSCAR
LEA DX,INFO
MOV AH,09H
INT 21H ;IMPRIMO EN PANTALLA EL BUFER
MOV AX,4C00H
INT 21H
MAIN ENDP
END
Valora esta pregunta


0