[ASM] Modulo?
[ASM] Modulo?
Hej alla galda!
Nu är jag antagligen blind eller så finns det inte men, hur gör man Modulo i ASM?
Finns inte i AVRs instruktionsblad iaf.
Ex: 10%4 = 2, 15%6 = 3
Om det inte finns hur ska man då göra?
//Emil
Nu är jag antagligen blind eller så finns det inte men, hur gör man Modulo i ASM?
Finns inte i AVRs instruktionsblad iaf.
Ex: 10%4 = 2, 15%6 = 3
Om det inte finns hur ska man då göra?
//Emil
Nu kan jag inte AVRs instruktionsuppsättning, men om du ska göra modulo-jämna 2-potenser så är det bara att göra bitwise-AND. 10%4 blir alltså 10 & 3 = 2, 10%8 = 10 & 7. Stämmer antagligen inte på negativa tal...
Modulo med annat än jämna 2-potenser måste göras med division, vilket är jobbigt i ASM på en AVR (liksom andra hyfsat enkla mikrokontrollers). Om argumentet (15 i ditt fall) inte är väldigt stort i förhållande till modulo-basen (6) så är det nog enklast att addera 6 + 6 + 6 + etc. tills summan blir större än 15, dvs det blir 18 i ditt fall. Därefter drar du bort 15 och resten blir modulo.
Kanske finns enklare sätt (på avancerade PIC:ar finns multiplikation i hårdvara och det kan man utnyttja, men jag vet inte om det finns i AVR).
Modulo med annat än jämna 2-potenser måste göras med division, vilket är jobbigt i ASM på en AVR (liksom andra hyfsat enkla mikrokontrollers). Om argumentet (15 i ditt fall) inte är väldigt stort i förhållande till modulo-basen (6) så är det nog enklast att addera 6 + 6 + 6 + etc. tills summan blir större än 15, dvs det blir 18 i ditt fall. Därefter drar du bort 15 och resten blir modulo.
Kanske finns enklare sätt (på avancerade PIC:ar finns multiplikation i hårdvara och det kan man utnyttja, men jag vet inte om det finns i AVR).
Jag tror det va så han skrev.Earendil skrev:Nu kan jag inte AVRs instruktionsuppsättning, men om du ska göra modulo-jämna 2-potenser så är det bara att göra bitwise-AND. 10%4 blir alltså 10 & 3 = 2, 10%8 = 10 & 7. Stämmer antagligen inte på negativa tal...
Om man ska ha modulo på 8 tex 10%8 så blir der 10&7 man måste göra.
Eller va det något annat du menade, Icecap?
//Emil