AVR Risc Controller Modulo Operation

Gast #171218
Lesenswert?

Klar können die das, kann jeder µProzessor.
Der Modulo ist der Restwert einer Division.
Und falls der Modulo aus einer Division einer 2ér-Potenz ermittelt
werden soll (/2, /4, /8 etc.), reicht, in ASM oder auch C, eine
einfache AND-Verknüpfung.

MfG
Andi
Gast #171219
Lesenswert?

Danke für deine Antwort.

Einen speziellen Befehl zB wie add oder mul gibts aber nicht für diese
Operation oder? In C isset ja % aber es geht mir ja um einen Assembler
Befehl.
Mein Ziel ist es für eine beliebige einstellige Dezimalzahl den den
Modulo 4 Wert zu bilden
Also zB:
9 %4 = 1
Gast #171220
Lesenswert?

Nix leichter als das!

Zum Beispiel:
 ldi  r16,11  ;Ausgangswert
 andi r16,3   ;Modulo aus 11 / 4 = 3

oder
 ldi  r16,6   ;Ausgangswert
 andi r16,3   ;Modulo aus 6 / 4 = 2

Der Wert 3 für die AND-Verknüpfung kommt daher, das ein Modulo 4 Werte
von 0 bis 3 haben kann und die 4 einer Zahl aus einer 2ér-Potenz
entsprechen.
Mit Modulo 5 geht das natürlich nicht sondern immer nur mit Zahlen wie
2, 4, 8, 16, 32 etc.
Brauchst Du mal einen Modulo aus 8, machst Du eine AND-Verknüpfung mit
7 (0 bis 7 sind dann mögliche Werte).
Bei Modulo 100 z. B. benötigst Du eine Divisions-Routine welche das
Ergebnis und den Restwert zurück gibt.

MfG
Andi

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren