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

Rispondi quotando