Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.014 c
4-79223
AKA
2003-09-28 16:24
2003.11.24
Mousewheel


3-78776
St@syan
2003-11-05 14:18
2003.11.24
Как сделать статистику, по определенному столбцу?


14-79176
Igor_thief
2003-10-28 17:43
2003.11.24
Графика


8-79071
NetKnight
2003-07-27 22:13
2003.11.24
Определение времени и битрейта файла


14-79168
shved111
2003-10-31 18:48
2003.11.24
нужна прога на Дельфи. срочно. ОПЛАЧУ. (Москва)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский