Jämföra bytes i MPASM

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Jämföra bytes i MPASM

Inlägg 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
Senast redigerad av Bosen 9 november 2008, 17:32:49, redigerad totalt 1 gång.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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.
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Inlägg av Bosen »

2-komplement??
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg 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
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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.
Användarvisningsbild
korp
Inlägg: 1216
Blev medlem: 30 maj 2006, 02:21:18
Ort: Strömstad

Inlägg 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.
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Inlägg av Bosen »

Tack Korp!! Bättre kunde det ju inte bli!!!
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg 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.
Skriv svar