#------------------------------------------------------------------------
# Scrivere un programma assembler che si comporta come segue:
# 1. richiede da tastiera un numero naturale X a due cifre
# in base 10, svolgendo gli opportuni controlli.

# 2. Se X è uguale a zero, termina, altrimenti:
# 3. Stampa l'X-simo termine S(X) della successione di Fibonacci
# (vedere sotto) purché S(X) sia rappresentabile su 32 bit,
# altrimenti stampa "overflow".
# 4. Ritorna al punto 1.

# Nota 1: la successione di Fibonacci è così definita:
# S(1)=S(2)=1;
# S(i)=S(i-1)+S(i-2), i>=3
#
# Nota 2: data l'assoluta semplicità dell'algoritmo richiesto,
# una soluzione che riesca a stampare solo numeri che
# stanno su 16 bit sarà considerata poco.

# Esempio:
# ?24
# 46368
#
# ?39
[CODE
# 63245986
#
# ?48

# overflow

#------------------------------------------------------------------------

Questo è il testo del problema... e questa è la mia soluzione:

codice:
 error_mess: .ASCII "overflow\r"
_main:
	CALL newline
	PUSH %CX
	PUSH %AX
	PUSH %DI

	start:
	MOV $0,%EAX
	MOV $0,%EBX
	MOV $0,%DI
	MOV $2,%CX
	

	punto1:
	MOV $'?',%AL
	CALL output

	CALL inDANB16_eco
	CALL newline
	CMP $0,%AX
	JE fine
	CMP $0x01,%AX
	JE uno
	CMP $0x02,%AX
	JE uno



	MOV %AX,%DI ## DI contiene il la posizione nella serie
	MOV $0, %EAX
	MOV $1,%EBX  ## indietro
	MOV $1,%EDX  ## avanti
	Mov $2,%CX   #CONTATORE
	
	ciclo:
		INC %CX
		ADD %EDX,%EBX
		JC errore
		CALL inverti
		CMP %DI,%CX
		JNE ciclo
	stampa:
		
		CALL stmp
		CALL newline
		JMP start



	errore:	
		MOV $error_mess,%EBX
		CALL outline
		CALL newline
		JMP start



	CALL newline
	CALL newline
	JMP fine


	uno:
	MOv $1,%AX
	CALL B16DAN_out
	CALL newline
	JMP start


	
	fine:

	CALL pause1
	POP %DI	
	POP %AX
	POP %CX
	RET


inverti:

	PUSH %EAX

	MOV %EBX,%EAX
	MOV %EDX,%EBX
	MOV %EAX,%EDX

	POP %EAX
	RET
stmp:
	PUSH %EDX    
	PUSH %EAX
	MOV %EBX,%EAX ## eax contiene il numero da stampare
	MOV $10, %EBX
	MOV $0,%CX

	itero:
	MOV $0, %EDX
	DIV %EBX
	
	PUSH %DX
	INC %CX
	CMP $0,%AX
	JNE itero

	fuori_itero:
	POP %AX
	CALL B16DAN_out
	
	DEC %CX
	CMP $0,%CX
	JNE fuori_itero

	POP %EAX
	POP %EDX



	RET

.INCLUDE "C:/GAS/utility"

Ma perche mi stampa 1 1 1 2 3 5 ...
invece di 1 1 2 3 5.. ??


Grazieee