Altro Errore nell'esecuzione del programma

mattstack

Utente Bronze
1 Aprile 2021
33
10
23
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:
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:
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
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