Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

asm


Ильичев С.А. ©   (2005-10-20 13:21:00) 

Скажите пожалуйста что быстрее.
Или как-то по другому можно?

1.

 function DivTwoAndCeil(const X: Integer): Integer;
 begin
   Result := X div 2;
   if X mod 2 > 0 then inc(Result);
 end;

2.

 function DivTwoAndCeil(X: Integer): Integer; assembler;
 asm
   MOV EAX, X
   MOV ECX, EAX
   SHR EAX, 1
   AND ECX, 1
   ADD EAX, ECX
   MOV Result, EAX
 end;


Fenik   (2005-11-01 17:34:00) [1]

function DivTwoAndCeil(const X: Integer): Integer;
begin
Result := (X+1) shr 1;
end;


icWasya   (2005-11-01 09:31:00) [2]

function DivTwoAndCeil(const X: Integer): Integer;
begin
  Result := (X+1) div 2;
end;


Cyberdeamon   (2005-10-31 23:23:00) [3]

Удалено модератором


Cyberdeamon   (2005-10-31 23:22:00) [4]

<CO DE>


evvcom   (2005-10-20 14:38:00) [5]

asm
 SHR EAX, 1
 ADC EAX, 0
end;


MBo   (2005-10-20 14:35:00) [6]

Inc(X)
X div 2


Anatoly Podgoretsky   (2005-10-20 14:15:00) [7]

Y := X DIV 2 + X MOD 2;


Ильичев С.А.   (2005-10-20 14:05:00) [8]

2 Digitman ©   (20.10.05 13:52) [5]
за [2] большое спасибо
а в [4] первую срочку внимательнее


Digitman   (2005-10-20 13:52:00) [9]


> Ильичев С.А. ©   (20.10.05 13:40) [4]


как это "не то" ?)

убедись сам :

procedure TForm1.Button3Click(Sender: TObject);
var i: integer;
begin
 for i := 0 to 6 do
   memo1.Lines.add(inttostr(divtwoandceil(i)));
end;


Ильичев С.А.   (2005-10-20 13:40:00) [10]

2 Digitman ©   (20.10.05 13:33) [1]
не то =)

мне надо
f(0) = 0
f(1) = 1
f(2) = 1
f(3) = 2
f(4) = 2
f(5) = 3
f(6) = 3
...


Digitman   (2005-10-20 13:38:00) [11]

пардон ...

из-за имени ф-ции смысл ее затеи понятен не сразу ..

function DivTwoAndCeil(X: Integer): Integer;
asm
 SHR EAX, 1 //или SAR EAX, 1 при необходимости соблюсти знак
 JNC @@exit
 INC EAX
@@exit:
end;


Anatoly Podgoretsky   (2005-10-20 13:38:00) [12]

Быстрее не вызывать функцию


Digitman   (2005-10-20 13:33:00) [13]

function DivTwoAndCeil(X: Integer): Integer;
asm
  AND EAX, 1
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо