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

 
Пересюхтюмя


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





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





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


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





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


Умножение (MULL) и Умножение с накоплением (MLAL) с 64-битным результатом (long)

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

Команды MULL и MLAL позволяют выполнить целочисленное умножение двух 32-битных операндов и получить 64-битный результат. Умножение со знаком и без знака может быть как с накоплением, так и без него. Поэтому существуют четыре разновидности умножения с 64-битным результатом.

Команды умножения с 64-битным результатом
Рис. 22. Команды умножения с 64-битным результатом

В обеих командах умножения без накопления (UMULL и SMULL) используется следующая форма записи: RdHi,RdLo := Rm*Rs. Младшие 32 бита результата заносятся в регистр RdLo, а старшие 32 бита - в регистр RdHi.

В обеих командах умножения c накоплением (UMLAL и SMLAL) используют два 32-битных регистра, которые умножаются друг на друга, и к полученному результату добавляется 64-битное слагаемое: RdHi,RdLo := Rm*Rs + RdHi,RdLo. Младшие 32 бита добавляемого к результату умножения слагаемого вычитываются их регистра RdLo, а старшие 32 бита - из регистра RdHi. После чего младшие 32 бита результата заносятся в регистр RdLo, а старшие 32 бита - в регистр RdHi.

Команды UMULL и UMLAL производят действия только над целыми двоичными числами без знака (unsigned) и результат своего выполнения записывают как 64-битное целое число без знака. Команды SMULL и SMLAL производят действия только над целыми двоичными числами со знаком (signed) с дополнением до 2-х, а результат своего выполнения записывают как 64-битное целое число со знаком.

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

Недопустимо использование регистра R15 в качестве регистра-операнда или регистра-результата.

Регистры RdHi, RdLo и Rm должны быть определены как различные регистры.

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

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

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

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

Для команд умножения со знаком (SMULL, SMLAL):

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

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

Таблица 9. Синтаксис команд умножения с 64-битным результатом

Мнемоника в ассемблере Описание Выполняемые действия
UMULL{cond}{S}RdLo,RdHi,Rm,Rs Умножение без знака 32 x 32 = 64
UMLAL{cond}{S}RdLo,RdHi,Rm,Rs Умножение без знака с накоплением 32 x 32 + 64 = 64
SMULL{cond}{S}RdLo,RdHi,Rm,Rs Умножение со знаком 32 x 32 = 64
SMLAL{cond}{S}RdLo,RdHi,Rm,Rs Умножение со знаком и с накоплением 32 x 32 + 64 = 64
{cond}: двухсимвольная мнемоника условия выполнения команды (см. табл. 6).
{S}: разрешить воздействие на флаги регистра CPSR, если S указано.
RdLo, RdHo, Rm и Rs: выражения, которые определяют номер регистра общего назначения (кроме регистра R15).

Примеры

UMULL   R1,R4,R2,R3     ; R4,R1:=R2*R3
UMLALS  R1,R5,R2,R3     ; R5,R1:=R2*R3+R5,R1, также разрешить 
                        ; воздействие на флаги CPSR выполнения (S)

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