Рекурсия - Assembler

Узнай цену своей работы

Формулировка задачи:

Вот убейте, застрелите, че хотите короче со мной делайте, но без понятия как написать данное задание на ассемблере!!! Всетаки мозг как-то что ли на Си более заточен. Пытался по разному, но что ни делай все core dumped!!! Не ребят я не ленивый, ведь хочешь не хочешь, а придется научится это делать!!! Кто чем может, подскажите как написать это проклятое задание. Программа должна для целочисленного n высчитывать значение, которое вычисляется на основе следующего задания:

f(n) = 1 for n=0; f(n) = 0 for n=1; f(n) = 1 for n=2; f(n) = f(n - 1)+2*f(n-2)-2*f(n-3) for n>=3

Например для значения 5 высчитало следующее: f(5) = f(4)+2*f(3)-2*f(2)= /*значение f(2) известно из условия и == 1 поэтому вместо f(2) запишем -2*1 т.е. -2. Расписываем далее*/ = f(3)+2*f(2)-2*f(1)+f(2)+2*f(1)-2*f(0)-2 = f(2)+2*f(1)-2*f(0)+2*1-2*0+1+2*0-2*1-2=1+2*0-2*1-1=-2 Обнаглею в край и попрошу знатаков ассемблера, которые щёлкают данные задания как орешки тупо выкинуть код данного задания,а в противном случае буду рад какому-либо псевдокоду, алгоритму, как это можно написать либо подсказкам(но в моем случае очень прозрачным подсказкам, а не то придётся и их объяснять)))). Пытался что-то сам написать. Вышло следуюющее:
.intel_syntax noprefix
.text
.global main
main:
 
  mov eax,2
  push eax
  call f
 
  add esp,4
  push edx
  mov ebx,offset message
  push ebx
  call printf
  add esp,8
  mov eax,0
  ret

        f:
        mov ecx,[esp+4]
        cmp ecx,2
        jnz not2
 
        mov edx,1
        push edx
 
        not2:
        cmp ecx,1
        jnz not1
 
        mov edx,0
        push edx
        not1:
 
        cmp ecx,0
        jnz not0
 
        mov edx,1
        push edx
        not0:
 
        dec eax
        add edx,[esp+4]
        pop edx
        ret
 
.data
message:
.asciz "f(n) = %i\n"
Для значений n 0,1 и 2 выводит на экран соответствующие значения согласно условию, т.е.1,0,1 соответственно. Что либо дальше писал - core dumped!!!Но всеравно мне кажется,что то, что я написал, больше притянуто за уши для частных случаев. Вот такой ВОПРОСИК.

Решение задачи: «Рекурсия»

textual
Листинг программы
shl eax
neg eax

Оцени полезность:

9   голосов , оценка 4.333 из 5