fibonacci em assembly
section .data extern printf ;label para importação de função da linguagem C extern scanf ;label para importação de função da linguagem C fmt1: db "%d" fmt2: db "resultado: %i",10,0 a: dd 0 ;variável para execução das funções res: dd 0 ;resultado/retorno da função fibonacci section .text
global main
main: ;início push dword a ;empilha endereço da variável 'a' push dword fmt1 ;empilha endereço da entrada da função scanf call scanf ;chamada da função scanf add esp,8 ;desempilha a variável a
mov ebx,[a] ;armazena o valor de 'a' no registrador ebx call fibo ;chamada da função que realiza o cálculo da sequência de fibonacci mov [res],eax ;armazena o valor de eax no valor de 'res' (resultado)
push dword [res] push dword fmt2 call printf add esp,8
fibo: push ebx push ecx push edx
cmp ebx,0 ;compara o conteúdo de ebx com 0 je lb1 ;se a comparação anterior for verdadeira, pula para lb1 cmp ebx,1 ;compara o conteúdo de ebx com 1 je lb1 ;se a comparação anterior for verdadeira, pula para lb1 jmp lb2 ;pule para lb2
lb1:
mov eax,ebx ;armazena o conteúdo de ebx em eax pop edx ;desempilhar na ordem inversa em que foi empilhado pop ecx ;desempilhar na ordem inversa em que foi empilhado pop ebx ;desempilhar na ordem inversa em que foi empilhado ret
lb2:
sub ebx,1 call fibo mov ecx,eax sub ebx,1 call fibo mov edx,eax add ecx,edx mov eax,ecx pop edx ;desempilhar na ordem inversa em que foi empilhado pop ecx ;desempilhar na ordem inversa em que foi empilhado pop ebx ;desempilhar na ordem inversa em que foi empilhado