Циклический сдвиг. — it-black.ru
Циклический сдвиг. — it-black.ruЦиклический сдвиг отличается от линейного тем, что выдвигаемые с одного конца биты вдвигаются с другой стороны, то есть движутся по кольцу. В процессора x86 существует 2 вида циклического сдвига: простой и через флаг переноса (CF).
Простой циклический сдвиг
Циклический сдвиг вправо выполняется командой ROR, а влево — командой ROL. При этом старший (для ROL) или младший (для ROR) бит операнда вдвигается в операнд справа (для ROL) или слева (для ROR) и становится значением младшего (для ROL) или старшего (для ROR) бита операнда; одновременно выдвигаемый бит становится значением флага переноса CF. Указанные действия повторяются количество раз, равное значению второго операнда. Примеры использования команд:
rol bl,1 ;Циклический сдвиг BL на 1 бит влево ror word[si],5 ;Циклический сдвиг слова по адресу в SI на 5 бит вправо rol ax,cl ;Циклический свдиг AX на CL бит влево
Циклический сдвиг через флаг переноса
Циклический сдвиг через флаг переноса отличается от простого циклического сдвига в том, что флаг CF участвует в сдвиге наравне с битами операнда. При сдвиге на 1 бит выдвигаемый бит помещается в CF, а значение CF вдвигается в операнд с другой стороны. При сдвиге на несколько бит эта операция повторяется многократно. Циклический сдвиг через флаг переноса выполняется командами RCR (вправо) и RCL (влево). Примеры использования команд:
rcr dh,3 ;Цикл. сдвиг DH на 3 бита вправо через флаг CF rcl byte[bx],cl ;Цикл. сдвиг байта по адресу в BX на CL бит влево через флаг CF rcl dx,1 ;Цикл. сдвиг DX на 1 бит влево через флаг CF
Поделиться в facebook
Поделиться в twitter
Поделиться в vk
VK
Поделиться в google
Google+
Группа в VK
Помощь проекту
Обнаружили опечатку?
Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!
Свежие статьи
Облако меток
Похожие статьи
Команды работы с битами.
Работать с отдельными битами операндов можно, используя логические операции и сдвиги. Также в системе команд x86 существуют специальные команды для работы с битами: это команды
Основы создания макросов в Assembler.
Макросы — это шаблоны для генерации кода. Один раз создав макрос, можно использовать его во многих местах в коде программы. Макросы делают процесс программирования на
Синтаксис объявления меток.
Метка в ассемблере – это символьное имя, обозначающее ячейку памяти, которая содержит некоторую команду. Метка может содержать следующие символы: Буквы (от A до Z и
Локальные переменные.
Локальные переменные в Assembler используются для хранения промежуточных результатов во время выполнения процедуры. В отличие от глобальных, эти переменные являются временными и создаются при запуске
Instagram Vk Youtube Telegram Odnoklassniki
Полезно знать
Рубрики
Авторы
© it-black.
ru | 2016 — 2022Сдвиг и циклический сдвиг разрядов
Ассемблер имеет команды для сдвига и циклического сдвига разрядов в байте или слове. Разряды могут сдвигаться вправо (в сторону младших разрядов) или влево (в сторону старших разрядов). Значение выдвинутого за пределы операнда разряда для всех команд сдвига попадает во флаг переноса.
Команды сдвига распадаются на две группы. Логические команды сдвигают операнд, не считаясь с его знаком; они используются для действий над числами без знака или над нечисловыми значениями. Арифметические команды сохраняют старший знаковый бит операнда, они используются для действий над числами со знаком.
На следующем рисунке показано действие 8 команд сдвига и циклического сдвига для 8-разрядных операндов.
SHL (логический беззнаковый сдвиг влево)
7 0
CF 0
SHR (логический беззнаковый сдвиг вправо)
7 0
0 CF
SAL (арифметический сдвиг влево)
7 0
CF 0
SAR (арифметический сдвиг вправо)
7 0
CF
ROL (циклический сдвиг влево)
7 0
CF
ROR (циклический сдвиг вправо)
7 0
CF
RCL (циклический сдвиг влево через флаг CF или с переносом)
7 0
CF
RCR (циклический сдвиг вправо через флаг CF или с переносом)
7 0
CF
Команды SHL и SAL отличаются только воздействием на флаги.
В операнде-приемнике команд сдвига находится значение, подлежащее сдвигу. После выполнения команды в нем же будет находиться результат. В операнде-источнике должно находиться число, на которое нужно сдвинуть разряды. Данное число может быть задано как непосредственное значение «1» или как содержимое регистра CL.
Команда SAR сохраняет знак операнда, репродуцируя его при выполнении сдвига. Команда SAL не сохраняет знак, но заносит «1» во флаг переполнения OF в случае изменения знака операнда.
Пусть AL содержит 0B4h, а CF=1
; AL=1011 0100b
SAL AL,1 ; AL=0110 1000 CF=1
SAR AL,1 ; AL=1101 1010 CF=0
SHL AL,1 ; AL=0110 1000 CF=1
SHR AL,1 ; AL=0101 1010 CF=0
ROL AL,1 ; AL=0110 1001 CF=1
ROR AL,1 ; AL=0101 1010 CF=0
RCL AL,1 ; AL=0110 1001 CF=1
RCR AL,1 ; AL=1101 1010 CF=0
Сдвиг вправо на 1 эквивалентен делению на 2, сдвиг влево на 1 — умножению на 2.
Данная особенность может быть использована для умножения и деления на часто встречающиеся константы, например, на 2n. При двойном сдвиге влево происходит умножение на 4, при тройном — на 8 и так далее.SHR используется для деления беззнаковых чисел, SAR — для знаковых. Умножение с помощью сдвига является одинаковым для знаковых и беззнаковых чисел, поэтому можно использовать как SAL, так и SHL.
MOV CL,2
SHL AX,CL ;умножить число без знака на 4
SAL AX,CL ;умножить число со знаком на 4
SHR AX,CL ;разделить число без знака на 4
SAR AX,CL ;разделить число со знаком на 4
Каждая из этих команд с учетом загрузки CL выполняется в 6-8 раз быстрее соответствующей команды умножения или деления.
Когда необходимо сдвинуть значение, которое слишком велико для регистра, то можно сдвигать каждую часть отдельно, передавая сдвинутые разряды через флаг переноса. Для передачи переноса из первого регистра во второй должны использоваться команды RCR или RCL.
Например:
SHL AX,1 ;32-разрядное число в регистрах AX и DX
RCL DX,1 ;умножаем на 2
ПОДГОТОВКА К РАБОТЕ
1. Изучить краткие теоретические сведения и рекомендованную литературу.
2. Написать текст программы, соответствующий вашему варианту задания.
РАБОЧЕЕ ЗАДАНИЕ
Набить подготовленную программу, странслировать ее, скомпоновать и отладить.
КОНТРОЛЬНЫЕ ВОПРОСЫ
- Какой тип перехода допускает команда LOOP.
Как работает команда LOOP.
Где задается количество повторений цикла, организованного при помощи команды LOOP.
Каким способом, кроме команды LOOP, можно организовать циклический процесс.
В командах сдвига куда попадает последний выдвинутый за пределы разрядной сетки разряд.
ЛАБОРАТОРНАЯ РАБОТА N 7
П Р Е Р Ы В А Н И Я
Цель работы: ознакомиться с основными принципами механизма прерываний.
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
ПРЕРЫВАНИЯ — это события, заставляющие центральный процессор прервать выполнение текущей работы и перейти на выполнение программы, называемой ОБРАБОТЧИКОМ ПРЕРЫВАНИЯ. Переход этот осуществляется за малое время с помощью специально разработанных аппаратных средств.
Обработчик прерывания определяет причину прерывания, выполняет запланированные действия, после чего возвращает управление прерванной программе.
Обычно прерывания вызываются событиями внешними по отношению к ЦП и требующими немедленных действий. Например:
— завершение операции ввода/вывода;
— обнаружение аппаратного сбоя;
— «катастрофа» (отказ питания).
Большинство современных процессоров поддерживают механизм ТИПОВ и УРОВНЕЙ ПРЕРЫВАНИЯ. Каждому типу обычно соответствует ячейка в памяти, называемая ВЕКТРОМ ПРЕРЫВАНИЯ, которая определяет местоположение программы обработчика прерывания данного типа. Концепция типов прерывания позволяет назначать прерываниям приоритеты. Прерывания группируются по уровням, имеющим одинаковый приоритет.
ЦП компьютеров, поддерживающих систему прерываний, должны иметь средства блокирования прерываний на время выполнения критических участков программы (избирательного или глобального). При обработке прерывания ЦП обычно блокирует все прерывания этого или более низких уровней и разрешает — более высоких.
Процессор 8086 поддерживают 256 типов прерываний, вызываемых событиями трех групп:
— внутренние аппаратные прерывания;
— внешние аппаратные прерывания;
— программные прерывания.
Каждому типу прерывания соответствует свой номер от 0 до 255.
Внутренние аппаратные прерывания или отказы генерируются определенными событиями, возникающими в процессе выполнения программы (деление на 0, неправильный код операции). Закрепление номеров прерываний за определенными причинами жестко «зашито» в процессоре.
Внешние аппаратные прерывания инициализируются контроллерами периферийного оборудования или сопроцессорами.
Программные прерывания. Любая программа может инициировать синхронное программное прерывание путем выполнения команды Int с указанием номера прерывания, например,
Int 10h
Распределение номеров программных прерываний условно и не закреплено аппаратно.
Нижние 1024 байта системной памяти носят название ТАБЛИЦЫ ВЕКТОРОВ ПРЕРЫВАНИЙ. Вектор занимает 4 байта: сегмент и смещение соответствующего обработчика прерывания.
ЦП, получив сигнал или команду прерывания, помещает в стек содержимое флагового регистра, очищает флаги TF и IF, заносит в стек содержимое регистров CS, IP и блокирует систему прерываний. Затем с помощью 8-битового числа — номера прерывания, установленного на внутренней шине, извлекает из таблицы векторов прерываний адрес (сегмент и смещение) соответствующего обработчика прерывания, заносит их соответственно в CS и IP и таким образом перердает управление обработчику прерывания.
Обычно обработчик разблокирует систему прерываний, сохраняет регистры, которые будут им использоваться, и обрабатывает прерывание. В конце обработчика должна стоять команда IRET — возврат из прерывания. Эта команда восстанавливает первоначальное значение CS и IP и флагового регистра.
В качестве примера рассмотрим, как использовать командные прерывания для вывода информации на экран дисплея.
Все необходимые экранные операции можно выполнить при помощи команды Int 10h, которая передает управление непосредственно в BIOS. ПЕРЕД вызовом прерывания Int 10h необходимо задать в регистре AH номер подфункции вывода. В других регистрах следует задать требуемые этой функции параметры. Номера подфункций, их параметры, а также регистры, в которые нужно их заносить, приведены в справочной информации по BIOS.
Для выполнения некоторых более сложных операций существует прерывание более высокого уровня Int 21h, которое вызывает функции DOS.
Экран можно представить в виде двухмерного пространства с адресуемыми позициями, в любую из которых может быть установлен курсор или выведен символ. Видеомонитор, например, может иметь 25 строк (нумеруемых от 0 до 24) и 80 столбцов (нумеруемых от 0 до 79). Нумерация строк производится, начиная с левого верхнего угла экрана вниз, нумерация столбцов — начиная также с левого верхнего угла экран вправо.
Сдвиг и поворот битов — онлайн-инструменты
Сдвиг битов включает перемещение битов на один или несколько шагов влево или вправо. Когда биты сдвигаются на один шаг, бит, который находится дальше всего в направлении сдвига, отбрасывается, а новый бит добавляется на противоположном конце. Значение нового бита зависит от того, какой тип операции сдвига используется.
Логический сдвиг
Логический сдвиг влево
Логический сдвиг вправо
9 n , где n — количество шагов, если результат соответствует количеству используемых битов. Если умножение или деление можно заменить операцией сдвига, то компьютер будет вычислять немного быстрее.Арифметический сдвиг
Арифметический сдвиг влево
Арифметический сдвиг вправо
Арифметический сдвиг подходит для целых чисел со знаком (т.
Арифметический сдвиг влево идентичен логическому сдвигу влево и может использоваться таким же образом для умножения как положительных, так и отрицательных значений на два.
При арифметическом сдвиге вправо новые биты получают то же значение, что и знаковый бит (самый левый бит). Это гарантирует, что знак (+/−) остается одинаковым до и после. Один шаг с арифметическим сдвигом вправо составляет , почти , то же самое, что целочисленное деление на два. Разница в том, что результат всегда округляется в меньшую сторону (в сторону минус бесконечности), а не в сторону нуля.
Круговой сдвиг
Круговой сдвиг влево
Круговой сдвиг вправо
Круговые сдвиги, также называемые поворотами другой конец. Циклические сдвиги часто используются для криптографических приложений и подходят, когда желательно не потерять значения битов.
Поворот через перенос
Поворот влево через перенос
Вращение вправо через перенос
Значение последнего сдвинутого бита обычно хранится во флаге переноса. Специальный тип циклического сдвига, называемый поворотом через перенос , использует старое значение этого флага для бита, который смещается.