Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

xcng - обмен значений - есть ли аналог в Delphi?   Найти похожие ветки 

 
tipman ©   (2003-11-12 16:12) [0]

В Delphi делаю так...:

temp := a;
a := b;
b := temp;

...а на Asm"е так

xcng a,b

Есть ли аналог такого обмена в Delphi


 
Skier ©   (2003-11-12 16:13) [1]

Swap(...) ?


 
tipman ©   (2003-11-12 16:25) [2]

Swap(...) - это не то. Он меняет старший байт на младший, а младший на старший ОДНОЙ 2-Х БАЙТНОЙ ПЕРЕМЕННОЙ!
А надо 32 битную A поменять на 32 битную B, и наоборот...


 
Goffman ©   (2003-11-12 16:27) [3]

a:=a xor b;
b:=a xor b;
a:=a xor b;


 
Anatoly Podgoretsky ©   (2003-11-12 16:38) [4]

Ну так напиши свою функцию, осталось только три строчки добавить


 
tipman ©   (2003-11-12 16:48) [5]

...я спрашиваю конкретно - есть ли такая функция в Delphi которая была бы аналогом xcng a,b, и не писать свою? Свою-то я знаю как написать, есть ли функция типа того:

procedure delphi_xcng(a,b:integer);
asm
xcng a,b;
end;


 
tipman ©   (2003-11-12 16:48) [6]

...я спрашиваю конкретно - есть ли такая функция в Delphi которая была бы аналогом xcng a,b, и не писать свою? Свою-то я знаю как написать, есть ли функция типа того:

procedure delphi_xcng(a,b:integer);
asm
xcng a,b;
end;


 
Anatoly Podgoretsky ©   (2003-11-12 17:05) [7]

tipman © (12.11.03 16:48) [6]
Это не рабочая функция


 
tipman ©   (2003-11-12 17:10) [8]

почему?


 
mrcat ©   (2003-11-12 17:12) [9]

tipman © (12.11.03 17:10)

Схема команды: xchg операнд_1,операнд_2
Назначение: обмен двух значений между регистрами или между регистрами и памятью.


 
default ©   (2003-11-12 21:25) [10]

по-моему самый быстрый способ это Goffman © (12.11.03 16:27) [3]
три XOR-а быстрей чем XCHG


 
Ihor Osov'yak ©   (2003-11-12 23:04) [11]

2 tipman © (12.11.03 17:10) [8]

Ты волшебное слово var потерял

И инструкция - xcng - нету такой... Возможно третья буковка должна быть h


 
default ©   (2003-11-13 00:59) [12]


procedure Exchange(var A, B: Integer);
asm

MOV ECX, [EDX]
XOR ECX, [EAX]
XOR [EDX], ECX
XOR [EAX], ECX

end;

но лучше писать типа TMP := A; A := B; B := TMP - это быстрей


 
tipman ©   (2003-11-13 09:33) [13]

Т.е. конкретного оператора не существует?


 
Anatoly Podgoretsky ©   (2003-11-13 10:07) [14]

Тебе начиная с сообщения [1] это и говорят


 
PVOzerski ©   (2003-11-13 10:11) [15]

2[11]: у меня есть нехорошее предположение, что если var добавить, легче может и не стать, так как asm-код начнет тасовать указатели, а не сами переменные (проверять лень :^) ).


 
MBo ©   (2003-11-13 10:19) [16]

>PVOzerski
так default [12]и написал [EDX] и т.п.


 
tipman ©   (2003-11-13 10:32) [17]

PVOzerski © (13.11.03 10:11) [15]
Ты очень даже прав!
Я привёл эту функцию так - для простого примера (естественно неработоспособного)! Но ведь никто не мешает всё это писать в теле самой программы! Тогда помоему всё будет Ok!



Страницы: 1 вся ветка

Текущий архив: 2003.11.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
3-78797
a_andru
2003-11-05 19:08
2003.11.24
Оле Оракл два запроса


6-79077
DelphiN!
2003-09-27 08:27
2003.11.24
Поиск в локальной сети включеных компов


14-79136
Alibaba
2003-10-31 22:28
2003.11.24
Иконки


7-79207
Samael
2003-09-16 12:28
2003.11.24
Перехват событий в NT/2000/XP


14-79143
ertong
2003-10-28 19:39
2003.11.24
Задача