Двоичное вычитание, бит переноса не установлен? - PullRequest
0 голосов
/ 13 ноября 2018

Я столкнулся с ситуацией, которая кажется немного неинтуитивной при работе с двоичным вычитанием и битами флага NZCV.

Рассмотрим следующие значения

0xF7      0b 1111 0111
0xFF      0b 1111 1111

Если они оба считаются значениями 8B, где

0x000000F7      0b 0000 .... 0000 1111 0111
0x000000FF      0b 0000 .... 0000 1111 1111

При вычитании конечный результат равен

0x FF FF FF F8    0b 1111 .... 1000

Я понимаю, как получается этот результат, но не понимаю, почему для этой операции не установлен бит переноса.

Насколько мне известно, бит переноса устанавливается при заимствовании MSB, разве это не так?

1 Ответ

0 голосов
/ 13 ноября 2018

Инструкции вычитания ARM с переносом (SBC, RSC) интерпретируют флаг переноса (C) как:

0: означает заимствование

1: означает без заимствования

Таким образом, в вашем расчете MSB заимствован, а перенос не установлен!

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