Working with __asm__

I'm exploring an example C code which includes an inline assembly code as:
__asm__("lsr %[j], %[j], 25" : [j] "=r" (j) : [i] "[j]" (j));
What is the meaning of : [j] "=r" (j) : [i] "[j]" (j) that follows the assembler template part?
__asm__("lsr %[j], %[j], 25" : [j] "=r" (j) : [i] "[j]" (j));
What is the meaning of : [j] "=r" (j) : [i] "[j]" (j) that follows the assembler template part?