Thumb код в действии

Простая подпрограмма на языке C

Ниже приводится простая подпрограмма на языке C, показывающая различия между кодами ARM и Thumb. Эта подпрограмма возвращает абсолютную величину целого числа C, переданного ему как параметр.

Код на языке C:

if (x>=0)
return x;
else
return -x;

Эквивалент ARM ассемблерной версии - (исключая преамбулу):


Версия Thumb ассемблирования:

Размеры кода для обоих версий показываются в таблице.

Таблица 1: Размер кода для подпрограммы абсолютной величины

Меньший размер ассемблированного кода Thumb

Сравнение, приведенное в таблице 1 показывает, что код Thumb - на 33 % плотнее кода ARM, реализующего точно такую же функцию. Обратите внимание на то, что для выполнения задачи в коде Thumb необходимо большее количество команд чем в эквиваленте ARM. Однако, поскольку формат команды Thumb - только половина длины команд ARM, то общий размер подпрограммы в коде Thumb все же меньше.

Пример кодирования вручную

Как пример кодирования вручную, рассмотрим пример преобразования двоичного значения в шестнадцатиричное :

Код ARM:


Код ARM

 

Код Thumb:



 

Cоответствующие размеры ARM и Thumb кодов показаны ниже.

Таблица 2: Размеры кодов подпрограмм преобразования двоичной величины в шестнадцатиричную

В данном случае код Thumb оказывается на 45% более плотным чем эквивалентный код ARM, в точно таком же алгоритме.

Таблица 3: Система команд Thumb:

Mаршрут разработки программного обеспечения

Мы рекомендуем использовать комплекта инструментальных средств разработки программного обеспечения фирмы ARM (ARM Software Development Toolkit).