t1nman

Arch_fibXnum Win version

May 29th, 2012
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Вычисление n-ого элемента ряда Фибоначчи с выводом на консоль
  2.  
  3. global ..start  ; объявляем точку входа
  4. extern ExitProcess ; подключаем Шindoшs API процедуру выхода
  5. %include "io.inc" ; подключаем для использования outi (вывод на консоль числа)
  6.  
  7. section .data ; секция переменных
  8. n dd 6 ; n-ое число ряда Фибоначчи
  9.  
  10. section .text ; секция текста программы
  11. ..start:        ; точка входа (обязательно такое имя (на Шindoшs ..start, на Linux _start))
  12.         push dword [n] ; помещаем n в стэк
  13.         call fibonacci ; вызываем ф-ю fibonacci
  14.        
  15.         push eax ; помещаем значение eax в стек
  16.         call outi ; выводим значение на вершине стека
  17.        
  18.         push dword 0 ; код возврата для ExitProcess. 0 - программа отработала без ошибок.
  19.         call ExitProcess ; выход
  20.        
  21. fibonacci:
  22.             pop ebp ; сохраняем адрес возврата из подпрограммы (адрес, следующий за вызовом call fibonacci)
  23.         pop ecx ; извлекаем n
  24.        
  25.         xor eax, eax ; обнуляем eax
  26.         inc eax ; в eax теперь 1
  27.         xor ebx, ebx
  28.         inc ebx
  29.     .loop: ; локальная метка
  30.         mov edx, eax ; edx 1-ый элемент
  31.         mov eax, ebx ; eax 2-ой элемент
  32.         add ebx, edx ; ebx сумма 1-ого и 2-ого
  33.         loop .loop ; loop сам уменьшает ecx на 1 каждый раз. Выполняется пока значение ecx не станет нулем.
  34.        
  35.         mov eax, edx ; копируем n-ый элемент из edx в eax
  36.         push ebp ; помещаем в стек адрес возврата
  37.        
  38.         ret ; возврат по адресу на вершине стека
Advertisement
Add Comment
Please, Sign In to add comment