I am new to C and find it difficult to comprehend the assembly level operations here. Can someone please help with that?

```
/**
 * Input: bitmap - u32bits*
 *        bitpos - position of the bit to be reset (range 0-31)
 * return: old value of the bit (0 if unset, 1 if set)
 **/
static inline u32bits resetbit(u32bits *bitmap, u32bits bitpos)
{
     u32bits oldbit;
    __asm__ __volatile__ (
         "btr    %2, (%1)\n" /* bit test and reset */
         "sbbl   %0, %0\n"   /* return the previous value*/
        : "=r"(oldbit)      /* "0" output  parameter */
        :                   /* input parameters */
           "0"(bitmap),      /* "1" */
           "r"(bitpos)       /* "2" */
        : "%cc", "memory"   /* clobbered registers */
        );
    return oldbit;
}

```