Sida 1 av 1
Jämföra bytes i MPASM
Postat: 9 november 2008, 17:15:25
av Bosen
Hur gör man smidigast om man vill jämföra bytes i MPASM??
om man t.ex vill
1. Kolla om Byte1 är större än Byte2
2. Kolla om Byte1 är mindre än Byte2
3. Kolla om Byte1 är lika med Byte2
EDIT: 8bitars pic:s
Postat: 9 november 2008, 17:22:59
av Marta
I PIC18 finns det färdiga instruktioner för det. I PIC12/16 så är det subtrakton som gäller och sedan kolla statusflaggorna för zero/carry. För att kolla "=" så kan även xor användas.
Är det gränsvärden Du skall jämföra med och t.ex. ha en fönsterkomparator så kan det förenklas lite genom att använda 2-komplement.
Postat: 9 november 2008, 17:33:39
av Bosen
2-komplement??
Postat: 9 november 2008, 17:42:23
av Marta
Du adderar ett negativt tal och ser om registret slår runt och sedan ett till och ser om det slår runt då. På det sättet kan man konstatera om ett värde ligger inom ett område eller inte utan att hämta värdet en gång till. Kan spara både kodlängd och en byte ram för mellanlagring av ett framräknat värde i vissa fall och är det lågt i tak så kan det vara avgörande.
Fast är det inga sådana problem så varför krångla till det. Då är det bara till att använda subtraktion och kolla statusbitarna. Om det tar någon byte mer gör inte så mycket förutsatt att de finns.
Allt hänger på exakt vad Du skall göra och vad det är för osmidighet Du har nu och vill komma ifrån.
Jag är dålig på att förklara sådant här, men det finns på nätet. Titta lite bland exemplen på
piclist, där är en hel del att lära sig av.
Postat: 9 november 2008, 19:33:00
av victor_passe
MOVF Var1,W
SUBLW Var2,W
BTFSS STATUS,Z
GOTO A=B
MOVF Var1,W
SUBLW Var2,W
BTFSS STATUS,C
GOTO A>B
MOVF Var1,W
SUBLW Var2,W
BTFSC STATUS,C
GOTO A<B
Postat: 9 november 2008, 19:44:19
av Marta
Det där ser väldigt egendomligt ut. Först så är sublw att subtrahera w från ett immediate värde. Sedan så när man bara testar på carry så innefattas även = i det fall carry (eller rättare borrow) är satt.
Postat: 9 november 2008, 21:36:06
av korp
Bosen,
A Guide to Common PIC Assembly Programming Constructs (pdf) tycker jag är en rätt bra referens som bl a tar upp några metoder för vad du vill göra.
Postat: 10 november 2008, 15:02:45
av Bosen
Tack Korp!! Bättre kunde det ju inte bli!!!
Postat: 10 november 2008, 22:17:47
av victor_passe
Marta skrev:Det där ser väldigt egendomligt ut. Först så är sublw att subtrahera w från ett immediate värde. Sedan så när man bara testar på carry så innefattas även = i det fall carry (eller rättare borrow) är satt.
Jo, det är snarare för att se om en variabel är = mer eller mindre än en konstant.
Men man kan ju lätt göra så den jämför emot en variabel.
Och det var bara för att visa ungefär hur man kan göra.