Внутренняя работа больше / меньше чем - PullRequest
3 голосов
/ 28 ноября 2010

Мне было просто интересно, как получается результат больше / меньше, чем вычисленный, и я вернулся к языкам высокого уровня.

Я ищу здесь модель аппаратных элементов.используйте для объяснения стандартный пример, скажем, 5> 3.

1 Ответ

6 голосов
/ 28 ноября 2010

Обычно это реализуется с помощью вычитания с обнаружением переноса.

С точки зрения стробирования вычитание двоичных чисел выполняется путем передачи согласованных пар битов из каждого операнда через вычитатель:

            +-----+
carry_in -->|     |
            |     |--> a_minus_b
       a -->| SUB |
            |     |--> carry_out
       b -->|     |
            +-----+

a_minus_b = carry_in ⊕ a ⊕ b
carry_out = (carry_in ∧ b) ∨ (¬a ∧ (carry_in ∨ b))

Бит 0 из аргументов a и b передается через первый вычитатель, с carry_in, равным 0. Бит 1 из каждого аргумента передается через второй вычитатель, при этом для carry_in установлено значение carry_out этапа бит-0.,Это продолжается в цепочке до тех пор, пока окончательное значение carry_out в конце не установит флаг переноса ЦП, который содержит 1, если a Кроме того, каждый a_minus_b объединяется в OR и сводится к нулю, а результат идетв нулевой флаг процессора, означающий, что a = b.

Эти флаги могут быть проверены машинными инструкциями, которые генерируются компиляторами, когда вы пишете if (a < b) { ... }.

Я оставлю 5> 3 в качестве упражнения для читателя.

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