Sida 1 av 1
[ASM] Modulo?
Postat: 8 maj 2007, 19:55:18
av Korken
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
Postat: 8 maj 2007, 20:03:01
av Icecap
Du behöver en divisionsrutin och sedan tar du restvärdet.
Postat: 8 maj 2007, 20:12:26
av Earendil
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).
Postat: 8 maj 2007, 20:19:17
av Korken
Tack för svaren!
Ska ta och skriva mig en modulo funktion då.
//Emil
Postat: 8 maj 2007, 20:34:22
av Korken
Eller, vänta nu!
Jag ska ju gör modulo på 8 helatiden.
Alltså kan jag göra med AND.
Hehe, nu vart det plötsligt inte så jobbigt.
Eller, jag ska dela med 8 och ha modulo på 8.
För att dela är det väll bara att shifta den 3 steg till höger eller tänker jag fel nu?
//Emil
Postat: 8 maj 2007, 20:50:33
av Earendil
Då får jag gratulera!
Helt rätt, skifta tre steg till höger för att dela med 8!
Postat: 9 maj 2007, 06:56:01
av Icecap
FEL! x MOD 8 => x AND 0x07
Postat: 9 maj 2007, 17:02:08
av Korken
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...
Jag tror det va så han skrev.
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
Postat: 9 maj 2007, 18:21:30
av Icecap
"Helt rätt, skifta tre steg till höger för att dela med 8!"
I sig rätt men vad har det men MOD att göra?
Ska man ta MOD 8 är det bara att AND'a med 0x07, jag har inte kollat men med negativa tal kan man bli tvungen att ta 2'dra kompliment först.
Postat: 9 maj 2007, 21:50:01
av Korken
Det har med att göra att jag ska ha ett tal som jag ska ha modulo 8 på och dela på 8.
//Emil
Postat: 9 maj 2007, 22:06:48
av Icecap
Ahhaaaa....... öhhhh ....... nå, nu ska jag sova! Gonatt
