Сборка - shr инструкция включить флаг переноса? - PullRequest
6 голосов
/ 22 марта 2012

Я видел следующий код:

shr AL, 1
   jnc bit_0

Я не понимаю, когда флаг переноса включен из-за инструктажа shr?

Спасибо

Ответы [ 2 ]

10 голосов
/ 24 марта 2012

shr AL, 1 перемещает все биты в AL вправо на одно место.

Исходный самый правый бит сдвигается из регистра AL в флаг переноса (и устанавливается новый самый левый бит)до 0).Например:

 +------------------------+               +------------------------+
 | 1  0  0  1  0  1  0  1 |               | 0  1  1  0  0  1  0  0 |
 +------------------------+               +------------------------+
    \  \  \  \  \  \  \  \       or          \  \  \  \  \  \  \  \
     \  \  \  \  \  \  \  \                   \  \  \  \  \  \  \  \
 +------------------------+ CF            +------------------------+ CF
 |(0) 1  0  0  1  0  1  0 | 1             |(0) 0  1  1  0  0  1  0 | 0
 +------------------------+               +------------------------+

В вашем комментарии к другому ответу:

В моей книге приводится следующий пример: До смены: AL = 10101110;shr AL, 1;После смены: 01011100, CF = 1;Это ошибка?

Если это так, то да.Это сдвиг влево (shl AL, 1), а не сдвиг вправо: биты в AL все были перемещены влево на одно место, а флаг переноса был установлен на бит, который был сдвинут из левого конца.

0 голосов
/ 23 января 2018

добавить некоторые уточнения:

шр 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 в приведенном выше примере) до сдвига.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...