To add some clarification:
shr AL, 1; it will be (SH) ift (R) ight (1) x the value contained in the AL register, which is the 8 lower bytes of the AX register. Therefore, it will divide by 2 the value contained in AL.
If AL was previously even like 0b100 (4), it will become 0b10 (2) and put 0 in the carry flag. Transfer flag - bit 0 in the flag register https://en.wikipedia.org/wiki/FLAGS_register
If previously AL was an odd value, for example, 0b101 (5), it will become 0b10 (2) and put 1 in the flag register. Consequently, the carry flag will act as a remainder if you divide it by 2.
jnc bit_0; This will be (J) ump for the label "bit_0" if the (N) o (C) arry flag was set, i.e. If the value was equal (for example, 0b100 in the above example) before the shift.
source share