[ASM] Modulo?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

[ASM] Modulo?

Inlägg 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
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Du behöver en divisionsrutin och sedan tar du restvärdet.
Användarvisningsbild
Earendil
EF Sponsor
Inlägg: 448
Blev medlem: 2 juni 2004, 09:06:43
Ort: Lund

Inlägg 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).
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

Tack för svaren!

Ska ta och skriva mig en modulo funktion då. :D

//Emil
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

Eller, vänta nu!
Jag ska ju gör modulo på 8 helatiden.
Alltså kan jag göra med AND. :D

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
Användarvisningsbild
Earendil
EF Sponsor
Inlägg: 448
Blev medlem: 2 juni 2004, 09:06:43
Ort: Lund

Inlägg av Earendil »

Då får jag gratulera! :D

Helt rätt, skifta tre steg till höger för att dela med 8!
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

FEL! x MOD 8 => x AND 0x07
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg 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
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg 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
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Ahhaaaa....... öhhhh ....... nå, nu ska jag sova! Gonatt :oops:
Skriv svar