Duplicazione array[Risolto]

di il
2 risposte

Duplicazione array[Risolto]

Ciao

Ho provato a creare un piccolo programmino che permette di duplicare un array, il compilatore dice che è tutto ok ma quando eseguo il programma c'è un problema.

Il sorgente:
DATA SEGMENT PUBLIC

	INTRO DB "PROGRAMMA CHE DUPLICA IL TUO VETTORE!",10,13,'$'
	DOM DB "Digita un numero: ",'$'
	ACAPO DB 10,13,'$'
	RISPOSTA1 DB "Vettore originale: ",'$'
	RISPOSTA2 DB "Vettore duplicato: ",'$'
	LUNG EQU 5 ;costante che mi serve per i due vettori, stabilisce la loro grandezza
	VETTORE1 DB LUNG DUP(?) ;dichiaro il primo vettore
	VETTORE2 DB LUNG DUP(?) ;dichiaro il secondo vettore

DATA ENDS ;fine del segmento dei dati

CODE SEGMENT

	ASSUME CS:CODE,DS:DATA ;associa a un registro di segmento un segmento di memoria

INIZIO: ;inizio del programma vero e proprio

	;caricamento dei dati
	MOV AX,DATA 
	MOV DS,AX 
	
	;DICHIARO UNA MACRO PER ESEGUIRE LA STAMPA DI STRINGHE
	STAMPAFRASE MACRO STRINGA
		MOV AH,09H ;richiesta per la stampa di una stringa
		LEA DX,STRINGA ;carico i dati in DX
		INT 21H ;interrupt che permette di stampare la stringa
	ENDM ;fine della macro
	
	STAMPAFRASE INTRO ;richiamo la macro per eseguire la stampa della frase di introduzione del programma
	STAMPAFRASE ACAPO ;richiamo la macro per eseguire la stringa che mi fa andare a capo
	
	MOV SI,0 ;azzero il registro SI per l'array
	MOV CX,LUNG ;metto in CX il valore di lunghezza dell'array
	
	STAMPAFRASE DOM ;richiamo la macro per eseguire la stampa della domanda
	
	MOV AH,01H ;richiesta per l'input di un carattere
CICLOINPUT:
	SUB AL,30H ;conversione del carattere digitato
	MOV VETTORE1[SI],AL ;sposto nel vettore il valore digitato 
	INT 21H
	INC SI ;incremento il registro puntatore
LOOP CICLOINPUT ;fine del ciclo	

	MOV CX,SI 
	MOV SI,0 	
CICLOCOPIA:
	MOV AL,VETTORE1[SI] 
	MOV VETTORE2[SI],AL
	INC SI 
LOOP CICLOCOPIA ;fine del ciclo	

	STAMPAFRASE ACAPO 
	MOV CX,SI ;metto in CX  il numero di elementi contato prima di SI
	MOV SI,0  ;azzero il registro SI
	STAMPAFRASE RISPOSTA1 ;richiamo la macro per eseguire la stampa di una stringa

	MOV AH,02H ;richiesta per la stampa di un carattere
CICLOSTAMPA1:
	MOV DL,VETTORE1[SI] ;metto in DL il contenuto della cella dell'array a cui punta il registro SI
	ADD DL,30H ;conversione
	INT 21H
	INC SI 
LOOP CICLOSTAMPA1 ;fine del ciclo per la stampa 

	STAMPAFRASE ACAPO 
	STAMPAFRASE RISPOSTA2 
	
	MOV CX,SI ;metto in CX  il numero di elementi contato prima di SI
	MOV SI,0  ;azzero il registro SI
	
	MOV AH,02H ;richiesta per la stampa di un carattere
CICLOSTAMPA2:
	MOV DL,VETTORE2[SI] ;metto in DL il contenuto della cella dell'array a cui punta il registro SI
	ADD DL,30H ;conversione
	INT 21H
	INC SI 
LOOP CICLOSTAMPA2 ;fine dle ciclo per la stampa

;RESTITUISCO IL CONTROLLO AL DOS
MOV AH,4CH
INT 21H
CODE ENDS ;fine del segmento del codice
END INIZIO
L'errore sta nell'output finale ma non riesco a capire il perchè... (si vede nell'immagine allegata)
Allegati:
16614_7c8885aba0c1b54b5bffc7d39d2d7d71.png
16614_7c8885aba0c1b54b5bffc7d39d2d7d71.png

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte