Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Команды обработки данных в режиме ARMСодержание книги Поиск на нашем сайте
Команды сдвига
Когда второй операнд определен как сдвиговый регистр, то операцией регистрового циклического сдвига управляет поле Shift в самой команде. Это поле указывает тип сдвига, который будет выполнен: логический сдвиг влево или вправо, арифметический сдвиг право, или циклический сдвиг вправо. Число бит, на которое будет произведен сдвиг, находится или в старшей части операнда 2 (сдвиг регистра кроме R15 при I = 0) или его в старших 4-х битах (сдвиг константы при I = 1). Подробное описание для различных типов сдвигов приведено на рисунке.
Команды сдвига в режиме ARM
Команды с заранее известным числом сдвигов
Заданное количество сдвигов содержится в 5-битном поле, содержимое которого может иметь значение от 0 до 31. Логический сдвиг влево (LSL) выполняет перемещение влево каждого бита содержимого регистра Rm указанное число раз. Младшие значащие биты заполняются нулями, а старшие разряды - "выталкиваются" (перенос), кроме случая, если команда - логическая (см. выше), то при этом самый старший бит копируется во флаг переноса C регистра CPSR. Для примера действия команды LSL #5 приведены на рисунке.
Логический сдвиг влево
Примечание: особого рассмотрения требует команда LSL #0, в которой выталкиваемый бит (перенос) равен прежнему содержимому флага C регистра CPSR. Содержимое Rm используется непосредственно в качестве 2-го операнда.
Команда логического сдвига вправо (LSR) похожа на команду LSL, с одной лишь разницей: содержимое регистра Rm сдвигается в сторону младших бит. Для примера на рисунке изображен принцип работы команды LSR #5.
Логический сдвиг вправо
Так как команда LSR #0 в принципе не выполняет никаких действий, и по причине ограниченного размера поля сдвига (shift) не может существовать команды LSR #32 (результат работы которой: операнд 2 = нулю), то решено было заменить LSR #32 командой LSR #0 (это относится и к команде LSL #32). По этой причине оптимизатор ассемблера заменит команды LSR #0, ASR #0, ROR #0 командой LSL #0, хотя фактически будет выполняться команда LSL #32. Команда арифметического сдвига вправо (ASR) выполняет те же действия, что и команда логического сдвига вправо (LSR), с одной разницей в том, что в старшие биты результата копируется содержимое бита 31 регистра Rm, вместо нулей. Так как 31-бит является знаком числа, то это позволяет сохранить этот знак (подразумеваются знаковые числа с дополнением до 2-х). Для примера на рисунке изображен принцип работы команды ASR #5.
Арифметический сдвиг вправо Команда ASR #0 (аналогично LSR #0) используется взамен команды ASR #32. В этом случае бит 31 регистра Rm также используется в роле переноса, а результат целиком состоит либо из одних единиц, либо из одних нулей, в зависимости от значения бита 31 регистра Rm.
Команда циклического сдвига вправо (ROR) производит побитовые сдвиги вправо с переносом младшего вытесненного бита 0 (перенос) в старший бит 31. Для примера на рисунке изображен принцип работы команды ROR #5.
Циклический сдвиг вправо
Команда расширенного сдвига вправо (RRX) выполняет те же действия, что и команда ROR #0. Во время выполнения этой команды производится сдвиг на один бит вправо 33-битного регистра, получаемого добавлением (не сложением) к старшему значащему биту регистра Rm флага C регистра CPSR.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-12-07; просмотров: 150; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.91.111 (0.005 с.) |