Инструкция XADD
...
... Обменивает первый операнд (операнд-адресат) на второй операнд (операнд-источник), а затем загружает сумму двух значений в операнд-адресат.
Итак, в соответствии с Operation он выполняет следующий микрокод:
TEMP ← SRC + DEST;
SRC ← DEST;
DEST ← TEMP;
В вашем случае это означает, что xadd %eax, (%ecx)
- Создает переменную TEMP , содержащую добавление значения
EAX
плюс значение по адресу, на который указывает ECX
- Перемещает значение по адресу, на который указывает
ECX
, на EAX
- Перемещает переменную TEMP по адресу, указанному
ECX
Эта инструкция может сочетаться с префиксом LOCK
и, следовательно, выполняться атомарно.