Я написал код, чтобы решить эту подсказку:HLA Ассамблея Рекурсивных Фибоначчи Программа
Создать программу языкового HLA Ассамблеи, которая запрашивает число от пользователя. Создайте и вызовите функцию, которая вычисляет значение в последовательности Фибоначчи. В математике последовательность Фибоначчи названа в честь итальянского математика Леонардо из Пизы, который был известен во время его жизни как Фибоначчи. Последовательность Фибоначчи начинается с 1 и 1. Каждый последующий член в последовательности представляет собой сумму двух предыдущих значений. Таким образом, серия будет: 1,1,2,3,5,8,13 и так далее. Чтобы получить полный кредит, вы должны использовать рекурсию для решения этой проблемы, создавая функцию, подпись которой:
процедура fibRec (значение: int8); @нет дисплея; @noframe; Вот несколько примеров программ диалогов, чтобы направлять свои усилия:
Указывайте номер: 3 выдумки (3) = 2
Предоставить письмо: 5 выдумки (5) = 5
В одном из чтобы помочь вам сосредоточиться на создании программы Ассамблеи, я хотел бы предложить вам следующие операторы С, которые соответствуют указанным выше спецификациям программы. Если хотите, используйте их в качестве основы для создания вашей программы сборки.
SAMPLE C CODE:
------------------------
int main()
{
int value;
printf("Provide a value: ");
scanf("%d", &value);
int f = fibRec(value);
printf("fib(%d) = %d\n", value, f);
return(0);
}
int fibRec(int value)
{
int result = 1;
if (value == 1 || value == 2) // base case
result = 1;
else
result = fibRec(value-1) + fibRec(value-2);
return(result);
}
и мой подход - попытаться использовать реализацию C и преобразовать ее в HLA. Когда я запускаю программу, я получаю бесконечный цикл (сбои cmd), вероятно, из-за того, как я использовал рекурсию. Я не знаю, как реализовать
еще результат = fibRec (значение-1) + fibRec (значение-2);
часть реализации С.
Вот что у меня есть:
program fib;
#include("stdlib.hhf");
static
value : int8;
//returnAddress : dword;
//temp: int16;
procedure fibRec(value : int8); @nodisplay; @noframe;
begin fibRec;
mov(CL, value);
mov(1, DL);
cmp(CL, 1);
je Res1;
cmp(CL, 2);
je Res1;
jmp Else1;
//else result = fibRec(value-1) + fibRec(value-2);
Else1:
//mov(1, DL);
dec(CL);
call fibRec;
sub(2, CL);
call fibRec;
add(CL, DL);
jmp ProgExit;
Res1:
mov(1, DL);
jmp ProgExit;
ProgExit:
end fibRec;
/////////////////////////////////////////////////////////////////////////////////////////////////////
begin fib;
stdout.put("Provide a value: ");
stdin.get(value); //CHANGED TO IVALUE
mov(CL, value); //SAVES THE INPUT TO A REGISTER
call fibRec; // MUST CALL THE PROCEDURE
stdout.put("fib(");
stdout.puti8(value);
stdout.put(") = ");
stdout.put(DL);
end fib;
звучит как назначение sch. – Mox
См. Http://stackoverflow.com/a/38795365/224132 для рекурсивного Fib (n) для x86. (Это часть ответа об игрушке asm, но я использовал пару макросов и общее подмножество этого языка с x86 для записи рекурсивного Fib (n), который будет работать для обоих.) В любом случае, downvoted это для того, чтобы быть не полезным для другие люди, плохо изученные и полные много ненужного текста. Вся первая половина сообщения может быть «У меня есть задание реализовать Fibonacci (n) в HLA». –