Fibonacci Assembly
ciao ho bisogna di aiuto... devo scrivere un codice assembly tale ke dato un numero n mi restituisca i primi n termini della successione di Fibonacci..! grazie
questo è il mio pseudocodice
a = 1
print a
b = 1
print b
loop
c = a + b
print c
a = b
b = c
end loop
non riesco però a "tradurlo" in assembler. :(
questo è il mio pseudocodice
a = 1
print a
b = 1
print b
loop
c = a + b
print c
a = b
b = c
end loop
non riesco però a "tradurlo" in assembler. :(
Risposte
GRAZIE!! :)
Ciao, salvo qualche errore di battitura e magari qualche riga mancante in alcune system call, la logica dovrebbe essere corretta.
.section .data
a: .long 0
b: .long 0
c: .long 0
n: .long 0 #numero di iterazioni > 2 ..DA INSERIRE IL VALORE CORRETTO..
i: .long 2 #indice per vedere quando fermarsi
_start:
mov $1,%eax #metto 1 nel registro eax
mov $eax,a #metto eax in a
mov $1,%ebx #metto 1 nel registro ebx
mov $ebx,b #metto ebx in b
#stampo a
movl $4, %eax
movl $1, %ebx
leal a, %ecx
int $0x80
#stampo b
movl $4, %eax
movl $1, %ebx
leal b, %ecx
int $0x80
mov a,%eax #rimetto il valore
mov b,%ebx #rimetto il valore
mov $0, %ecx #azzero il valore
loop:
cmp n,i
jle fine #abbiamo fatto tutte le iterazioni
add %eax,%ecx #sommo eax con 0
add %ebx,%ecx #sommo ebx con il valore di eax di prima
mov %ecx, c #c ha il risultato della somma
#stampo il risultato della somma
movl $4, %eax
movl $1, %ebx
leal c, %ecx
int $0x80
mov b, %eax #aggiorno il valore
mov c, %ebx #aggiorno il valore
mov $0, %ecx #azzero il valore in ecx
jmp loop
fine:
xorl %eax, %eax # azzera eax
inc %eax # incrementa eax di 1 (1 e' il codide della exit)
xorl %ebx, %ebx # azzera ebx (alla exit viene passato 0)
int $0x80 # invoca la funzione exit
Aggiunto 17 ore 6 minuti più tardi:
:)
.section .data
a: .long 0
b: .long 0
c: .long 0
n: .long 0 #numero di iterazioni > 2 ..DA INSERIRE IL VALORE CORRETTO..
i: .long 2 #indice per vedere quando fermarsi
_start:
mov $1,%eax #metto 1 nel registro eax
mov $eax,a #metto eax in a
mov $1,%ebx #metto 1 nel registro ebx
mov $ebx,b #metto ebx in b
#stampo a
movl $4, %eax
movl $1, %ebx
leal a, %ecx
int $0x80
#stampo b
movl $4, %eax
movl $1, %ebx
leal b, %ecx
int $0x80
mov a,%eax #rimetto il valore
mov b,%ebx #rimetto il valore
mov $0, %ecx #azzero il valore
loop:
cmp n,i
jle fine #abbiamo fatto tutte le iterazioni
add %eax,%ecx #sommo eax con 0
add %ebx,%ecx #sommo ebx con il valore di eax di prima
mov %ecx, c #c ha il risultato della somma
#stampo il risultato della somma
movl $4, %eax
movl $1, %ebx
leal c, %ecx
int $0x80
mov b, %eax #aggiorno il valore
mov c, %ebx #aggiorno il valore
mov $0, %ecx #azzero il valore in ecx
jmp loop
fine:
xorl %eax, %eax # azzera eax
inc %eax # incrementa eax di 1 (1 e' il codide della exit)
xorl %ebx, %ebx # azzera ebx (alla exit viene passato 0)
int $0x80 # invoca la funzione exit
Aggiunto 17 ore 6 minuti più tardi:
:)