В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная > Обзоры по типам > Микроконтроллеры > ARM > Система команд
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


Умножение (MUL) и Умножение с накоплением (MLA) с 32-битным результатом

Эти команды будут выполнены, если условие истинно. Все различные условия их выполнения перечислены в таблице 6. Машинный код обеих команд приведен на рис.21.

Обе команды для выполнения целочисленного умножения используют алгоритм, основанный на цепочке операций логического сдвига и сложения 8-битных операндов (Booth's algorithm).

Команды умножения
Рис. 21. Команды умножения

В команде умножения (MUL) используется следующая форма записи: Rd := Rm*Rs. Регистр Rn игнорируется и должен быть равен нулю с целью совместимости с возможным в будущем расширением системы команд.

В командах умножения с накоплением (MLA) используется другая форма записи: Rd := Rm*Rs + Rn. При Rm=1 или Rs=1 эта команда по своим действиям эквивалентна выполнению команды ADD.

Обе команды позволяют выполнять операции только с целочисленными операндами как без знака так и со знаком (дополнение до 2-х).

Результаты умножения 32-битных операндов со знаком и 32-битных операндов без знака различаются только своими старшими 32-мя битами, а младшие 32 бита обоих результатов - одинаковы обоих типов операндов. Поскольку результат выполнения команд MUL и MLA только 32-битный (старшие 32 бита результата будут отброшены), то результат выполнения этих команд будет одинаков как для операндов со знаком, так без знака.

Например, команда умножения 0xFFFFFFF6 (операнд A) на 0x00000014 (операнд B) даст результат, равный 0xFFFFFF38.

Если операнды интерпретируются как знаковые

Пусть, операнд А = -10, а операнд B = 20, то результатом их умножения будет число -200, которое корректно записывается так: 0xFFFFFF38.

Если операнды - без знака

Пусть, операнд А = 4294967286, а операнд B = 20, то результатом их умножения будет число 85899345720, которое корректно записывается так: 0x13FFFFFF38, но старшие 32 бита результата отбрасываются, то окончательным результатом умножения будет число 0xFFFFFF38.

Ограничения операнда

Недопустимо использование регистра-результата Rd одновременно в качестве регистра-операнда (Rm, Rn или Rs). Также недопустимо использование регистра R15 в качестве регистра-операнда или регистра-результата.

Все другие комбинации остальных регистров будут давать корректный результат, а, если требуется, то в роли Rd, Rn и Rs может выступать один и тот же регистр.

Флаги регистра CPSR

Возможность воздействия на флаги регистра CPSR определяется битом S в соответствующем поле команды. Флаги N (минус) и Z (ноль) устанавливаются в соответствии с результатом умножения: флаг N становится равным 31-му биту результата, а флаг Z устанавливается только, если результат - ноль. Флаг С (перенос) устанавливается в неизвестное состояние, а флаг V (переполнение) - не используется.

Число машинных тактов при выполнении

Команда MUL выполняется за 1S + mI машинных тактов, а команда MLA - за 1S + I(m + 1) машинных тактов, где S и I зависят от типа машинных тактов, m - количество 8-битных множителей, необходимых для выполнения умножения, и зависит содержимого операнда-множителя Rs. Возможные значения m перечислены ниже:

m = 1, если биты [31:8] операнда-множителя - либо все нули, либо все единицы.
m = 2, если биты [31:16] операнда-множителя - либо все нули, либо все единицы.
m = 3, если биты [31:24] операнда-множителя - либо все нули, либо все единицы.
m = 4: во всех остальных случаях.

Синтаксис в ассемблере

MUL{cond}{S} Rd, Rm, Rs
MLA{cond}{S} Rd, Rm, Rs, Rn
{cond}: двухсимвольная мнемоника условия выполнения команды (см. табл. 6).
{S}: разрешить воздействие на флаги регистра CPSR, если S указано.
Rd, Rm, Rs и Rn: выражения, которые определяют номер регистра общего назначения (кроме регистра R15).

Примеры

MUL     R1,R2,R3        ; R1 := R2*R3
MLAEQS  R1,R2,R3,R4     ; Выполнить по условию EQ: R1 := R2*R3 + R4
                        ; и разрешить воздействие на флаги CPSR выполнения (S)

<---- Вернуться к Системе команд --->