#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" नया इनपुट इनपुट है, "= ए" अपने पिछले मान को फ्लश करना और इसे अपडेट करना है। "एम" मेमोरी ऑपरेशन के लिए है लेकिन मैं इस फ़ंक्शन की कार्यक्षमता के बारे में उलझन में हूं। "+ एम" चिह्न क्या करता है? क्या यह कार्य कुछ ऐसा करता है जैसे m = a; एम = newval;जीसीसी में कॉलिंग असेंबली?
यहां भी http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s6 – osgx