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

Вниз

Работа с XCHG и LOCK   Найти похожие ветки 

 
Тимохов_   (2009-06-01 15:11) [0]

Здравствуйте, коллеги!

Вопрос знатокам архитектуры процессоров и ассемблера.

Как вы думаете, почему в функции InterlockedExchange из sysutils.pas нет LOCK перед XCHG? Вроде как должно быть? Или нет? А если многопроцессорная машина?

function InterlockedExchange(var A: Integer; B: Integer): Integer;
asm
       XCHG    [EAX],EDX
       MOV     EAX,EDX
end;


Поясните, пожалуйста.


 
Pavia ©   (2009-06-01 15:20) [1]

Должен быть перфикс LOCK.


 
Rouse_ ©   (2009-06-01 15:25) [2]


> Должен быть перфикс LOCK.

Не должен быть... Читаем мануал:
The XCHG instruction always asserts the LOCK# signal regardless of
the presence or absence of the LOCK prefix.


 
Тимохов_   (2009-06-01 15:30) [3]

да вот мне знакомый говорит, что должен быть.

в quality central посмотрел - нет такого репорта.
а там ребята маститые - если бы была ошибка, то вероятней всего заметили бы.

или все-таки ошибка?


 
Тимохов_   (2009-06-01 15:31) [4]

т.е. ты хочешь сказать, Саша, что всегда выполняется с LOCK"ом?

приведи адрес цитаты, пожалуйста.


 
Игорь Шевченко ©   (2009-06-01 15:32) [5]


> да вот мне знакомый говорит, что должен быть.


в каком-то whats.new от какой-то версии Delphi было написано, что префикс убран, ибо незачем.


 
Rouse_ ©   (2009-06-01 15:32) [6]


> приведи адрес цитаты, пожалуйста.

® IA-32 Intel  Architecture Software Developer’s Manual, качай с сайта интела...


 
Тимохов_   (2009-06-01 15:33) [7]

Тогда зачем InterlockedExchange  из kernel32.dll сделан с LOCK"ом?


 
Игорь Шевченко ©   (2009-06-01 15:34) [8]


> Тогда зачем InterlockedExchange  из kernel32.dll сделан
> с LOCK"ом?


а он точно сделан с Lock-ом ?


 
Тимохов_   (2009-06-01 15:35) [9]


> а он точно сделан с Lock-ом ?

Правда тут cmpxchg. Ему нужен что-ли LOCK?

kernel32.InterlockedExchange:
7C80981E mov ecx,[esp+$04]
7C809822 mov edx,[esp+$08]
7C809826 mov eax,[ecx]
7C809828 lock cmpxchg [ecx],edx
7C80982C jnz $7c809828
7C80982E ret $0008
7C809831 nop


 
clickmaker ©   (2009-06-01 15:38) [10]

This instruction can be used with a LOCK prefix to allow the instruction to be executed atomi-cally. To simplify the interface to the processor"s bus, the destination operand receives a write cycle without regard to the result of the comparison. The destination operand is written back if the comparison fails; otherwise, the source operand is written into the destination. (The processor never produces a locked read without also producing a locked write.)


 
Игорь Шевченко ©   (2009-06-01 15:39) [11]


> Правда тут cmpxchg.


а зачем обманывать ?


 
Тимохов_   (2009-06-01 15:41) [12]

Слуште, коллеги, скажите мне, пожалуйста, тупому -

xchg и lock xchg - по семантике ОДНО и то же?

правда очень надо :)


 
Rouse_ ©   (2009-06-01 15:43) [13]


> Правда тут cmpxchg

В этом случае LOCK нужен.


 
Тимохов_   (2009-06-01 15:44) [14]

Да не нужен мне cmpxchg :) Ты про xchg скажи!
Саша, вопрос важен в том числе и для тебя...


 
Rouse_ ©   (2009-06-01 15:44) [15]


> xchg и lock xchg - по семантике ОДНО и то же?

Нет, это разные команды...


 
Игорь Шевченко ©   (2009-06-01 15:44) [16]


> xchg и lock xchg - по семантике ОДНО и то же?


что имеется в виду под семантикой ?


 
Rouse_ ©   (2009-06-01 15:45) [17]


> Саша, вопрос важен в том числе и для тебя...

Если ты про VMProtect - он не виртуализирует lock xchg, только XCHG


 
Тимохов_   (2009-06-01 15:46) [18]


> что имеется в виду под семантикой ?

поясняю вопрос

lock xchg блокирует шину данных, тем самым делая доступ к ясейке памяти последовательным в том числе из РАЗНЫХ процессоров.

Ведет ли себя также xchg?

(согласно цитате их [2] xchg неявно работает как lock xchg).


 
Pavia ©   (2009-06-01 15:47) [19]

Прочитал маны.
XCHG при обращении к памяти всегда выполняется атамарно. Согласно манам интел и АМД. А вот про регистр-регистр не сказанно. Но поверим что тоже.

LOCK это префикс код F0h

Перед cmpxchg нужно добовлять LOCK чтобы сделать ее атамарной.


 
Rouse_ ©   (2009-06-01 15:49) [20]

При xchg шина всегда блокируется независимо от префикса, таким образом команды XCHG и LOCK XCHG - абсолютно идеттичны, но имеют разные опкоды


 
Тимохов_   (2009-06-01 15:50) [21]


> А вот про регистр-регистр не сказанно.

Что-то я это не понял? Регистр же потоку принадлежит. Его то атомарить зачем.


 
oxffff ©   (2009-06-01 15:50) [22]


> Тимохов_   (01.06.09 15:11)


lock префикс автоматом для это интструкции


 
oxffff ©   (2009-06-01 15:56) [23]


> oxffff ©   (01.06.09 15:50) [22]


В смысле интструкция производит захват шины в вне зависимости от lock prefix.


 
Тимохов_   (2009-06-01 16:29) [24]

Всем спасибо! Как же хорошо, что есть такая группа товарищей, которые все знают!

Я вами всеми горжусь. У меня вот ничего в голове не держится, поэтому отвечаю редко, ибо если и знаю, то скорее знал, т.е. уже забыл.

Еще раз спасибо :)



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

Форум: "Прочее";
Текущий архив: 2009.08.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.009 c
11-1202393103
Jon
2008-02-07 17:05
2009.08.02
Multi screen output


2-1244228392
dumb
2009-06-05 22:59
2009.08.02
Заполнить поле, нажать кнопку


15-1243518797
Unknown user
2009-05-28 17:53
2009.08.02
Использование компилятора в своих программах


2-1244386325
demon
2009-06-07 18:52
2009.08.02
Прилипоние чужих окон


15-1243743525
Filer
2009-05-31 08:18
2009.08.02
Отловить момент открытия файла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский