#include <stdlib.h>
static inline uint
xchg(volatile unsigned int *addr, unsigned int newval)
{
uint result;
asm volatile("lock; xchgl %0, %1" : "+m" (*addr), "=a" (result) : "1" (newval) : "cc");
return result;
}
Может кто-нибудь сказать мне, что именно делает этот код? Я имею в виду, что у меня есть идея или части этой команды. «1» newval - это вход, «= a» - это сброс его предыдущего значения и его обновление. «m» - для операции с памятью, но я смущен функциональностью этой функции. Что делает знак «+ m»? Эта функция делает что-то вроде m = a; m = newval; return aВызов сборки в GCC?
также здесь http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s6 – osgx