Команда FMULS - Дробное умножение со знаком
Описание:
Эта инструкция выполняет 8-бит x 8-бит -> 16-бит знаковое умножение и сдвиг результата на 1 бит влево.
Пусть (N.Q) обозначают дробное число с N двоичных цифр слева от точки, и Q двоичных цифр справа от точки. Умножение между двумя числами в форматах (N1.Q1) и (N2.Q2) даст результат в формате ((N1 + N2). (Q1 + Q2)). Формат (1.7) широко используется как формат входных чисел для сигнальной обработки, а получившийся в результате формат (2.14) - как результат. Сдвиг влево необходим для того, что бы старший байт результата был в таком же формате как входные числа. Инструкция FMULS, включая операцию сдвига, выполняется за такое же число циклов как инструкция MULS.
Множимое Rd и множитель Rr - два регистра, содержащих знаковые дробные числа, у которых мнимая точка расположена между битом 6 и битом 7. 16-битный знаковый дробный результат с мнимой точкой между битом 14 и битом 15 помещается в R1 (старший байт) и R0 (младший байт).
Заметим, что, когда умножаются 0x80 (-1) с 0x80 (-1), результатом операции сдвига будет 0x8000 (-1). Операции сдвига, таким образом, даёт два дополнительных переполнения. Это должны быть проверено с помощью программного обеспечения.
Эта инструкция не доступна во всех устройствах. Обратитесь к сводной инструкции конкретного устройства.
Операция:
(i) |
R1:R0 <-- Rd x Rr (знаковое (1.15) <-- знаковое (1.7) x знаковое (1.7)) |
|
|
Синтаксис |
Операнды: |
Счетчик программ: |
(i) |
FMULS Rd,Rr |
16 d 23, 16 r 23 |
PC <- PC + 1 |
16-разрядный код операции:
Булевы выражения регистра статуса (SREG)
C: R16
Установлен, если бит 15 результата до сдвига в лево установлен, очищен в ином случае.
Z: R15 · R14 · R13 · R12 · R11 · R10 · R9 · R8 · R7 · R6 · R5 · R4 · R3 · R2 · R1 · R0
Установлен, если результат равен $0000, очищен в ином случае.
R: (результат) соответствует R1,R0 после выполнения команды.
Пример:
fmuls r23,r22 ; Умножить знаковые r23 и r22 в формате (1.7), результат в формате (1.15)
movw r23:r22,r1:r0 ; Копируем результат обратно в r23:r22
Слов: 1 (2 байта)
Циклов:2
|