PDA

Visualizza la versione completa : [Assembler]-Da vettore di numeri a numero-Somma 2 numeri [x tasm]


Oscar87k
07-10-2004, 18:11
salve ho disperato bisogno di aiuto...
premetto ke sto all'inizio per quanto riguarda la scrittura di programmi in asm [asmmebler!] x Tasm16 bit... io avrei bisogno di un programma ke mi faccia questo:

-Acquisisca da input una stringa di numeri e metta ogni singolo numero in un vettore
-Trasformare i numeri messi nel vettore nel numero vero e proprio e mettere questo numero in una variabile..
[es]:
Vettore: |0|1|2| <- [posto]
valori: 4 5 6

ecco io devo poi mettere questi tre numeri in una variabile unica trasformandola in numero ovvero... io poi dovrò avere una variabile, mettiamo ke si chiami num ke contenga quel valore ovvero

num=456

-inserire un secondo numero in un altro vettore e fare esattamente le cose ke ho fatto con il primo numero ovvero trasformarlo in una variabile..

-Sommare le due variabili e mettere il risultato nella variabile Totale.

Help me..

Ferixo
10-10-2004, 00:44
Eccoti accontentato.
Premetto solo che l'utilizzo di un array per contenere le cifre lette da tastiera è inutile e premetto anche che (sicuramente lo saprai, ma lo scrivo solo per fartelo notare) in una variabile di lunghezza pari a un byte puoi inserire solo numeri compresi tra 0 e 255, nel caso dovessi utilizzare una word puoi inserire numeri tra 0 e 65535 (numeri interi senza segno).
Il codice per avverare quanto da te richiesto è il seguente:


title numeri
.model small,farstack
.stack
.data
numero dw ?
.code
.startup
PUSH numero ;salvo il parametro nello stack per passarlo alla procedura di lettura
call readecimal ;procedura di lettura del numero
POP numero
.exit
readecimal proc
PUSH bp
mov bp,sp
push ax
push bx
push dx
xor bx,bx
dieci db 10d
lttr:mov ax,bx
mul dieci
vrlt:mov ah,08h
int 21h
cmp al,0Dh ;la lettura del numero termina con l'invio
je fnlttr
mov ah,02h
mov dl,al
cmp al,30h
jb error
cmp al,39h
ja error
int 21h
sub al,30h
xor ah,ah
add bx,ax
jmp lttr
error:mov dl,07h
int 21h
jmp vrlt
fnlttr:mov [BP+4],bx
push dx
push bx
push ax
push bp
readecimal endp
end

Ferixo
10-10-2004, 00:49
Scusami correggo le ultime quattro istruzioni (ad esclusione delle end): non sono delle push ma delle pop...
(vecchio codice)

title numeri
.model small,farstack
.stack
.data
numero dw ?
.code
.startup
PUSH numero ;salvo il parametro nello stack per passarlo alla procedura di lettura
call readecimal ;procedura di lettura del numero
POP numero
.exit
readecimal proc
PUSH bp
mov bp,sp
push ax
push bx
push dx
xor bx,bx
dieci db 10d
lttr:mov ax,bx
mul dieci
vrlt:mov ah,08h
int 21h
cmp al,0Dh ;la lettura del numero termina con l'invio
je fnlttr
mov ah,02h
mov dl,al
cmp al,30h
jb error
cmp al,39h
ja error
int 21h
sub al,30h
xor ah,ah
add bx,ax
jmp lttr
error:mov dl,07h
int 21h
jmp vrlt
fnlttr:mov [BP+4],bx
push dx
push bx
push ax
push bp
readecimal endp
end


codice corretto


title numeri
.model small,farstack
.stack
.data
numero dw ?
.code
.startup
PUSH numero ;salvo il parametro nello stack per passarlo alla procedura di lettura
call readecimal ;procedura di lettura del numero
POP numero
.exit
readecimal proc
PUSH bp
mov bp,sp
push ax
push bx
push dx
xor bx,bx
dieci db 10d
lttr:mov ax,bx
mul dieci
vrlt:mov ah,08h
int 21h
cmp al,0Dh ;la lettura del numero termina con l'invio
je fnlttr
mov ah,02h
mov dl,al
cmp al,30h
jb error
cmp al,39h
ja error
int 21h
sub al,30h
xor ah,ah
add bx,ax
jmp lttr
error:mov dl,07h
int 21h
jmp vrlt
fnlttr:mov [BP+4],bx
pop dx
pop bx
pop ax
pop bp
readecimal endp
end

Oscar87k
10-10-2004, 16:50
mitico... perfetto :D
sei stato gentilissimo., grazie inifite!

Loading