Почему установлено меньше, чем операция ALU - PullRequest
5 голосов
/ 22 октября 2011

Почему slt считается операцией ALU?Я думал, что он просто сделает вычитание, а затем получит * Z * эро-вывод из АЛУ?

 ALU control lines |     Function
-------------------+-------------------
       0000        |       AND
       0001        |       OR
       0010        |       add
       0110        |     subtract
       0111        | set on less than

Или АЛУ должен вывести 1, если результат A - Bslt $t1, A, B) отрицательно.

1 Ответ

7 голосов
/ 22 октября 2011

Предполагается, что вывести 1, если A меньше, чем b, и 0 в противном случае.Это часто влечет за собой вычисление A - B, для которого вам нужен ALU.

Теперь, если бы он просто вычислял знаковый бит A - B, он был бы избыточен, но рассмотрим случай, когда A = -2147483648 = 0x80000000 и B = 1 = 0x00000001, здесь результат вычитания будет 0x7fffffff = 2147483647, для которого не установлен самый значимый бит, даже если A < B.

Как видно из таблицы "Паттерсон, Дэвид А.; Хеннесси, Джон Л.: Организация и дизайн компьютеров «Я отсылаю вас к главе 3, в частности к подразделу, который касается« сложения и вычитания »(3.3 во 2-м издании, 3.2 в 4-м).У него есть таблица, в которой рассматриваются переполнения / недополнения, где можно посмотреть угловые случаи.

Также следует помнить, что результат ALU составляет 32 бита, поэтому даже если бы результат был просто знаковым битом результата вычитания, ему все равно потребовался бы другой код операции ALU, чтобы сигнализировать о том, что 31 ноль, объединенный с результирующим битом, долженбудет возвращен, а не полный результат вычитания.

Строка «Ноль», на которую вы, вероятно, ссылаетесь, - в архитектурах, обсуждаемых в книге, - IIRC, используется только для сравнений относительно ветви равных / ветви не равных,SLT/SLTI на руке сохраняет свой результат в регистре.

...