Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Вычисление n-ого элемента ряда Фибоначчи с выводом на консоль
- global ..start ; объявляем точку входа
- extern ExitProcess ; подключаем Шindoшs API процедуру выхода
- %include "io.inc" ; подключаем для использования outi (вывод на консоль числа)
- section .data ; секция переменных
- n dd 6 ; n-ое число ряда Фибоначчи
- section .text ; секция текста программы
- ..start: ; точка входа (обязательно такое имя (на Шindoшs ..start, на Linux _start))
- push dword [n] ; помещаем n в стэк
- call fibonacci ; вызываем ф-ю fibonacci
- push eax ; помещаем значение eax в стек
- call outi ; выводим значение на вершине стека
- push dword 0 ; код возврата для ExitProcess. 0 - программа отработала без ошибок.
- call ExitProcess ; выход
- fibonacci:
- pop ebp ; сохраняем адрес возврата из подпрограммы (адрес, следующий за вызовом call fibonacci)
- pop ecx ; извлекаем n
- xor eax, eax ; обнуляем eax
- inc eax ; в eax теперь 1
- xor ebx, ebx
- inc ebx
- .loop: ; локальная метка
- mov edx, eax ; edx 1-ый элемент
- mov eax, ebx ; eax 2-ой элемент
- add ebx, edx ; ebx сумма 1-ого и 2-ого
- loop .loop ; loop сам уменьшает ecx на 1 каждый раз. Выполняется пока значение ecx не станет нулем.
- mov eax, edx ; копируем n-ый элемент из edx в eax
- push ebp ; помещаем в стек адрес возврата
- ret ; возврат по адресу на вершине стека
Advertisement
Add Comment
Please, Sign In to add comment