Scrittura su file[Risolto]

di il
4 risposte

Scrittura su file[Risolto]

Salve a tutti

Oggi ho ripreso dopo un po' di tempo il linguaggio Assembly 8086 e vorrei imparare le basi per riuscire a creare un file di testo,scriverci sopra e leggerlo.

Sono riuscito a creare un piccolo programmino che crea un file

Ora invece ho provato a creare un programma che crea un file e sopra dovrebbe scriverci la frase
"Hello World!" ma non viene scritto sul file.

Ecco il sorgente del codice:
DATA SEGMENT PUBLIC
	FRASE DB "APERTURA E SCRITTURA SU FILE",10,13,'$'
	NOME DB  "prova.txt",0
	CIAO DB "HELLO WORLD!",10,13,'$'
	RIS DB "SCRITTURA COMPLETATA SU FILE",10,13,'$'
DATA ENDS ;CHIUSURA DEL SEGMENTO DEI DATI

CODE SEGMENT
	
	ASSUME CS:CODE,DS:DATA
	
INIZIO:

	;CARICAMENTO DEI DATI
	MOV AX,DATA
	MOV DS,AX 
	
	MOV AH,09H
	LEA DX,FRASE
	INT 21H 
	

	
	MOV DX,OFFSET NOME ;CARICAMENTO DEL NOME DEL FILE
	MOV CX,0 ;ATTRIBUTO DEL FILE --> 0=FILE NORMALE, 1 = SOLA LETTURA
	MOV AH,3CH ;RICHIESTA CREAZIONE DEL FILE
	INT 21H ;INTERRUPT CHE PERMETTE LA CREAZIONE DEL FILE
	
		

	
	;APERTURA DEL FILE(CREATO PRIMA)
	LEA DX,NOME ;CARICO IL NOME DEL FILE
	MOV AL,1 ;ATTRIBUTI DI ACCESSO AL FILE --> 0 = LETTURA, 1 = SCRITTURA, 2 = LETTURA/SCRITTURA
	MOV AH,3DH ;RICHIESTA DELLA APERTURA DEL FILE
	INT 21H ;INTERRUPT CHE PERMETTE APERTURA DEL FILE
	
		

	;SCRITTURA DELLA FRASE SU FILE 
	MOV AH,40H ;RICHIESTA SCRITTURA SU FILE
	MOV CX, LENGTH CIAO ;LUNGHEZZA DEL MESSAGGIO(NUMERO DI BYTE DA SCRIVERE SUL FILE)
	LEA DX,CIAO 
	INT 21H 
	
	;CHIUSURA DEL FILE
	MOV AH,3Eh
	LEA BX,NOME
	INT 21H 
	
	
	MOV AH,09H
	LEA DX,RIS
	INT 21H 
	
	
	
	;RESTITUISCO CONTROLLO AL DOS
	MOV AH,4CH
	INT 21H 	
	
	
CODE ENDS ;CHIUSURA DEL SEGMENTO DEL CODICE
END INIZIO 
Cosa ho sbagliato? Grazie

4 Risposte

  • Re: Scrittura su file[Risolto]

    Il codice corretto è
    
    DATA SEGMENT PUBLIC
       FRASE DB "APERTURA E SCRITTURA SU FILE",10,13,'$'
       NOME DB  "prova.txt",0
       CIAO DB "HELLO WORLD!",10,13
       RIS DB "SCRITTURA COMPLETATA SU FILE",10,13,'$'
    DATA ENDS ;CHIUSURA DEL SEGMENTO DEI DATI
    
    CODE SEGMENT
       
       ASSUME CS:CODE,DS:DATA
       
    INIZIO:
    
       ;CARICAMENTO DEI DATI
       MOV AX,DATA
       MOV DS,AX 
       
       MOV AH,09H
       LEA DX,FRASE
       INT 21H 
        
       LEA DX,NOME ;CARICAMENTO DEL NOME DEL FILE
       MOV CX,0 ;ATTRIBUTO DEL FILE --> 0=FILE NORMALE, 1 = SOLA LETTURA
       MOV AH,3CH ;RICHIESTA CREAZIONE DEL FILE
       INT 21H ;INTERRUPT CHE PERMETTE LA CREAZIONE DEL FILE
        
       ;SCRITTURA DELLA FRASE SU FILE 
       MOV BX,AX ; FILE HANDLE
       PUSH BX	; SALVA HANDLE
       MOV AH,40H ;RICHIESTA SCRITTURA SU FILE
       MOV CX,14 ;LUNGHEZZA DEL MESSAGGIO (NUMERO DI BYTE DA SCRIVERE SUL FILE)
       LEA DX,CIAO 
       INT 21H 
       
       ;CHIUSURA DEL FILE
       POP BX ; FILE HANDLE
       MOV AH,3Eh
       INT 21H 
       
       MOV AH,09H
       LEA DX,RIS
       INT 21H 
       
       ;RESTITUISCO CONTROLLO AL DOS
       MOV AH,4CH
       INT 21H    
          
    CODE ENDS ;CHIUSURA DEL SEGMENTO DEL CODICE
    END INIZIO
    
    Prima di tutto, non devi usare sempre il nome del file per ogni funzione. Il nome lo passi solo alla CREATE. Se il file è correttamente creato, viene restituito un handle nel registro AX. E' questo valore che devi passare in BX alle altre funzioni. Ovviamente non è necessaria la OPEN se hai già fatto la CREATE.

    La stringa non è necessario che sia terminata da $ (non viene tenuto conto del $) e la lunghezza la devi calcolare e passare tu (dato che è una costante).
  • Re: Scrittura su file[Risolto]

    Grazie per la spiegazione!
    Alla prossima
  • Re: Scrittura su file[Risolto]

    Prego ... ma una curiosità ... avevi studiato come funziona la CREATE prima di usarla? Avevi letto che restituisce un handle? Come mai non l'hai usato?
  • Re: Scrittura su file[Risolto]

    Il linguaggio assembly scolasticamente lo abbiamo abbandonato da giugno ma per curiosità ho cercato informazioni sui file per approfondire le mie conoscenze. Ho trovato delle slide su Internet che non comprendevano un esempio di codice completo ma solamente frammenti e ciò mi ha confuso.
Devi accedere o registrarti per scrivere nel forum
4 risposte