Что означает «сдвиг действует на биты индивидуально»? - PullRequest
0 голосов
/ 13 января 2019

Я прочитал в своей книге это предложение:

Логические и сдвиговые инструкции работают с битами индивидуально. В отличие от арифметика, которая оперирует целым словом

Используется для изоляции полей. Либо с помощью маскировки, либо смещаясь взад и вперед.

Я совсем не могу понять эти два предложения.

И инструкции сдвига, и арифметика меняли бы все биты (в некоторых ситуациях), а в арифметике биты добавляются один за другим для вычисления ответа.

Так в чем же смысл этой части "Инструкции работают с битами индивидуально, в отличие от арифметики, которая работает со всем словом" ?

Мой второй вопрос:

Я не знаю, есть ли идеи об этой части, вы можете объяснить мне:

Используется для изоляции полей. Либо с помощью маскировки, либо смещаясь взад и вперед.

Мой третий вопрос: что такое логическая инструкция? Он имел в виду И, ИЛИ, например? Можете ли вы объяснить больше?

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Логические операции и операции Shift обычно называют побитовыми операциями, а работают с битами индивидуально , что означает, что каждый выходной бит зависит только от одного или нескольких битов из одной фиксированной позиции бита в ввод (ы), и вы можете рассчитать этот бит немедленно, не завися от каких-либо других бит или предыдущих результатов расчета

Например, в AND, OR, XOR, NOT ... output[n] (т.е. бит n на выходе) вычисляется из input1[n] и input2[n]. Аналогично, сдвиг влево на N дает output[i] только из input[i - N]. Я беру примеры изображений с здесь , чтобы их было легче понять

  • И

    AND operation

  • Сдвиг влево:

    SHIFT operation

OTOH каждый бит в результате сложения зависит от переноса в , и вы должны дождаться завершения предыдущих операций сложения следующим образом: S n = A n + B n + C n

4-bit adder

Можно сделать более быстрые добавления, предварительно вычислив перенос с некоторой логикой, как в сумматоре carry-lookahead , но он все еще медленнее и требует гораздо большей площади, чем битовые операции, которые не имеют иждивенцы. Аналогично, другие арифметические операции также невозможно выполнить, получая каждый выходной бит отдельно.

Это для твоего первого и третьего вопросов. Относительно второго

Используется для выделения полей. Маскировка или смещение назад и вперед.

означает, что они используются для получения битовых полей путем маскирования с помощью AND (т. Е. Пропускают только биты биты в этом поле, путем фильтрации битов в позициях, где маска равна нулю), или путем сдвига обнулить биты и вернуться в исходное положение

Дальнейшее чтение:

0 голосов
/ 13 января 2019

Логические инструкции есть и, или, xor, но я не понимаю ни первое предложение.

Что касается второго, предположим, что вас интересует часть слова, скажем, биты 6..4, и вы хотите извлечь эту информацию. Есть два способа сделать это.

1 / с использованием маскировки и сдвига. Вы устанавливаете маску с теми, которые интересуют вас и нули в других местах, и применяете AND с этой маской.

unsigned original ;        // initial data is yyy...yyyxxxyyyy 
                           // where the interesting part is coded by xxx
unsigned field ;           // we want to have field=00..0xxx
unsigned mask = 0x70 ;     // 0...01110000 ones on the interesting part
field = original & mask  ; // field=0...00xxx0000
field >>= 4 ;              // field=00...00xxx

2 / с использованием только смен

unsigned original, field ; // initial data and interesting field
field = original << 25  ;  // put interesting bits in the msb of field 
                           // field=xxxyyyy00..00
field >>= 29 ;             // get rid of the 4 LSB -> field=00...00xxx

Аналогичные методы можно использовать, если вы хотите изменить эти биты вместо их извлечения.

...