Titelbild Mikrocontroller

F-Befehle


oben 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 eine Position nach links. Der Multiplikand Rd und der Multiplikator Rr sind zwei Register, die vorzeichenlose gebrochene Zahlen enthalten, bei denen der Dezimalpunkt zwischen dem 6ten und 7ten Bit liegt. Das 16 Bit - Ergebnis ist ebenfalls vorzeichenlos und hat seinen Dezimalpunkt zwischen dem 14ten und 15ten Bit. 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, 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 in allen Bausteinen verfügbar. Als Operanden stehen nur die Register R16 bis R23 zur Verfügung.
Operation: R1:R0 ← Rd x Rr (vorzeichenlos: (1.15) ← (1.7) x (1.7))
Operanden: 16 ≤ d ≤ 23, 16 ≤ r ≤ 23
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 2
16 Bit Operations Code: 0000 0011 0ddd 1rrr

Flags im Status-Register (SREG):
ITHSVN Z C
------
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 0000h ist, andernfalls wird das Flag gelöscht.
C: Das C-Flag wird gesetzt, wenn das Bit 15 des Ergebnisses vor dem Linksschieben gesetzt war. War das Bit vorher gelöscht, so wird auch das Carry- Flag gelöscht.

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

oben FMULS - Fractional Multiply Signed

Syntax: FMULS Rd,Rr
Funktion: Dieser Befehl multipliziert eine 8 Bit - Zahl mit einer 8 Bit - Zahl und schiebt das 16 Bit - Ergebnis eine Position nach links. Der Multiplikand Rd und der Multiplikator Rr sind zwei Register, die vorzeichenbehaftete gebrochene Zahlen enthalten, bei denen der Dezimalpunkt zwischen dem 6ten und 7ten Bit liegt. Das 16 Bit - Ergebnis ist ebenfalls vorzeichenbehaftet und hat seinen Dezimalpunkt zwischen dem 14ten und 15ten Bit. 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 vor, 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. Die Multiplikation von 80h (-1) mit 80h (-1) ergibt nach dem Linksschieben das Ergebnis 8000h (-1). Das Linksschieben erzeugt in diesem Fall einen Zweierkomplement- Überlauf, der durch die Software ausgewertet werden muss.
Dieser Befehl ist nicht in allen Bausteinen verfügbar. Als Operanden stehen nur die Register R16 bis R23 zur Verfügung.
Operation: R1:R0 ← Rd x Rr (mit Vorzeichen: (1.15) ← (1.7) x (1.7))
Operanden: 16 ≤ d ≤ 23, 16 ≤ r ≤ 23
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 2
16 Bit Operations Code: 0000 0011 1ddd 0rrr

Flags im Status-Register (SREG):
ITHSVN Z C
------
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 0000h ist, andernfalls wird das Flag gelöscht.
C: Das C-Flag wird gesetzt, wenn das Bit 15 des Ergebnisses vor dem Linksschieben gesetzt war. War das Bit vorher gelöscht, so wird auch das Carry- Flag gelöscht.

Beispiel:
fmuls r23,r22    ;Multipliziert vorzeichenbehaftet 
                 ;R23 und R22 im 1.7 Format.
                 ;Ergebnis in R1:R0 im 1.15 Format

oben FMULSU - Fractional Multiply Signed with Unsignedd

Syntax: FMULSU Rd,Rr
Funktion: Dieser Befehl multipliziert eine 8 Bit - Zahl mit einer 8 Bit - Zahl und schiebt das 16 Bit - Ergebnis eine Position nach links. Der Multiplikand Rd ist eine vorzeichenbehaftete gebrochene Zahl und der Multiplikator Rr ist eine vorzeichenlose gebrochene Zahl. Beide enthalten einen unterstellten Dezimalpunkt, der zwischen dem 6ten und 7ten Bit liegt. Das 16 Bit - Ergebnis ist ebenfalls vorzeichenbehaftet und hat seinen Dezimalpunkt zwischen dem 14ten und 15ten Bit. 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, während FMULSU eine Multiplikation einer vorzeichenbehafteten mit einer vorzeichenlosen Zahl durchführt. Daher wird FMULSU für zwei Teilmultiplikation von 16 Bit - Zahlen im 1.15 Format verwendet, wenn ein Ergebnis im 1.31 Format benötigt wird. Das Ergebnis der FMULSU-Operation kann einen Zweierkomplement-Überlauf haben, 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 in allen Bausteinen verfügbar. Als Operanden stehen nur die Register R16 bis R23 zur Verfügung.
Operation: R1:R0 ← Rd x Rr (mit Vorzeichen (1.15) ← mit Vorzeichen (1.7) x ohne Vorzeichen (1.7))
Operanden: 16 ≤ d ≤ 23, 16 ≤ r ≤ 23
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 2
16 Bit Operations Code: 0000 0011 1ddd 1rrr

Flags im Status-Register (SREG):
ITHSVNZC
------
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 0000h ist, andernfalls wird das Flag gelöscht.
C: Das C-Flag wird gesetzt, wenn das Bit 15 des Ergebnisses vor dem Linksschieben gesetzt war. War das Bit vorher gelöscht, so wird auch das Carry- Flag gelöscht.

Beispiel:
fmulsu r23,r22    ;Multipliziert R23 und R22 im 1.7 Format.
                  ;Ergebnis in R1:R0 im 1.15 Format

Impressum