Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Раздел 2. Архитектура и системы команд современных пэвм и ARM7.Стр 1 из 6Следующая ⇒
Раздел 2. Архитектура и системы команд современных ПЭВМ и ARM7.
Общий формат команд в режиме ARM.
Формат построения системы команд в режиме ARM Примечание: некоторые коды команд не определены, но в то же время их выполнение не вызывает исключения "неизвестная команда" (Undefined instruction exception), кроме команды умножения с установленным в "1" битом 6. Эти команды не должны применяться, хотя, некоторые из них могут быть реализованы в новых версиях ядра ARM.
4. Машинные команды ARM.
Система команд в режиме ARM
Поле условия.
В режиме ARM все команды выполняются в зависимости состоянию регистра CPSR и поля условия самой команды. Это поле (биты 31:28) содержит условие, при которых команда будет выполнена. Если флаги C, N, Z и V установлены (сброшены) согласно коду поля условия, то команда будет выполнена, в противном случае эта команда будет проигнорирована. Всего существуют 16 различных условий, каждое из которых определяется двухсимвольным суффиксом, добавляемым к мнемонике команды. Например, команда переход (Branch - "B" в ассемблере) становится командой перейти, если равно - BEQ (Branch if Equal), которая означает, что переход будет выполнен, если установлен флаг Z. Практически можно использовать только 15 различных условий, 16-е условие (1111) зарезервировано и не применяется. При отсутствии в мнемонике команды условия выполнения или установлен суффикс AL, то эта команда будет выполнена безусловно, независимо от состояния флагов условия (регистр CPSR).
Перечень условий выполнения.
Обработка данных.
Эта команда будет выполнена, если условие истинно. Все различные условия перечислены ниже. Машинный код команды приведен на рисунке.
Команда обработки данных
Команда формирует результат, выполняя указанную арифметическую или логическую операцию с одним или двумя операндами. Первый операнд - всегда регистр (Rn). Второй операнд может быть регистром со сдвигом (Rm), или 8-битной константой с циклическим сдвигом (Imm) (в зависимости от значения бита "I" в команде). Флаги CPSR могут оставаться без изменений (S = 0) или выставлены в зависимости от результата выполнения этой команды (S = 1). Некоторые операции в команде (ТЕСТ, TEQ, CMP, CMN) не записывают результат в регистр Rd. Они используются только для того, чтобы в зависимости от результата установить/сбросить флаги CPSR (только при S = 1). Команды и результаты их работы перечислены в таблице ниже.
Флаги регистра CPSR
Все операции обработки данных разделяются на: логические и арифметические. Логические операции (AND, EOR, ТЕSТ, TEQ, ORR, MOV, BIC, MVN) выполняют логические побитовые операции на всех битах операнда или операндов. Если бит команды "S" будет установлен (и Rd - это не R15, см. ниже), то состояние флага "V" в регистре CPSR не изменится; флаг переноса "C" будет установлен исходя из результата многорегистрового циклического сдвига (или останется без изменений, если операция изменения сдвига - LSL #0). Флаг "Z" будет установлен, только если результат - все нули, и флаг "N" будет установлен в зависимости от значения бита 31 результата операции. Арифметические операции (SUB, RSB, ADD, ADC, SBC, RSC, CMP, CMN) обрабатывают каждый операнд как 32-битное целое число (беззнаковое или знаковое с дополнением до 2-х, что, впрочем, эквивалентно). Если бит "S" будет установлен (и Rd - это не R15) и произойдет переполнение результата, то флаг "V" в регистре CPSR будет установлен. Однако, этот флаг можно игнорировать, если операнды - беззнаковые, но обязательно нужно учитывать для знаковых операндов. Флаг "C" будет установлен при переносе бита 31 из ALU (переполнение). Флаг "Z" будет установлен, только если результат нулевой. Флаг "N" будет установлен в зависимости от значения бита 31 результата операции (указывает на отрицательный результат, если предполагается, что операнды есть знаковые с дополнением до 2-х).
Команды сдвига
Когда второй операнд определен как сдвиговый регистр, то операцией регистрового циклического сдвига управляет поле Shift в самой команде. Это поле указывает тип сдвига, который будет выполнен: логический сдвиг влево или вправо, арифметический сдвиг право, или циклический сдвиг вправо. Число бит, на которое будет произведен сдвиг, находится или в старшей части операнда 2 (сдвиг регистра кроме R15 при I = 0) или его в старших 4-х битах (сдвиг константы при I = 1). Подробное описание для различных типов сдвигов приведено на рисунке.
Команды сдвига в режиме ARM
Логический сдвиг влево
Примечание: особого рассмотрения требует команда 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.
Команды сдвига констант
Поле сдвига константы - 4-битное целое беззнаковое число, которое указывает число операций сдвига 8-битной константы - байта. Это значение расширятся до 32-битного с дополнением слева нулями, и затем циклически сдвигается вправо на 2 бита. Эти манипуляции позволяют генерировать большую часть часто применяемых констант, например, все значения степени двойки.
Запись в регистр R15
Если S = 1 и Rd ≠ R15, т.е. в качестве Rd используются любой из регистров, кроме R15, то содержимое флагов регистра CPSR обновиться из флагов АЛУ, как это описано ранее. Если S = 0 и Rd = R15, то результат выполнения команды помещается в регистр R15, не оказывая никакого влияния на флаги регистра CPSR. Если S = 1 и Rd = 15, то результат выполнения команды помещается в регистр R15 и соответствующий регистр SRPS текущего режима копируется в регистр CPSR. При изменении состояния ядра это позволяет одновременно восстанавливать и регистр PC и регистр CPSR. Недопустимо использование такого варианта команды в привилегированном режиме (User Mode).
Синтаксис в ассемблере
1. MOV,MVN (команды с одним операндом) <opcode>{cond}{S} Rd,<Op2>2. CMP,CMN,TEQ,TST (команды без записи результата - без Rd) <opcode>{cond} Rn,<Op2> 3. AND,EOR,SUB,RSB,ADD,ADC,SBC,RSC,ORR,BIC <opcode>>{cond}{S} Rd,Rn,<Op2>где: - <Op2> - это Rm{,<shift>} или {,<#выражение>} - {cond} - двухсимвольная мнемоника условия. - {S} - разрешить условное выполнение (для команд CMP, CMN, TEQ, TST). - Rd, Rn и Rm - выражения, результат вычисления которых - номер регистра общего назначения. - <#выражение> - если это поле используется, то ассемблер попытается сгенерировать команду сдвига 8-битной константы с соответствии с указанным выражением. Если это невозможно, то возникнет ошибка. - <shift> - <тип_сдвига> <регистр> или <тип_сдвига> #выражение, или RRX (расширенный циклический сдвиг вправо). - <shiftname> - ASL, LSL, LSR, ASR, ROR. (так как ASL - синоним LSL, то для обеих команд будет сгенерирован одинаковый машинный код).
Пример
ADDEQ R2,R4,R5 ; Если Z = 1, то R2:=R4+R5 TEQS R4,#3 ; Проверить R4 на равенство 3 ; (ассемблер автоматически установит в единицу бит S) SUB R4,R5,R7,LSR R2; Логический сдвиг вправо R7 на такое число бит, ; которое указано в старшем байте регистра R2, ; затем вычесть результат из R5 и разместить его в R4. MOV PC,R14 ; Возврат из подпрограммы. MOVS PC,R14 ; Возврат из исключения и восстановление CPSR из SPSR_mode.
Неопределенная команда (Undefined).
Если условие истинно, то будет выполнен переход на обработчик прерывания при попытке выполнения неопределенный команды (undefined instruction). Машинный код команды приведен на рисунке.
Неопределенная команда Число машинных тактов
Эта команда выполняется за 2S + 1I + 1N, где S, N и I зависят от типа машинных тактов. Синтаксис в ассемблере
Эта команда не имеет никакой мнемоники в ассемблере. И зарезервирована на будущее, поэтому не должна применяться.
Примеры применения команд в режиме ARM. (Выдать в файле ARM.doc)
В примерах, приведенных ниже, указаны основные способы для достижения высокой эффективности кода с применением основных команд ядра ARM7TDMI. Все эти примеры в основном оптимизированы по размеру кода, а не по скорости выполнения (хотя некоторые из примеров все же позволяют достичь достаточно большой скорости их выполнения).
Абсолютное значение
TEQ Rn,#0 ; Проверить знак RSBMI Rn,Rn,#0; и, если необходимо, дополнить до 2-х.
Умножение на 4, 5 или 6 MOV Rc,Ra,LSL#2 ; Умножить на 4,CMP Rb,#5 ; проверить значение,ADDCS Rc,Rc,Ra ; закончить умножение на 5, ADDHI Rc,Rc,Ra ; закончить умножение на 6.
Раздел 2. Архитектура и системы команд современных ПЭВМ и ARM7.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-12-07; просмотров: 49; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.139.162 (0.073 с.) |