PDA

Visualizza la versione completa : [Assembler] mi aiutate a trovare l'errore?


Petronilla
13-02-2009, 12:08
#------------------------------------------------------------------------
# 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

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.. ?? :dhò:


Grazieee

Loading