добавить некоторые уточнения:
шр AL, 1;это будет (SH), если ift (R) ight (1) x значение, содержащееся в регистре AL, что составляет 8 младших битов регистра AX.Следовательно, он разделит значение, содержащееся в AL, на 2.
Если ранее AL был даже похож на 0b100 (4), он станет 0b10 (2) и поместит 0 в флаг переноса.Флаг переноса - это бит 0 в регистре флага https://en.wikipedia.org/wiki/FLAGS_register
Если ранее AL было нечетным значением, например 0b101 (5), то оно станет 0b10 (2) и поместит 1 в регистр флага.Следовательно, флаг переноса будет действовать как остаток, если вы разделите на 2.
jnc bit_0;Он (J) выдает метку 'bit_0', если (N) o (C) установлен флаг arry, т.е. если значение было четным (например, 0b100 в приведенном выше примере) до сдвига.