Процессоры архитектуры ARM способны работать в двух различных режимах (находиться в двух разных состояниях – ARM State и THUMB State), которым соответствуют два различных набора команд. Первый носит название «система команд ARM» и является основным в том смысле, что отображает весь набор операций, который способен выполнять процессор. Команды набора ARM имеют длину 4 байта (32 бита). Второй набор команд, называемый THUMB, реализует некоторое подмножество операций и способов адресации системы команд ARM. Команды набора THUMB имеют длину 2 байта (16 битов). Фактически набор команд THUMB есть не что иное, как другой способ кодирования тех же операций, что и операции набора , реализованный в сокращенной разрядной сетке.
Более короткая длина команды набора THUMB
ограничивает:
‑ перечень операций, которые удается закодировать,
‑ набор способов адресации, которые можно использовать в командах, а также
‑ диапазон непосредственных констант и адресных смещений (displacement),
которые можно использовать в командах с непосредственной адресацией, а также в
адресации «со смещением».
Каждой команде набора THUMB соответствует команда набора ARM. Фактически, в режиме THUMB процессор выполняет внутреннее «перекодирование», т.е. формирует и выполняет эквивалентную команду набора ARM. Обратное несправедливо, т.е. для выполнения действия, соответствующего одной команде набора ARM нередко (в среднем в ??? % случаев) придется использовать более, чем одну команду набора THUMB.
Благодаря более короткой длине команд набора THUMB, объем кода (в байтах) для того же алгоритма получается на 35% меньше ([2], стр. 1-2), чем при использовании команд ARM, ценой увеличения количества команд соответственно на приблизительно 50% (в полтора раза). В системе с 32-разрядной шиной памяти это означает увеличение времени выполнения этого кода также в полтора раза. Однако в компактных системах с 16-разрядной шиной памяти (что характерно для встраиваемых систем) положение иное. При 16-разрядной шине в режиме ARM для выборки каждой команды требуется два цикла шины. Поскольку большая часть команд RISC-архитектуры не требует обращений к памяти за операндами (расположенными в регистрах - ??? ссылку на описание RISC-архитектуры), чтение программного кода из памяти занимает существенную долю времени, и в системах с 16-разрядной шиной использование режима THUMB вместо может дать до 160% повышение производительности одновременно с вышеупомянутым уменьшением объема кода ([2], стр. 1-2).
Однако не следует думать, что набор команд THUMB всегда эффективнее, нежели набор ARM. В ряде ситуаций, оказывается наоборот (??? подробнее расписать, когда или ссылку).
Переход процессора из одного состояния в другое выполняется использованием специальной разновидности команды перехода (см. ???).
· На структуру системы команд процессоров ARM оказала значительное влияние идеология RISC. Это выражается в нескольких аспектах.
Отсутствуют команды, реализующие «сложные» (требующие для выполнения много тактов) команды, например, деление. Подобные операции реализуются в процессорах ARM несколькими командами (подпрограммой либо макроподстановкой).
Ограниченная длина команды накладывает ограничения на длину (разрядность) таких компонент команды, как непосредственный операнд или смещение в адресации косвенно-регистровой со смещением.
· В соответствии с принципами RISC-идеологии, двухместные операции, выполняемые командами обработки (сложение, вычитание, побитовые операции и т.п.), да и одноместные тоже (смена знака) работают только с операндами, находящимися в регистрах общего назначения РОН. Для обращения к памяти реализованы только команды, выполняющие операцию копирования содержимого участка памяти в регистр, либо обратно, содержимого регистра в память. Однако, одновременно с копированием в этих командах могут выполняться и некоторые действия, такие. как расширение знака (т.е. преобразование короткого операнда к длинной разрядной сетке).
· В качестве операндов в командах обработки может быть использовано только содержимое 32-разрядных регистров. Поэтому при обработке операндов короче полного слова (полусловных –16-битовых и байтовых – 8-битовых) содержимое регистра должно быть «расширено», т.е. старшие разряды регистра нужно заполнить либо нулями (в случае беззнакового, unsigned операнда) либо знаковым битом короткого операнда (если этот операнд знаковый, signed). Операции расширения знака в системе команд ARM совмещены с операцией копирования, т.е. операции копирования «коротких» операндов существуют в двух модификациях: беззнаковое копирование в регистр, когда старшая часть регистра при копировании заполняется нулями, и знаковое копирование, когда старшая часть регистра заполняется знаковым битом. Обратите внимание, что операция сохранения не требует двух модификаций команд пересылки, так как при копировании в память полуслова или байта, передается ровно столько битов, сколько надо.
· Почти все команды набора ARM ‑ это команды с условным исполнением. Это означает, что для каждой такой команды программист может указать условие исполнения (комбинацию флагов в регистре состояний). Набор условий исполнения такой же, как для команд условных ветвлений. Для задания условия в команде предусмотрено 4-битовое поле, задающее одно из 14 условий.. Если заданное условие выполнено, выполняется операция, предусмотренная командой. Если условие не выполнено, на этапе исполнения ничего не делается (команда ведет себя как NOP). Одна из битовых комбинаций в поле условия (15-я) обозначает безусловное исполнение (always) и еще одна является зарезервированной (не используется). Таким образом, поскольку команды перехода и вызова подпрограммы также являются командами с условным исполнением, в наборе ARM отсутствуют отдельные команды условных ветвлений.
· Программист может (почти для каждой команды, потенциально способной измерять значения флагов в регистре состояний) указать, должна ли команда изменять значения флагов или они должны сохранить свои состояния неизменными.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.