Архитектура микропроцессоров ARM
Оглавление
Вступление 2
1. Общие сведения об архитектуре ARM 3
1.1. Краткая история 3
1.2. Главные особенности 7
2. Архитектура ARM 11
2.1. Особенности архитектуры ARM 11
2.2. Набор инструкций Thumb 12
2.3. Технология SIMD 13
2.4. Набор инструкций DSP 13
2.5. Технология Jazelle 14
2.6. Технология интеллектуального управления энергопотреблением 15
3. Семейства ядер и процессоров ARM 16
4. Регистры общего назначения (ARM) 18
4.1. Регистры общего назначения на прикладном уровне 18
4.1.1. Счётчик команд PC (R15) 19
4.1.2. Считывание счётчика команд 19
4.1.3. Запись в счётчик команд 20
4.1.4. Указатель стека SP (R13) 21
4.1.5. Регистр связи LR (R14) 22
4.2. Регистры общего назначения на системном уровне 23
4.2.1. Архитектуры ARMv7-A, ARMv7-R и более ранние 23
4.2.2. Архитектуры ARMv6-M и ARMv7-M 23
4.3. Стандартные соглашения о связях 24
5. Логическая структура памяти (ARM) 26
5.1. Адресное пространство 26
5.2. Порядок следования байтов в многобайтовых величинах 26
5.2.1. Порядок LE 27
5.2.2. Порядок BE-32 27
5.2.3. Порядок BE-8 28
5.3. Доступы по невыровненным адресам 29
5.3.1. Архитектуры, предшествующие ARMv6 29
5.3.2. Архитектура ARMv6 30
Вступление
Архитектура ARM (Advanced RISC Machine, Acorn RISC Machine, усовершенствованная RISC-машина) — семейство лицензируемых 32-битных и 64-битных микропроцессорных ядер разработки компании ARM Limited. Компания занимается исключительно разработкой ядер и инструментов для них (компиляторы, средства отладки и т. п.), зарабатывая на лицензировании архитектуры сторонним производителям.
В 2007 году около 98 % из более чем миллиарда мобильных телефонов, продаваемых ежегодно, были оснащены по крайней мере одним процессором ARM. По состоянию на 2009 на процессоры ARM приходится до 90 % всех встроенных 32-разрядных процессоров. Процессоры ARM широко используются в потребительской электронике — в том числе КПК, мобильных телефонах, цифровых носителях и плеерах, портативных игровых консолях, калькуляторах и компьютерных периферийных устройствах, таких как жесткие диски или маршрутизаторы.
Данные процессоры имеют низкое энергопотребление, поэтому находят широкое применение во встраиваемых системах и доминируют на рынке мобильных устройств, для которых важно низкое энергопотребление.
- Общие сведения об архитектуре ARM
- Краткая история
С момента появления архитектуры ARM и до 2011 года появилось семь «больших» версий архитектуры — до ARMv7 включительно. Кроме того, если не у всех, то у многих версий имеются разновидности.
Ранние процессоры архитектуры ARM использовали 26-разрядные адреса памяти. Первой версией с 32-разрядной адресацией и одновременно последней с 26-разрядной стала ARMv3. Все эти версии к 2010 году уже полностью исчезли, поэтому в дальнейшем они обсуждаться не будут.
Первой по времени появления из пока ещё используемых архитектур стала ARMv4. В ней впервые отказались от поддержки 26-разрядных адресов, но зато в дополнение к командам обработки слов (32 бита) и байтов ввели команды обработки полуслов (16 бит).
Вскоре появилась разновидность ARMv4T, в которой впервые был реализован набор команд Thumb. Команды этого набора функционально являлись подмножеством основного набора команд (с этого момента обозначаемого как набор команд ARM), причём в них отсутствовали инструкции системного назначения. По этой причине ни для этой, ни для основной массы последующих архитектур невозможно создать ОС или системно-независимую программу (т.е. программу, работающую на «голом железе»), использующую только систему команд Thumb. Начальные участки обработчиков прерываний, а также некоторые действия по управлению процессором можно выполнить только с помощью инструкций набора ARM. В то же время каждая команда Thumb кодируется полусловом (16 бит), в то время как команда ARM всегда занимает целое слово (32 бита). Благодаря этому функционально аналогичная программа, написанная с использованием системы команд Thumb, занимает существенно меньше памяти, чем программа на ARM.
Помимо ARMv4 и ARMv4T, четвёртая версия архитектуры ARM имела ещё две разновидности — ARMv4xM и ARMv4TxM, отличавшиеся от первых двух отсутствием команды длинного умножения (сомножители по 32 разряда, результат — 64 разряда). К началу 2010 года все эти разновидности, кроме ARMv4T, уже утратили актуальность и исчезли с рынка.
Пятая версия архитектуры в «чистом» виде — ARMv5, а также её разновидность без длинного умножения ARMv5xM тоже уже не употребляются. От предыдущей архитектуры они отличались несколько расширенной системой команд. В частности, именно в ARMv5 появились первые инструкции набора ARM, не имеющие возможности условного выполнения.
Thumb-разновидность ARMv5T отличается от ARMv4T наличием нескольких дополнительных команд, улучшенными возможностями взаимодействия ARM- и Thumb-кода и некоторыми другими усовершенствованиями; она ещё иногда встречается. Её разновидность с «обрезанными» возможностями умножения, ARMv5TxM, из употребления вышла.
Вскоре после появления процессоров семейства ARMv5T архитектура была вновь весьма существенно расширена: появилась целая группа инструкций, намного упростившая реализацию алгоритмов цифровой обработки сигналов (так называемые DSP-команды). Новое семейство получило обозначение ARMv5TE и весьма широко используется до сих пор. Некоторые ранние реализации этого семейства имели лишь часть новых инструкций; эта разновидность получила обозначение ARMv5TExP и уже почти не применяется.
Венцом развития пятой версии архитектуры стало включение специальных средств, предназначенных для упрощения реализации виртуальной машины Java (технология Jazelle). Такие процессоры получили обозначение ARMv5TEJ; к настоящему времени они являются одними из наиболее распространённых.
Предпоследняя версия архитектуры, ARMv6, изначально не имела разновидностей и включала все возможности ARMv5TEJ, но с рядом улучшений. Так, в ней были расширены обе системы команд, пересмотрена архитектура подсистемы памяти (ставшая намного более унифицированной: до ARMv6 очень многие важные решения отдавались «на откуп» производителям, из-за чего при переносе ОС с одного процессора на другой зачастую требовалось выполнить очень много доработок), обеспечен доступ к невыровненным данным и др.
Через некоторое время появилась разновидность ARMv6T2, в которой система команд Thumb была несколько расширена: добавились несколько инструкций, кодируемых не одним, а двумя полусловами, зато обеспечивающими дополнительные возможности, что улучшило производительность Thumb-кода. Особого распространения эта разновидность не получила.
Последняя версия, ARMv7, более известная под именем Cortex (по общему имени реализующих её процессорных ядер), сейчас стремительно набирает популярность. В ней фирма ARM впервые явным образом разделила свои разработки по сферам применения, или по «профилям», как это именуется в документации.
Процессоры ARMv7-A (Cortex-A) являются наиболее мощными и являются прямыми потомками предыдущих архитектур, сохраняя с ними практически полную программную совместимость. Они реализуют две системы команд: ARM и Thumb-2, которая ещё больше расширена по сравнению с реализованной в ARMv6T2. Благодаря этому, сохраняя намного более высокую плотность кода (а значит, потребляя меньше памяти), чем система команд ARM, Thumb-2 обеспечивает почти такую же производительность. Все процессоры Cortex-A в обязательном порядке оснащены устройством управления памятью (MMU), довольно часто на одном кристалле размещаются два процессорных ядра. Все эти процессоры предназначены для использования в мощных мобильных устройствах (сотовых телефонах, коммуникаторах, нетбуках и т.д.). Нередко производители расширяют их возможности, добавляя специализированные узлы. Например, фирма nVidia производит семейство процессоров Tegra 2, у которых, помимо процессорных ядер ARM, имеется графическое ядро, функционально близкое к использовавшемуся в видеоплатах семейства GeForce 6xxx.
Кристаллы ARMv7-R (Cortex-R) по системам команд аналогичны процессорам Cortex-A, но оснащены не устройством управления памятью, а значительно более простым устройством защиты памяти (MPU). Они предназначены в первую очередь для использования в промышленных контроллерах и тому подобных устройствах, не нуждающихся в виртуальной памяти, однако имеющих высокие требования к производительности.
Наконец, семейство ARMv7-M (Cortex-M), строго говоря, не относится к «настоящим» ARM-процессорам. Во-первых, оно кардинальным образом отличается по системной архитектуре от всех прочих разработок фирмы ARM, а соответственно, на системном уровне несовместимо ни с более ранними процессорами, ни с другими ветками Cortex. Во-вторых, в этих кристаллах реализована только система команд Thumb-2, а команды набора ARM не поддерживаются. Предназначена эта серия для использования в качестве микроконтроллеров малой и средней производительности. Благодаря низкой стоимости и энергопотреблению они могут успешно конкурировать с намного более слабыми по вычислительными возможностям 8- и 16-разрядными микроконтроллерами.
Разновидностью Cortex-M стала архитектура ARMv6-M. Несмотря на формальное отношение к шестой версии архитектуры, реально ARMv6-M является упрощённым вариантом Cortex-M и совершенно не совместима с другими процессорами версии ARMv6. С «настоящими» Cortex-M имеется совместимость «снизу вверх»: программа, работающая на ARMv6-M, заработает на Cortex-M, но не наоборот.
Следует заметить, что у процессорных ядер, разработанных ARM, существует своя система нумерации, не связанная с номером версии архитектуры. Так, ядра ARM7TDMI и ARM920T реализуют версию ARMv4T, большинство ядер семейства ARM9 — различные разновидности версии ARMv5 (например, ARM926EJ-S — это ARMv5TEJ). Все ядра семейства Cortex, за исключением Cortex-M0, относятся к разновидностям 7-й версии архитектуры (ядру Cortex-M0 соответствует версия ARMv6-M). Между собой ядра одной и той же версии и разновидности архитектуры могут отличаться конструкцией и объёмом кэш-памяти, наличием MMU, MPU, FPU и т.д.
- Главные особенности
Несмотря на то, что аббревиатура ARM расшифровывается как «A RISC Machine» («RISC-машина»), с самого начала это была не совсем типичная RISC-архитектура. С одной стороны, для RISC'а она имела не очень много регистров общего назначения (сейчас с формальной точки зрения у большинства разновидностей архитектуры их 31 штука, однако программисту доступны лишь 16 из них, причём три регистра имеют специальные функции; таким образом, «настоящих» регистров общего назначения с точки зрения программиста всего 13, в то время как целый ряд «настоящих» RISC-процессоров имеют их больше сотни). С другой стороны, уникальной особенностью этой архитектуры являлась возможнось исполнения любой команды при соблюдении заданного условия, отсутствующая не только у других RISC'ов, но и у CISC'ов (первые безусловно выполняемые команды в наборе ARM появились лишь в версии ARMv5). Кроме того, в командах обработки данных в ряде случаев возможно совмещение выполнения основной операции (например, сложения) со сдвигом. Наконец, инструкции чтения и записи памяти у ARM располагают развитым набором видов адресации, который превосходит по своим возможностям не только RISC'и, но и основную массу CISC-процессоров (среди последних единственными конкурентами в этом плане могли бы служить лишь появившиеся в 1970-х годах мини-ЭВМ PDP-11 и VAX-11 фирмы DEC).
Однако время показало ошибочность идеи, на которой базировались «настоящие» RISC-архитектуры: достижение высокой производительности через быстрое выполнение простых команд в противовес медленному выполнению сложных команд у CISC-процессоров (предполагалось, что, пока CISC выполнит одну свою сложную команду, RISC успеет выполнить несколько простых и в итоге обгонит CISC по производительности, хотя каждая команда индивидуально выполнит меньший объём действий, чем одна команда CISC'а). На практике оказалось, что даже очень неудачные с архитектурной точки зрения системы команд, например, Intel IA-32, можно выбирать из памяти, декодировать и исполнять чрезвычайно быстро (это наглядно демонстрирует пример самой Intel: несмотря на всю громоздкость и неэффективность её системы команд, именно её процессоры на сегодняшний день по производительности обгоняют любые другие кристаллы — правда, ценой очень сложной внутренней организации, ставшей возможной лишь благодаря использованию очень совершенной технологии производства). Неудивительно, что в своём развитии архитектура ARM постепенно эволюционировала в сторону CISC-процессоров.
На сегодняшний день у ARMа от RISCа у неё остались только две вещи: невозможность прямой работы с операндами в памяти и название. Некоторые имеющиеся у современных процессоров ARM инструкции (в частности, деление) недопустимы в «настоящих» RISC'ах в связи с их сложностью и переменным временем выполнения. Внедрение же системы команд Thumb-2 похоронило и другую важнейшую черту RISC-процессоров: одинаковую длину кода команды, призванную упростить выборку из памяти и декодирование инструкций.
Современные процессоры архитектуры ARM способны обрабатывать 8-, 16- и 32-разрядные целые числа. Возможность обработки вещественных чисел является необязательной и достигается с помощью сопроцессоров (которые, если присутствуют, выполняются на одном кристалле с собственно центральным процессором). Старшие модели способны работать с виртуальной памятью, поскольку имеют необходимое для этого устройство управления памятью (MMU). Более простые изделия не располагают MMU, но в некоторых случаях имеют устройство защиты памяти (MPU), не позволяющее реализовать виртуальную память, но обеспечивающее необходимую поддержку аппаратной защиты одних выполняющихся процессором задач от других.
Терминология и язык ассемблера
Компания ARM не всегда последовательна в выборе терминов для обозначения различных понятий и механизмов, описываемых в документации. Особенно это касается ранних версий архитектуры. Например, она использует термины interrupt, fault, abort, exception, trap без чёткого, недвусмысленного и неукоснительного их разграничения (хотя в документации на последние версии архитектуры применение этих слов стало более строгим и упорядоченным). Поэтому в статьях, посвящённых архитектуре ARM, для обозначения произвольного вида прерывания текущего выполняемого кода применяется терминпрерывание; он же используется, когда источником прерывания является внешнее устройство, что бывает ясно из контекста (внешние и быстрые прерывания IRQ и FIQ). Термин отказ применяется к прерываниям, возникающим в результате неудачной попытки обращения к памяти для выборки команды (отказ предвыборки — prefetch abort) или считывания либо записи данных (отказ данных — data abort). Терминисключение применяется в прерываниям, возникающим вследствие особых условий, возникших при выполнении программы, и прямо связанным с определёнными командами (например, попытка применения привилегированной инструкции в непривилегированном режиме). Термины сбой и ошибка применяются для обозначения условий, обнаруживаемых различным оборудованием (в первую очередь, устройством управления памятью и устройствм защиты памяти) и приводящих в итоге к возникновению отказа или исключения.
С появлением системы команд Thumb-2 (версия архитектуры ARMv6T2) компания ARM унифицировала язык ассемблера для наборов команд ARM и Thumb, назвав получившийся гибрид аббревиатурой UAL (Unified Assembler Language). Упоминаемые и описываемые в статьях команды приводятся в соответствии с нотацией UAL, которая, особенно для инструкций Thumb, может отличаться от ранее применявшихся обозначений.
- Архитектура ARM
Первое ядро, названное ARM6, было разработано в 1991 г., однако реальное воплощение получила только следующая разработка – ядро ARM7, созданное в 1993 г. Компания не занимается непосредственным производством микросхем. Возможно, эта особенность, которая, на первый взгляд, воспринимается как недостаток, и способствовала удивительной популярности архитектуры ARM. Фирма поставляет свои разработки в электронном виде, на основе которых клиенты конструируют свои собственные микропроцессоры и микроконтроллеры.
Клиентами ARM являются свыше 60 производителей полупроводников, среди которых можно выделить такие известные компании, как Altera, Analog Devices, Atmel, Cirrus Logic, Fujitsu, MagnaChip (Hynix), Intel, Freescale (Motorola), National Semiconductor, NXP (Philips), OKI, ST Microelectronics и Texas Instruments.
В настоящее время архитектура ARM занимает лидирующие позиции и охватывает 75% рынка 32разрядных встраиваемых RISC микропроцессоров. Фактически можно говорить об архитектуре ARM как о промышленном стандарте. Распространённость ядра предоставляет возможность разработчику более гибко использовать свои и сторонние программные наработки как при переходе на новое процессорное ARM ядро, так и при «миграциях» между разными типами ARM микроконтроллеров.
- Особенности архитектуры ARM
Архитектура ARM отражает собственную философию компании, суть которой – максимальное удовлетворение требованиям встраиваемых систем. Для этого разработчики не стали замыкаться в формальных рамках RISC архитектуры, а в одном продукте реализовали идеи, ранее считавшиеся несовместимыми.
Хотя в своей основе ядро ARM отталкивается от идеологии RISC архитектуры (ограниченный набор команд, очередь выборки инструкций, активное использование регистров и ограниченный доступ к памяти), оно не является «чистым» представителем RISC.
Не все инструкции ARM выполняются за один цикл. Например, есть инструкции, позволяющие переслать между памятью и регистрами 16 слов по 32 разряда. Поскольку подобные операции активно используются компиляторами при каждом вызове и возврате из функций, введение таких инструкций существенно ускоряет работу программы, и минимизируют размер кода.
В состав системы команд входят так же инструкции обращения к аппаратному сопроцессору. Это позволяет разработчикам микроконтроллеров на базе ARM расширять возможности базовой архитектуры, добавляя свои сопроцессоры в случае необходимости.
Дополнительно к ARM архитектуре могут интегрироваться несколько расширений:
- Thumb® – 16разрядный набор инструкций, улучшающий эффективность использования памяти рограмм;
- DSP – набор арифметических инструкций для цифровой обработки сигналов;
- Jazelle™ – расширение для аппаратного непосредственного исполнения Java инструкций;
- Media – расширение для 2…4 кратного увеличения скорости обработки аудио и видеосигналов.
- Набор инструкций Thumb
Первоначальная система команд ARM содержала только 32разрядные инструкции. Однако для систем, критичных к стоимости и объёму памяти программ, к которым относятся практически все встраиваемые системы реального времени, большая длина инструкций оказалась «узким местом», ограничивающим распространение новой архитектуры.
FLASH память – один из наиболее дорогих компонентов системы, и снижение её объёмов – актуальная задача. Поэтому в 1995 г. система команд ARM дополнилась новым набором 16разрядных инструкций, получившим название Thumb.
Это стало в инженерном смысле очень красивым решением проблемы. Из всего набора инструкций ARM были отобраны наиболее употребляемые инструкции и перекодированы в 16 разрядные опкоды. При выборке такой инструкции процессор ARM с помощью простого аппаратного дешифратора восстанавливает истинный 32 разрядный код инструкции, который и выполняется процессором. Таким образом, стандартное 32 разрядное ядро без каких-либо переделок получило возможность работы с 16 битовыми инструкциями.
При разработке Thumb пришлось пожертвовать некоторыми инструкциями, было снижено по сравнению с ARM количество доступных регистров, режимов адресации, ограничен доступ к некоторым системным ресурсам (регистрам состояния, сопроцессорам).
Однако при необходимости процессор может легко сменить режим выбора инструкций, переходя из Thum в ARM и обратно. Имея это в виду, разработчик может гибко управлять поведением своей программы, используя наиболее эффективный для каждого случая набор команд.
- Технология SIMD
Технология SIMD (несколько данных в одной инструкции) используется в media расширении и нацелена на увеличение скорости обработки данных в приложениях, где требуется малое энергопотребление. SIMD расширения оптимизированы под широкий диапазон программного обеспечения, в том числе под аудио видео кодеки, где эти технологии позволяют увеличить быстродействие обработки в 4 раза.
- Набор инструкций DSP
Многие приложения предъявляют повышенные требования по быстродействию реально-временной обработки сигналов. Традиционно в таких ситуациях разработчики прибегают к использованию цифрового сигнального процессора (DSP), что увеличивает энергопотребление и стоимость, как самой разработки, так и конечного устройства. Для устранения этих недостатков в ряд ARM процессоров интегрированы инструкции ЦСП, выполняющие 16 и 32разрядные арифметические операции.
- Технология Jazelle
Технология ARM Jazelle предназначена для приложений с поддержкой языка программирования Java. Она предлагает уникальное сочетание высокой производительности, малой системной стоимости и невысоких запросов к энергопотреблению, что не может быть достигнуто одновременно, если использовать сопроцессор или специализированный Java процессор.
Технология ARM Jazelle является расширением 32разрядной RISC архитектуры, которое позволяет ARM процессору выполнять Java код на аппаратном уровне. При этом достигается непревзойдённое быстродействие исполнения Java кода с помощью ARM архитектуры.
Таким образом, разработчики имеют возможность свободно реализовывать Java приложения, в том числе операционные системы и прикладной код, на одном процессоре.
В настоящее время технология Jazelle интегрирована в следующие ARM процессоры:
ARM1176JZ(F)S, ARM1136J(F)S, ARM1026EJS, ARM926EJS и ARM7EJS.
Традиционные ARM процессоры поддерживают два набора инструкций. В режиме ARM поддерживаются 32 разрядные инструкции, а в режиме Thumb наиболее популярные инструкции сжимаются до 16 разрядного формата. Технология Jazelle расширяет эту концепцию, добавляя третий набор инструкций – Java, который активизируется в новом Java режиме.
- Технология интеллектуального управления энергопотреблением
Одна из основных задач, которую решают разработчики портативных устройств, например, смартфонов, персональных цифровых помощников и аудио видео плееров, – это оптимизация энергопотребления, что позволяет улучшить эксплуатационные характеристики готового устройства за счёт продления ресурса батареи питания или уменьшения размеров устройства.
Традиционным методом снижения энергопотребления является использование экономичных режимов работы, например, холостой ход (idle) или сон (sleep), которые различаются глубиной деактивации внутренних элементов. Как правило, активный режим работы такой системы рассчитан на наихудшие условия функционирования и характеризуется максимальной загрузкой. Тем самым неоправданно сокращается срок службы батареи. Поэтому для оптимизации расходования энергии бата процессоров ARM. Технология является сочетанием аппаратных и программных компонентов, которые сов местно выполняют динамическое управление напряжением питания (power scaling).
Суть метода
динамического управления напряжением
питания можно понять, проанализировав
формулу потребляемой мощности для КМОП
процессоров:
где Р – общая потребляемая мощность,
С – переключаемая ёмкость, fc – частота
процессора, VDD – напряжение питания, IQ
– ток утечки в статическом режиме.
Из формулы следует, что энергопотребление зависит от частоты и напряжения питания. Снижение частоты для уменьшения энергопотребления широко используется в микроконтроллерах и системах на кристаллах (PSoC), но недостатком этого метода является уменьшение быстродействия. Метод динамического управления напряжением основан на изменении напряжения питания (см. рис. 2), однако если возможности регулировки исчерпаны, то как дополнительный используется метод регулировки частоты процессора.
- Семейства ядер и процессоров ARM
К настоящему времени разработано восемь основных семейств ядер: ARM7™, ARM9™, ARM9E™, ARM10E™, ARM11™, Cortex, SecurCore™ и OptimoDE Data Engines.
Помимо перечисленных, существуют также специфические ядра, разработанные совместно с компанией Intel: XScale™ и StrongARM®.
Первоначально
для обозначения различных вариантов
ядер и процессоров компания ARM использовала
свою внутреннюю систему обозначений,
которая предполагала, что имя любого
ядра или процессора формируется в соответствии
с шаблоном – ARM{x}{y}{z}{T}{D}{M}{I}{E}{J}
x – семейство;
y – блок управления или защиты памяти;
z – память кэш;
T – поддержка режима Thumb;
D – JTAG порт;
M – быстрый умножитель;
I – встроенный блок эмуляции;
E – расширенный набор инструкций (подразумевает обязательное наличие функций TDMI, поэтому в случае использования индекса E индексы TDMI из названия опускаются);
J – поддержка Java инструкций (режим Jazelle);
F – блок векторной арифметики над числами с плавающей точкой;
S – синтезируемая версия (поставляется производителю кристалла в виде исходного текста, требующего компиляции (синтеза), в отличие от несинтезируемых версий, которые имеют заданную и неизменяемую топологию).
Процессоры ARM разрабатывались для удовлетворения потребностей следующих основных категорий систем:
- встраиваемые системы реального времени;
- универсальные платформы для приложений на базе открытых операционных систем, включающих: Linux, Palm OS, Symbian OS и Windows CE;
- системы защиты данных для смарт карт, SIM карт и платёжных терминалов.
- Регистры общего назначения (ARM)
- Регистры общего назначения на прикладном уровне
С точки зрения прикладного программиста, процессор располагает 16-ю 32-разрядными регистрами общего назначения (РОН, GPR), из которых три на деле имеют специальные функции:
- общие регистры R0–R12;
- указатель стека SP, он же регистр R13;
- регистр связи LR, он же регистр R14;
- счётчик команд PC, он же регистр R15.
Первые 13 регистров с точки зрения архитектуры являются абсолютно равноправными, за исключением того, что в командах, обрабатывающих сразу пару регистров (например, LDRD), указывается всегда регистр с чётным номером, а пару с ним составляет следующий за ним регистр с нечётным номером.
Остальные три регистра имеют специальное назначение. Счётчик команд как РОН использоваться не может, а в командах применяется для достижения специальных целей. LR может использоваться как РОН в тех случаях, когда он не применяется по прямому назначению. Возможность такого использования для SP определяется разновидностью процессора. В частности, в архитектуре ARMv7-M при записи в SP младшие два бита принудительно устанавливаются в 0, что ограничивает возможности его применения как обычного РОНа. Подробнее об использовании этих регистров сказано ниже.
Заметим, что в системе команд Thumb свободно могут использоваться лишь регистры R0-R7, называемые также младшими регистрами. Явный доступ к старшим регистрам в Thumb крайне ограничен. Система команд Thumb-2 преодолела это ограничение, однако для доступа к старшим регистрам в ней почти во всех случаях применяется 32-, а не 16-разрядное кодирование команд. Система команд ARM ограничений на доступ к регистрам не имеет.
- Счётчик команд PC (R15)
Регистр PC (Program Counter) используется для хранения адресов выполняющихся команд. При последовательном выполнении команд он последовательно увеличивается, при переходах в него загружается новое значение.
Многие команды запрещают программисту явно использовать PC или налагают на это определённые ограничения, что всегда оговаривается в описаниях конкретных команд. Нарушение этих правил обычно ведёт к непредсказуемым результатам.
В тех случаях, когда описание команды не налагает ограничений на использование PC, применяются изложенные ниже правила.

- Архитектура модерна
- Архитектура модерна
- Архитектура модерна в Нижнем Новгороде начала XX века
- Архитектура необычайных отелей мира
- Архитектура Операционной системы
- Архитектура ОС Windows
- Архитектура панельного 9-этажного дома
- Архитектура компьтерных сетей
- Архитектура компьютера
- Архитектура компьютера
- Архитектура компьютеров параллельного действия
- Архитектура культурной столицы России Санкт-Петербурга
- Архитектура Ленинграда 1960-80-х гг. Метрополитен Ленинграда
- Архитектура Мадрида