Команды обработки данных в режиме ARM 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Команды обработки данных в режиме ARM



 

Мнемоника ассемблера Код Действие
AND 0000 операнд1 AND операнд2
EOR 0001 операнд1 EOR операнд2
SUB 0010 операнд1 - операнд2
RSB 0011 операнд2 - операнд1
ADD 0100 операнд1 + операнд2
ADC 0101 операнд1 + операнд2 + перенос
SBC 0110 операнд1 - операнд2 + перенос - 1
RSC 0111 операнд2 - операнд1 + перенос - 1
TST 1000 как AND, но результат не будет записан
TEQ 1001 as EOR, но результат не будет записан
CMP 1010 as SUB, но результат не будет записан
CMN 1011 as ADD, но результат не будет записан
ORR 1100 операнд1 OR операнд2
MOV 1101 операнд2 (операнд1 игнорируется)
BIC 1110 операнд1 AND NOT операнд2 (бит сброшен)
MVN 1111 NOT операнд2 (операнд1 игнорируется)

Команды сдвига

 

Когда второй операнд определен как сдвиговый регистр, то операцией регистрового циклического сдвига управляет поле 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; просмотров: 131; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.19.27.178 (0.007 с.)