Форум: "Прочее";
Текущий архив: 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