Ich habe einige Codes geschrieben diese Aufforderung zu lösen:HLA Assembly rekursive Fibonacci-Programm
Ein HLA Assembler-Programm, das für eine Zahl von dem Benutzer auffordert. Erstellen und rufen Sie eine Funktion auf, die einen Wert in der Fibonacci-Sequenz berechnet. In der Mathematik ist die Fibonacci-Folge nach dem italienischen Mathematiker Leonardo von Pisa benannt, der zu seinen Lebzeiten als Fibonacci bekannt war. Die Fibonacci-Sequenz beginnt mit 1 und 1. Jeder spätere Term in der Sequenz ist die Summe der beiden vorherigen Werte. Die Serie wird also lauten: 1,1,2,3,5,8,13 und so weiter. Um das volle Guthaben zu erhalten, müssen Sie eine Rekursion verwenden, um dieses Problem zu lösen. Erstellen Sie eine Funktion, deren Signatur lautet:
Prozedur fibRec (value: int8); @kein Bildschirm; @kein Rahmen; Hier sind einige Beispiel-Programm Dialoge Ihre Bemühungen führen:
eine Anzahl Stellen: 3 fib (3) = 2
Geben Sie einen Buchstaben: 5 fib (5) = 5
In einem Ich möchte Ihnen die folgenden C-Anweisungen anbieten, die den oben genannten Programmspezifikationen entsprechen. Wenn Sie möchten, verwenden Sie sie als Grundlage für den Aufbau Ihres Assembly-Programms.
und mein Ansatz ist zu versuchen, die C-Implementierung zu verwenden und in HLA umzuwandeln. Wenn ich das Programm starte, bekomme ich eine Endlosschleife (die cmd stürzt ab) wahrscheinlich wegen der Art, wie ich die Rekursion benutzt habe. Ich bin mir nicht sicher, wie man die
sonst result implementieren kann = fibRec (Wert-1) + FibRec (Wert-2);
Teil der C-Implementierung. Hier
ist, was ich habe:
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;
klingt wie eine sch Zuordnung. – Mox
Siehe http://stackoverflow.com/a/38795365/224132 für eine rekursive Fib (n) für x86. (Es ist Teil einer Antwort über eine Spielzeug-Asm, aber ich habe ein paar Makros und die gemeinsame Teilmenge dieser Sprache mit x86 verwendet, um eine rekursive Fib (n) zu schreiben, die für beide funktioniert.) andere Leute, schlecht recherchiert und voller irrelevanter Texte. Die gesamte erste Hälfte der Post könnte "Ich habe eine Aufgabe, Fibonacci (n) in HLA zu implementieren". –