PDA

View Full Version : Assembler somma


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:

alderighi
21-03-2004, 09:11
ti allego un esercizio simile che ti può essere d'aiuto

Beppe2hd
21-03-2004, 11:56
Grazie, vedro che posso fare

Beppe2hd
21-03-2004, 14:35
Ho letto il programma, ma non sapendo le corrispondenze delle codifiche asci ho avuto qualche problema.

Potresti scrivermi cosa fa il programma e commentare le rghe con la codifica asci?

Sempre se non è troppo disturbo!

Il problema è che in realtà ho alle spalle solo due lezioni e un'esercitazione che sono (maledetta organizzazione trimestrale) un pò poche!

alderighi
21-03-2004, 14:51
Se ti devo dire la verità anche io non sono un grande esperto, faccio quarta Iti informatica e questa era l'esercitazione epr un compito, il fatto è che il programma che ti ho mandato io fa la somma fra due numeri e poi la stampa in output.
Allora prendendo spunto da li dovresti fare un algoritmo del
genere
Esempio di pseudocodifica:
mettiamo che numero sia 125
divido numero per 100 e stampo il risultato quindi 1+48(per via del codice ascii)
rimoltiplico il risultato precedente per 100 e lo sottraggo a numero=125 quindi trovo 25
divido numero(25) per 10 e stampo 2+48(sempre per il codice ascii)
rimoltiplico il numero 2*10 e lo sottraggo a 25 precedentemente trovato e ottengo 5 ci sommo 48 e lo stampo

purtroppo metodi migliori non ne conosco, l'unica soluzione che mi è venuta in mente è questa altrimenti chiedi a qualche prof o compagno

Beppe2hd
21-03-2004, 15:26
Grazie, adesso è tutto più charo!