Линейный сдвиг.

Сдвиги — это особые операции процессора, которые позволяют реализовать различные преобразования данных, работать с отдельными битами, а также быстро выполнять умножение и деление чисел на степень 2.

Логический сдвиг вправо

Логический сдвиг всегда выполняется без учёта знакового бита. Для логического сдвига вправо предназначена команда shr. У этой команды два операнда. Первый операнд представляет собой сдвигаемое значение и на его место записывается результат операции. Второй операнд указывает, на сколько бит нужно осуществить сдвиг. Этим операндом может быть либо непосредственное значение, либо регистр CL. Примеры:

    shr ax,1         ;Логический сдвиг AX на 1 бит вправо
    shr byte[bx],cl  ;Лог. сдвиг байта по адресу BX на СL бит вправо
    shr cl,4         ;CL = CL / 16 (для числа без знака)

Арифметический сдвиг вправо

Арифметический сдвиг отличается от логического тем, что он не изменяет значение старшего бита, и предназначен для чисел со знаком. Арифметический сдвиг вправо выполняется командой sar. У этой команды тоже 2 операнда, аналогично команде shr. Примеры:

    sar bx,1         ;Арифметический сдвиг BX на 1 бит вправо
    sar di,cl        ;Арифметический сдвиг DI на CL бит вправо
    sar [x],3        ;x = x / 8 (x - 8-битное значение со знаком)

Логический и арифметический сдвиг влево

Логический сдвиг влево выполняется командой shl, а арифметический — командой sal. У команды 2 операнда, аналогично командам shr и sar. Примеры использования команд:

    shl dx,1         ;Сдвиг DX на 1 бит влево
    sal dx,1         ;То же самое
    shl ax,cl        ;Сдвиг AX на CL бит влево
    sal [x],2        ;x = x * 4

Сдвиги двойной точности

Существуют ещё две команды, осуществляющие более сложные сдвиги. shrd — сдвиг двойной точности вправо, shld — сдвиг двойной точности влево. У этих команд 3 операнда. Первый операнд — сдвигаемое значение и место для записи результата, должен иметь размер 16 бит. Второй операнд — источник вдвигаемых битов, тоже должен иметь размер 16 бит и находится в одном из регистров. Значение второго операнда не меняется. Третий операнд — счётчик сдвигов, может быть непосредственным значением или находиться в регистре CL. Пример использования команды shld:

    shld ax,bx,3     ;Сдвинуть ax на 3 бита влево,
                     ;3 старших бита BX становятся младшими битами AX

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Команды работы с битами.

Команды работы с битами.

Работать с отдельными битами операндов можно, используя логические операции и сдвиги. Также в системе команд x86 существуют специальные команды для работы с битами: это команды

 
Основы создания макросов в Assembler.

Основы создания макросов в Assembler.

Макросы — это шаблоны для генерации кода. Один раз создав макрос, можно использовать его во многих местах в коде программы. Макросы делают процесс программирования на

 
Синтаксис объявления меток.

Синтаксис объявления меток.

Метка в ассемблере – это символьное имя, обозначающее ячейку памяти, которая содержит некоторую команду. Метка может содержать следующие символы: Буквы (от A до Z и

 
Локальные переменные.

Локальные переменные.

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

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: