Thumb

Thumb — режим процессоров ARM, в котором используется сокращённая система команд. Она состоит из 36 команд, взятых из стандартного набора 32-разрядных команд архитектуры ARM и преобразованных до 16-разрядных кодов.

Длина команд Thumb составляет половину длины стандартных 32-разрядных команд, что позволяет существенно сократить необходимые объёмы памяти программ (порядка 30 %) и, кроме того, позволяет использовать более дешёвую 16-разрядную память.

При выполнении эти команды дешифруются процессором в эквивалентные операции ARM, выполняемые за то же количество тактов. Переключение ARM <-> THUMB возможно командой BX либо переключением режима работы по прерыванию/исключению.

Набор команд THUMB неортогонален и малоэлегантен. Команды позволяют работать напрямую лишь с 8 младшими РОН; к 8 старшим РОН (включая SP, LR, PC) применимы лишь несколько операций. В наборе недоступны следующие возможности ARM: умножение с накоплением/расширением, сопроцессорные операции, доступ к PSR и регистрам других контекстов, атомарный обмен SWAP. Недоступны условное исполнение, сдвиг 2-го операнда в командах общего назначения, трёхадресные операции (кроме ADD и SUB), автоинкрементный и автодекрементный режимы адресации. Все команды обработки данных устанавливают коды условий. Команда BL вынужденно кодируется в два слова, причём смещение ограничено 23 битами. Доступ к стеку (мультирегистровые команды PUSH и POP) организован принудительно по 13-у регистру, стек растёт вниз.