Beppe2hd
20-03-2004, 21:57
Sto studiando un pò di assembler per l'esame di "Calcolatori Elettronici I"
Paer che quest'anno la parte di assembler sia un pò più ridotta, ma comunque ho preso i vecchi appelli dove in un problema richiedeva di ordinare un vettore inizializzato con valori numerici e fare la somma di tutti questi valori.
Ho provato a realizzare qualcosa e l'assemblatore non rileva errori.
Il problema credo sia in fase di stampa.
In un esempio di somma che ho visto la somma veniva realizzata solo fra due numeri ad una sola cifra e poi se il valore era maggiore di 10 veniva sottratto dieci e stampato un 1 davanti al risultato.
In sintesi il programma sembra funzionare, ma al posto del numero stampa quella che forse è la codifica asci raggiunta con la somma
Chi mi aiuta?
Questo è il proggo
MY_STACK SEGMENT STACK
DW 40 DUP (?)
MY_STACK ENDS
MY_DATA SEGMENT
VET DB 5 DUP (2 DUP (7),1)
SOMMA DB '$$$'
MY_DATA ENDS
MY_CODE SEGMENT
INIZIO PROC FAR
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK
start: MOV AX, MY_DATA
MOV DS, AX
MOV SI, OFFSET VET ;inizializza si all'offset di vet
MOV CX, 14 ;inizializza cx a 14 (le componenti del vettore sono 14)
MOV DX, 0 ;pone dx a 0
somm: ADD DX, DS:[SI] ; somma con un ciclo gli elementi del vettore (loop dipende da CX)
INC SI ; passa all'elemento del vettore successivo
LOOP somm
MOV SI, OFFSET SOMMA ;pone in SI l'offset di SOMMA
MOV DS:[SI], DX ;pone dx nel primo elemento del vettore somma
MOV AX, SEG SOMMA ;pone il segmento di somma in ax
MOV DS, AX ;lo copia in ds
MOV DX, OFFSET SOMMA ;pone l'offset di somma in dx
MOV AH, 09H ;stampa il tutto
INT 21H
MOV AH, 4CH ;ridà il controllo al dos
INT 21H
INIZIO ENDP
MY_CODE ENDS
END start
:eek:
Paer che quest'anno la parte di assembler sia un pò più ridotta, ma comunque ho preso i vecchi appelli dove in un problema richiedeva di ordinare un vettore inizializzato con valori numerici e fare la somma di tutti questi valori.
Ho provato a realizzare qualcosa e l'assemblatore non rileva errori.
Il problema credo sia in fase di stampa.
In un esempio di somma che ho visto la somma veniva realizzata solo fra due numeri ad una sola cifra e poi se il valore era maggiore di 10 veniva sottratto dieci e stampato un 1 davanti al risultato.
In sintesi il programma sembra funzionare, ma al posto del numero stampa quella che forse è la codifica asci raggiunta con la somma
Chi mi aiuta?
Questo è il proggo
MY_STACK SEGMENT STACK
DW 40 DUP (?)
MY_STACK ENDS
MY_DATA SEGMENT
VET DB 5 DUP (2 DUP (7),1)
SOMMA DB '$$$'
MY_DATA ENDS
MY_CODE SEGMENT
INIZIO PROC FAR
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK
start: MOV AX, MY_DATA
MOV DS, AX
MOV SI, OFFSET VET ;inizializza si all'offset di vet
MOV CX, 14 ;inizializza cx a 14 (le componenti del vettore sono 14)
MOV DX, 0 ;pone dx a 0
somm: ADD DX, DS:[SI] ; somma con un ciclo gli elementi del vettore (loop dipende da CX)
INC SI ; passa all'elemento del vettore successivo
LOOP somm
MOV SI, OFFSET SOMMA ;pone in SI l'offset di SOMMA
MOV DS:[SI], DX ;pone dx nel primo elemento del vettore somma
MOV AX, SEG SOMMA ;pone il segmento di somma in ax
MOV DS, AX ;lo copia in ds
MOV DX, OFFSET SOMMA ;pone l'offset di somma in dx
MOV AH, 09H ;stampa il tutto
INT 21H
MOV AH, 4CH ;ridà il controllo al dos
INT 21H
INIZIO ENDP
MY_CODE ENDS
END start
:eek: