Что такое набор инструкций для большого пальца ARM?

В разделе "Набор команд Thumb" в разделе 1-34 "ARM11TechnicalRefManual" сказано, что:

"Набор команд Thumb представляет собой подмножество наиболее часто используемых 32-разрядных инструкций ARM. Эти инструкции имеют длину 16 бит и имеют соответствующую 32-разрядную инструкцию ARM, которая оказывает такое же влияние на модель процессора".

Кто-нибудь может объяснить больше об этом особенно втором предложении и сказать, как процессор выполняет это?

1 ответ

Решение

Процессор ARM имеет 2 набора команд, традиционный набор ARM, где все инструкции имеют 32-битную длину, и более сжатый набор Thumb, где наиболее распространенные инструкции имеют 16-битную длину (а некоторые 32-битные). Какой набор команд для запуска может быть выбран разработчиком, и только один набор может быть активным (т. Е. Как только процессор переключается в режим Thumb, все инструкции будут декодированы с использованием Thumb вместо ARM).

Хотя они представляют собой разные наборы инструкций, они имеют сходные функциональные возможности и могут быть представлены с использованием одного и того же языка ассемблера. Например, инструкция

ADDS  R0, R1, R2

может быть скомпилировано в ARM (E0910002 / 11100000 10010001 00000000 00000010) или Thumb (1888 / 00011000 10001000). Конечно, они выполняют одну и ту же функцию (добавляют r1 и r2 и сохраняют результат в r0), даже если они имеют разные кодировки. Это означает, что инструкции Thumb имеют длину 16 бит и имеют соответствующую 32-битную инструкцию ARM, которая одинаково влияет на модель процессора.

Каждая * инструкция в кодировке Thumb также имеет соответствующую кодировку в ARM, что подразумевается под предложением "подмножество".


*: Не совсем верно, в ARM нет инструкции "IT", хотя ARM все равно не нуждается в "IT" (она будет игнорироваться ассемблером).

Другие вопросы по тегам