#------------------------------------------------------------------------
# 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