Операторы смены NASM - PullRequest
       19

Операторы смены NASM

4 голосов
/ 01 апреля 2012

Как бы вы сделали сдвиг в NASM в регистре? Я прочитал руководство, и кажется, что упоминаются только эти операторы >> , << </strong>. Когда я пытаюсь их использовать, NASM жалуется на оператор сдвига, работающий со скалярными значениями. Можете ли вы объяснить, что такое скалярное значение, и привести пример использования >> и << </strong>. Кроме того, я думал, что есть операторы shr или shl . Если они существуют, можете ли вы привести пример их использования? Спасибо за ваше время.

Ответы [ 2 ]

6 голосов
/ 01 апреля 2012

<< и >> предназначены для использования только с целочисленными константами. Это то, что он подразумевает под «скалярным значением». Вы можете сдвинуть значение в регистре, используя инструкции shl или shr. Они используются для сдвига значения в регистре влево или вправо, соответственно, на заданное количество бит.

Первая строка в этом примере сдвигает значение в ax влево на 4 бита, что равносильно умножению его на 16. Вторая строка сдвигает значение в bx вправо на 2 бита, что совпадает с целочисленное деление на 4.

shl ax, 4
shr bx, 2

Вы также можете использовать cl, чтобы указать количество бит для сдвига вместо константы. Для получения дополнительной информации об этих и связанных с ними инструкциях см. эту страницу .

5 голосов
/ 01 апреля 2012

Копирование на ответ ughoavgfhw ... чтобы использовать << и >>, используйте их непосредственно для констант:

MOV EAX, 1 << 2    ; Puts 4 into EAX
MOV EAX, 2 << 2    ; Puts 8 into EAX
MOV EAX, 8 >> 1    ; Puts 4 into EAX
...