Grazie per le risposte, questa è la funzione che uso per convertire. La stringa acquisita è in BUFFER, funziona per la parte bassa del numero, ma mi perde la parte alta...
CONVERTI PROC NEAR
MOV WORD PTR X[0],0 ;inizializzazione delle variabili X e POT
MOV WORD PTR X[2],0
MOV WORD PTR POT[0],1
MOV WORD PTR POT[2],0
MOV CH,0 ;imposta il contatore
MOV CL,BUFFER[1] ;al numero di caratteri inseriti
MOV BX,CX ;imposta il registro BX, usato per scorrere il numero inserito,
INC BX ;in modo da posizionarsi sulla cifra delle unità
CICLO: MOV AL,BUFFER[BX] ;copia la cifra corrente della stringa inserita
SUB AL,30H ;la converte in cifra
MOV AH,0
MUL WORD PTR POT[0] ;DX:AX=AX*POT --> la moltiplica per POT
ADD WORD PTR X[0], AX ;aggiunge il parziale alla variabile che contiene il numero da calcolare
MOV RIPORTO, DX
MOV AL,BUFFER[BX] ;copia la cifra corrente della stringa inserita
SUB AL,30H ;la converte in cifra
MOV AH,0
MUL WORD PTR POT[2]
ADD AX, RIPORTO ;aggiunge il parziale alla variabile che contiene il numero da calcolare
ADD WORD PTR X[2], AX
MOV AL,10
MOV AH,0
MOV DX,0
MUL WORD PTR POT[0] ;calcola la potenza di 10 successiva
MOV WORD PTR POT[0],AX ;la copia in POT
MOV RIPORTO,DX
MOV AL,10
MOV AH,0
MOV DX,0
MUL WORD PTR POT[2] ;calcola la potenza di 10 successiva
;la copia in POT
ADD AX,RIPORTO
MOV WORD PTR POT[2],AX
DEC BX ;decremento BX
LOOP CICLO ;ripete
RET ;ritorno alla procedura chiamante
CONVERTI ENDP