Ciao a tutti, stavo scrivendo un programma completamente in assembly, un piccolo progetto, non ho avuto troppi problemi ma in questo momento mi trovo bloccato da un bel pò su una cosa, non riesco a implementare operazioni di lettura/scrittura su file tramite i servizi offerti dal DOS, ciò che accade è la stampa di un messaggio di errore quando si tenta di aprire e associare un handle a un file, ovviamente il messaggio di errore fa parte del mio programma e andrebbe visualizzato solo nel caso in cui non si ha accesso al file, il file non è presente sul disco(in tal caso crea il file) o il percorso non è corretto, fatto sta che il messaggio viene visualizzato comunque anche se nessuna di queste prima citate è vera.
Codice:
Come se non bastasse quando eseguo il DEBUG passando come parametro al programma un file, fila tutto liscio come l'olio.
Qualcuno vede errori che mi sono sfuggiti?
PS: sto lavorando in ambiente MS-DOS, qundi la componente SEGMENT con la quale indirizzare dati nel PSP(program segment prefix), l'ho ricavata con il servizio di DOS 62h, la componente OFFSET del primo byte allocato per la stringa di parametro è pari a 81h
Codice:
Servizio di DOS numero 3Dh, apertura di una file.
Valore di ritorno:
Se CF = 0, no errori, AX = handle
Se CF = 1, errori, AH = codice di errore
Codice:
Macro utilizzate:
NO_FIND_FILE EQU 2h
NO_FIND_PATH EQU 3h
MANY_FILE_OPEN EQU 4h
NO_ACCESS EQU 5h
Codice:
open_file PROC FAR
push dx
call get_PSP_segment_in_DS
mov ah, 3Dh
mov al, 2h
mov dx, OFFSET_FIRTS_BYTE_PARAMETERS
int 21h
jnc _end_f
cmp ah, NO_FIND_FILE
je create_file
error_msg: push ax
call print_error_msg
add sp, 2h
xor ax, ax ;STDIN handle
jmp _end_f
create_file: mov ah, 3Ch
xor cx, cx
mov dx, OFFSET_FIRTS_BYTE_PARAMETERS
int 21h
jc error_msg
_end_f: pop dx
ret
open_file ENDP
Codice:
print_error_msg PROC NEAR
push bp
mov bp, sp
push ax
push dx
push ds
mov ax, file_error_msg
mov ds, ax
mov ah, 09h
cmp WORD PTR [bp+4], NO_FIND_PATH
je error_03
cmp WORD PTR [bp+4], MANY_FILE_OPEN
je error_04
cmp WORD PTR [bp+4], INVALID_HANDLE
je error_06
;no access msg
mov dx, OFFSET no_access_msg
int 21h
jmp _end_f
error_03: mov dx, OFFSET no_find_path_msg
int 21h
jmp _end_f
error_04: mov dx, OFFSET many_open_file_msg
int 21h
jmp _end_f
error_06: mov dx, OFFSET invalid_handle_msg
int 21h
_end_f: pop ds
pop dx
pop ax
pop bp
ret
print_error_msg ENDP
Qualcuno vede errori che mi sono sfuggiti?
PS: sto lavorando in ambiente MS-DOS, qundi la componente SEGMENT con la quale indirizzare dati nel PSP(program segment prefix), l'ho ricavata con il servizio di DOS 62h, la componente OFFSET del primo byte allocato per la stringa di parametro è pari a 81h