[RISOLTO]Somma due vettori assembly 8086?

di il
3 risposte

[RISOLTO]Somma due vettori assembly 8086?

Salve, voglio sommare due vettori (inseriti da tastiera) e salvare il tutto in un terzo vettore. Esempio:
VET1 5,2,3,4,2
VET2 3,4,2,1,2

VET3 8,6,5,5,4 <--- Vettore somma
Io ho svolto cosi,solo che invece dei numeri mi stampa le lettere, cioè : 2+2=d (ovvero la quarta lettera dell'alfabeto) , oppure 3+2= e (quinta lettera dell'alfabeto). Ecco il codice

.MODEL MEDIUM
.STACK 100H
.DATA
        VET1 DB 5 DUP(?)
	VET2 DB 5 DUP(?)
	VET3 DB 5 DUP(?)
	DOM1 DB 'INSERISCI PRIMI VETTORI: ',13,10,'$'
	DOM2 DB 'INSERISCI SECONDI VETTORI: ',13,10,'$'
	RIS DB 'VETTORE FINALE E ',13,10,'$'


.CODE
.STARTUP

    MOV AX,@DATA
	MOV DS,AX
	MOV SI,0     ;contatore
	
	
CICLO1:    
            MOV AH,09H
           MOV DX,OFFSET DOM1        ;stampa a video dom1
            INT 21H
        	
              MOV AH,01H
		INT 21H                        ;inserisco gli elementi del primo vettore
		MOV [VET1+SI],AL
		
		INC SI
		CMP SI,5                       ; continuo finche' non inserisco tutti e 5 elementi
		JL CICLO1
		
		MOV SI,0     ;contatore =0
		
		
CICLO2:          ;faccio lo stesso per il secondo vettore

             MOV AH,09H
		MOV DX,OFFSET DOM2
		INT 21H                 
		
             MOV AH,01H
		INT 21H
		MOV [VET2+SI],AL
		
		INC SI
		CMP SI,5
		JL CICLO2
		
		MOV SI,0
		MOV AL,0 
		MOV AH,0
CICLO3: 
             ADD AL,[VET1+SI]
		ADD AL,[VET2+SI]
		MOV [VET3+SI],AL
		                                                       ;eseguo la somma
		INC SI
		MOV AL,0
		CMP SI,5
		JL CICLO3
		
		MOV SI,0  
		    
		 MOV AH,09H
	        MOV DX,OFFSET RIS          ;STAMPA A VIDEO RIS
	        INT 21H
CICLO4:	
		MOV AH,02H
		MOV DL,[VET3+SI]
		INT 21H                               ;stampa elementi del vettore 3
		 INC SI
	        CMP SI,5
	        JL CICLO4 
		
		
		
		MOV AH,4CH                                ;controllo al dos
		INT 21H
END
		





3 Risposte

  • Re: [RISOLTO]Somma due vettori assembly 8086?

    Il codice lavora con i valori in ASCII. Quando inserisci '2' il valore memorizzato sarà 0x32. Quindi prima di memorizzare devi togliere 0x30

    SUB AL,30H
    MOV [VET1+SI],AL

    SUB AL,30H
    MOV [VET2+SI],AL

    e poi devi aggiungere 30H prima di visualizzare il carattere che, da binario, deve essere trasformato in ASCII

    MOV DL,[VET3+SI]
    ADD DL,30H
  • Re: [RISOLTO]Somma due vettori assembly 8086?

    oregon ha scritto:


    Il codice lavora con i valori in ASCII. Quando inserisci '2' il valore memorizzato sarà 0x32. Quindi prima di memorizzare devi togliere 0x30

    SUB AL,30H
    MOV [VET1+SI],AL

    SUB AL,30H
    MOV [VET2+SI],AL

    e poi devi aggiungere 30H prima di visualizzare il carattere che, da binario, deve essere trasformato in ASCII

    MOV DL,[VET3+SI]
    ADD DL,30H
    Ciao grazie mille, ora funziona! Ma un dubbio, come mai invece facendo un programma che mi fa inserire il vettore e poi me lo stampa semplicemente,mi funziona anche senza mettere la SUB prima della MOV di [VET+SI],AL
  • Re: [RISOLTO]Somma due vettori assembly 8086?

    Ovvio ... se inserisci il valore in ASCII e lo visualizzi subito in ASCII evidentemente non avrai problemi.

    Ma se ci devi fare dei calcoli allora devi usare il valore binario.
Devi accedere o registrarti per scrivere nel forum
3 risposte