Рекурсивная функция Аккерманна-Питера в сборке x86 (NASM)

Я пытаюсь реализовать рекурсивную функцию Аккермана-Питера в NASM-сборке x86. Функция определяется следующим образом:

* a (0; m) = m + 1

* a (n + 1; 0) = a (n; 1)

* a (n + 1; m + 1)) = a (n; a (n + 1; m))

Моя проблема в том, что я даже не представляю, как начать правильно. К настоящему времени я реализовал только функцию "степень x" в ассемблере.

Вот что у меня есть: http://pastebin.com/rsWALyCq (на немецком языке просто спрашивают n и m)

Я благодарен за каждую помощь, которую я могу получить с этим.

-

Итак, я сделал Push / Pop Statements Symetric сейчас, но все еще получаю ошибку сегментации. Я попытался отладить все это и поместил сообщение отладки в первый регистр. Я скомпилировал Программу и попробовал ее с n=0 и m=0, и он не печатает сообщение отладки, поэтому он даже не вводит первый регистр. Я не могу понять, почему он этого не делает.

Вот моя текущая попытка: http://pastebin.com/D4jg7JGV

2 ответа

Решение

РЕШЕНИЕ:

Хорошо, я нашел проблему:

Каким-то образом я не управлял ebp и esp не правильно. Я знаю, что использовал макросы ENTER и LEAVE в каждом вызове Funktion-Call, и теперь все работает правильно. Вот решение, спасибо за ваше время:

http://pastebin.com/ZpPucpcs

Если вы можете делать это рекурсивно (с учетом роста кадров стеков), то это довольно просто. Основная идея в коде подпрограммы:

ACKERMANN
Get n and m off the stack or from registers
Compare n to zero.
If it is equal, jump to FIRSTCASE
Compare m to zero
If it is equal, jump to SECONDCASE
put n + 1 into the first argument slot
put m into the second argument slot
call ACKERMANN
put n into the first argument slot
put the return of previous call into second argument slot
call ACKERMANN
put the return of the previous call into the return register/stack slot
return

FIRSTCASE
put m+1 in the return register/stack slot
return

SECONDCASE
Put n into the first argument slot
put 1 into the second argument slot
call ACKERMANN
put the return of previous call into return register/stack slot
return
Другие вопросы по тегам