MUL - Multiplikationsanweisung in Mikrocontrollern, die zum Beispiel in Atmega Mikrocontrollern vorhanden sind. Aber nicht alle AVR Mikrocontroller haben Hardware-Unterstützung für Multiplikationsfunktionen. Bei Attiny Mikrocontrollern fehlt beispielsweise der MUL Befehl einfach, sodass die Lösung dieses Problems dem Programmcode zugewiesen wird.
Der Hauptpunkt, der bei der Implementierung der Multiplikationsfunktion berücksichtigt werden muss, besteht darin, dass zwei Register benötigt werden, um das Ergebnis der Multiplikation zu speichern. Das Low-Byte des Ergebnisses wird in einem der Register und das High-Byte des Ergebnisses im zweiten Register gespeichert.
Softwareimplementierung von MUL
Unten ist eine Multiplikationsfunktion, die mit 8-Bit-Zahlen arbeitet und 16-Bit-Zahlen ausgibt.
;======= Программная функция умножения (реализует mul) ============================== ; r16 ; множимое ; r17 ; множитель ; r0 ; младший байт результата ; r1 ; старший байт результата ; r19 ; счетчик цикла ;----------------------------------------------------------------------------------- mpy8u_c: clr r1 ; очищаем регистр для сохранения старшего байта результата ldi r19,8 ; устанавливаем стартовое значение счетчика цикла lsr r17 ; сдвигаем множитель вправо m8u_1: brcc m8u_2 ; производим переход, если С = 0 add r1,r16 ; к старшему байту результата прибавляем множимое m8u_2: ror r1 ; старший байт результата сдвигаем вправо ror r0 ; младший байт результата сдвигаем вправо dec r19 ; производим декремент счетчика brne m8u_1 ; производим переход, если С != 0 ret
Notiz. Diese Softwarefunktion verwendet arithmetische Operationen, deren Ausführung dem Register SREG - AVR Status zugewiesen ist.
SREG - AVR-Statusregister
- Bit 7 - Bit der globalen Freigabeunterbrechungen;
- Bit 6 - Bit zum Kopieren und Herunterladen von Anweisungen;
- Bit 5 - Carry-Flag. Freigelegt nach einigen Rechenoperationen;
- Bit 4 - Nummernzeichen-Flag;
- Bit 3 - Zweierkomplement-Flag. Wird angezeigt, wenn Register überlaufen sind;
- Bit 2 - Flag des negativen Ergebnisses von arithmetischen oder logischen Operationen;
- Bit 1 - Nullergebnis-Flag. Wird angezeigt, wenn das Ergebnis arithmetischer oder logischer Operationen Null ist.
- Bit 0 - Carry-Flag. Zeigt Carry bei arithmetischen und logischen Operationen an.