[Delphi] jak z tym asm

0

Mam kilka pytan
1.Jak przeklada sie uzywanie wstawek asemblerowych do wydajnosci programu, chodzi mi o obliczenia matematyczne?
2.Czy oplaca sie rozbic np:. ((X*(20Y)-(5+(X2)-18)div(15*2))
na instrukcje asm ?
3 Czemu po inkrementacji delphi (inc();)liczby w petli kilkadziesiat tysiecy razy, wykonuje sie ona kilkukrotnie szybciej od jej odpowiednika w asm (INC X,n)? Petla jest zwykla for a wstawka asm.

Dzieki za wszystkie odpowiedzi

0

1.Jak przeklada sie uzywanie wstawek asemblerowych do wydajnosci programu, chodzi mi o obliczenia matematyczne?

Jeżeli musisz wykonać złożone obliczenia i to wielokrotnie, to często lepiej jest napisać coś w assemblerze. Jednak Delphi bardzo dobrze optymalizuje kod, więc w większości przypadków możesz pozostawić to zadanie dla Delphi.

2.Czy oplaca sie rozbic np:. ((X*(20Y)-(5+(X2)-18)div(15*2))
na instrukcje asm ?

Tak prostych obliczeń nie ma sensu rozbijać na instrukcje asm. Możesz za to spróbować tak przekształcić wyrażenie, żeby wykonywano jak najmniej mnożeń i dzieleń. Np:
(X*(Y*20-2)-23) div 30

3 Czemu po inkrementacji delphi (inc();)liczby w petli kilkadziesiat tysiecy razy, wykonuje sie ona kilkukrotnie szybciej od jej odpowiednika w asm (INC X,n)? Petla jest zwykla for a wstawka asm.

A to już nie wiem dlaczego tak ci wychodzi. Może nieekonomicznie piszesz w asm. Ja jak testowałem to różnice mieściły się w granicach błędu. Oto kod Delphi:
var
i, j: Cardinal;
begin
j := 0;
for i := 0 to $FFFFFFF do
Inc(j);

A tak Delphi zamienia to na asm:
mov eax, $10000000
inc ebx
dec eax
jnz -$04

--
Jest jeszcze jeden błąd ... :)
--------Oficjalny kanał----------
Service for programmers w IRC: #4programmers, warszawa.ircnet.pl (POLNet)

1 użytkowników online, w tym zalogowanych: 0, gości: 1