Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основные сведения о ARM.pdf
Скачиваний:
113
Добавлен:
18.05.2014
Размер:
482.2 Кб
Скачать

add

r3, r1, r2

@ r3 = (-32000)+(-768) = -32768 = 0xffff8000

ldr

r1, =result

@ Загрузить адрес сохранения результата

strh

r3, [r1]

@ Переслать результат в оперативную память

...

 

 

 

.section .data

 

result:

 

0

 

.hword

 

7Команды умножения

7.1Условные обозначения

При описании формата записи команд умножения на языке ассемблера будут использоваться следующие условные обозначения:

-op – мнемоника инструкции (например «mul», «mla»);

-{} – фигурные скобки; указывают, что содержащееся в них выражение не является обязательным и может быть опущено;

-{cond} – необязательный предикативный суффикс для реализации условного выполнения команды (подробнее см. п. 2);

-{s} – суффикс, указывающий, что инструкция при выполнении обновляет флаги условий в регистре состояния программы;

-Rd – операнд назначения; хранит результат умножения;

-Rm, Rs – операнды-множители;

-Rn – суммируемый операнд (аккумулятор);

-RdHi, RdLo – регистры, содержащие старшее и младшее слово результата;

-RdAHi, RdALo – регистры, содержащие суммируемый операнд(аккумулятор) до выполнения инструкции, а также хранящие результат после выполнения.

7.2Простое умножение

Листинг 8. Виды команд простого умножения

Вид команд

Мнемоники

Формат записи

 

 

 

Перемножение

mul

op{cond}{S} Rd, Rm, Rs

Перемножение с суммированием

mla

op{cond}{S} Rd, Rm, Rs, Rn

Команда простого умножения (mul) позволяет перемножить два 32разрядных числа и сохранить младшие 32 бита результата в операнд назначения.

25

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

В случае, если указан суффикс «S» происходит установка флагов N и Z в соответствии с результатом, флаг «V» не изменяется, состояние флага «C» становится неопределённым.

7.3«Длинное» умножение

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

В случае, если указан суффикс «S» происходит установка флагов N и Z в соответствии с результатом, состояние флагов «V» и «C» становится неопределённым.

 

 

 

 

 

Таблица 12: Форматы записи команд умножения

 

 

 

 

 

 

Вид команд

 

Мнемоники

 

Формат записи

 

 

 

 

 

 

Длинное перемножение

umull, smull

 

op{cond}{S} RdLo, RdHi, Rm, Rs

Длинное перемножение с

umlal, smlal

 

op{cond}{S} RdALo, RdAHi, Rm, Rs

суммированием

 

 

 

 

 

 

 

Таблица 13: Описание команд длинного умножения

 

 

 

 

 

Мнемоника

Расшифровка

Описание

 

 

 

 

 

 

umull

Unsigned

 

Исходные операнды (Rm, Rs) рассматриваются как 32х-

 

multiply long

 

разрядные числа без знака. Младшее слово результата

 

 

 

умножения сохраняется в RdLo, а старшее – в RdHi.

smull

Signed

 

Исходные операнды (Rm, Rs) рассматриваются как 32х-

 

multiply long

 

разрядные числа со знаком. Младшее слово результата

 

 

 

умножения сохраняется в RdLo, а старшее – в RdHi.

umlal

Unsigned

 

Исходные операнды (Rm, Rs) рассматриваются как 32х-

 

multiply-

 

разрядные числа без знака. 64-разрядный результат

 

accumulate

 

умножения прибавляется к 64-разрядному беззнаковому

 

long

 

числу, содержащемуся в RdALo и RdAHi.

smlal

Signed

 

Исходные операнды (Rm, Rs) рассматриваются как 32х-

 

multiply-

 

разрядные числа со знаком. 64-разрядный результат

 

accumulate

 

умножения прибавляется к 64-разрядному числу со знаком,

 

long

 

содержащемуся в RdALo и RdAHi.

26