FMUL — Fractional Multiply Unsigned

Syntax:FMUL Rd, Rr
Funktion:Dieser Befehl multipliziert eine 8-bit-Zahl mit einer 8-bit-Zahl und schiebt das 16-bit-Ergebnis um ein Bit nach links.

Der Multiplikand Rd und der Multiplikator Rr sind vorzeichenlose Festkommazahlen mit dem gedachten Dezimalpunkt zwischen Bit 6 und 7. Das 16-bit-Ergebnis ist ebenfalls vorzeichenlos mit gedachtem Dezimalpunkt zwischen Bit 14 und 15. Das Ergebnis wird im Register R1 (High-Byte) und R0 (Low-Byte) abgelegt.

Eine Multiplikation zweier Zahlen im Format N1.Q1 und N2.Q2 ergibt ein Ergebnis im Format (N1+N2).(Q1+Q2). N bedeutet dabei die Anzahl der binären Stellen links vom Dezimalpunkt, Q bedeutet die Anzahl der binären Stellen rechts vom Dezimalpunkt. In Mikrocontroller-Anwendungen liegt der Input oft im Format 1.7, womit sich ein Ergebnis im Format 2.14 ergibt. Ein Linksschieben des Ergebnisses ermöglicht, dass das High-Byte des Ergebnisses im gleichen Format wie der Input vorliegt. Das 1.7-Format wird für gewöhnlich bei vorzeichenbehafteten Zahlen verwendet (dann s.7), während FMUL eine Multiplikation vorzeichenloser Zahlen durchführt. Daher wird FMUL für eine Teilmultiplikation von 16-bit-Zahlen im 1.15-Format verwendet, wenn ein Ergebnis im 1.31-Format benötigt wird. Das Ergebnis der FMUL-Operation kann an einem Zweierkomplement-Überlauf leiden, wenn das Ergebnis als eine Zahl im 1.15-Format interpretiert wird. Das MSB des Ergebnisses vor dem Linksschieben wird in das Carry-Flag gesichert.

Dieser Befehl ist nicht bei allen Chips verfügbar. Als Operanden stehen nur die Register R16 bis R23 zur Verfügung.
Operation:R1:R0 ← Rd × Rr × 2
Operanden:16 ≤ d ≤ 23, 16 ≤ r ≤ 23
Programmzähler:PC ← PC + 1
Words:1 (2 Byte)
Zyklen:2
16-Bit-Opcode:0000 0011 0ddd 1rrr

Flags im Status-Register SREG

ITHSVNZC
------
Z:Das Z-Flag wird gesetzt, wenn das Ergebnis 0x0000 ist, andernfalls wird das Flag gelöscht.
C:Das C-Flag wird gesetzt, wenn im Ergebnis ein Überlauf ins Bit 16 erfolgt, andernfalls wird es gelöscht.

Beispiel

	fmul	r23,r22		;Multipliziert vorzeichenlos R23 und R22 im 1.7-Format
				;Ergebnis in R1:R0 im 1.15-Format