Und für alle die mal einen Vergleich zwischen Assembler und normalen Pascal anstellen wollen
Delphi-Quellcode:
function Fib(N: Byte): Int64;
function Log2(A: Cardinal): Cardinal;
register;
asm
BSR EAX,EAX
end;
var
E,F,T,S: Int64;
M: Byte;
begin
if N < 2
then
raise Exception.Create('
Fib(N), N must be > 1');
if N > 92
then
raise Exception.Create('
Fib(N),N must be < 93');
M := 1
shl Log2(N);
F := 1;
E := 0;
while M > 1
do
begin
M := M
shr 1;
T := E * F;
F := F * F;
E := E * E + F;
T := T + T + F;
if N
and M <> 0
then
begin
S := E;
E := T;
T := T + S;
end;
S := T;
T := F;
F := S;
end;
Result := F;
// E = Fib(N -1);
end;
Bevor man irgendwas in Assembler macht sollte man den Algorithmus optimieren.
Gruß hagen