MPLAB assembler: Lyckas inte "reservera" ett word.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MPLAB assembler: Lyckas inte "reservera" ett word.

Inlägg av sodjan »

> PIC-kretsar har inte någon barrel shifter,

Fel.

> Visserligen kan man använda instruktionen som byter plats på nibbles för att snabbt shifta 4 steg,

Det blir en rotates, inte shifts.

> > En generell motod för att göra vadå ?
> Lösa problemet som presenterades i den första posten, såklart...

Nej, den har redan presenterats, ADFM=0 och enbart läsa ADRESH.
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Re: MPLAB assembler: Lyckas inte "reservera" ett word.

Inlägg av stekern »

>> > En generell motod för att göra vadå ?
>> Lösa problemet som presenterades i den första posten, såklart...

>Nej, den har redan presenterats, ADFM=0 och enbart läsa ADRESH.

Vad hakar du upp dig på?
Metoden jag presenterade löser också problemet, och mer generellt om det inte skulle råka röra sig om något som råkar gå att vänsterjustera.
En annan generell metod har visats av Icecap och bearing (rotera genom carry).
Ingen av lösningarna utesluter väl den andra?

bearing:
Jo, det är sant att det kanske inte är den mest effektiva metoden för just den där processorn.
Senast redigerad av stekern 24 oktober 2010, 14:47:57, redigerad totalt 1 gång.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: MPLAB assembler: Lyckas inte "reservera" ett word.

Inlägg av bearing »

Rättning: PIC16-kretsar har inte någon barrel shifter.
Det blir en rotates, inte shifts.
Det krävs så klart även att den ena nibblen nollas genom t.ex andlw 0xF0 för att det ska motsvara skiftning 4 steg.
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: MPLAB assembler: Lyckas inte "reservera" ett word.

Inlägg av JimmyAndersson »

sodjan skrev:Korrekt, "RES 2" allokerar 2 st 8-bitars variabler... :-)

Dock ligger de alltid tillsammans så det är enkelt att t.ex göra
"my_array RES 20" för att få en 20 positionerns array/lista/buffert
som sedan kan loopas igenom med indexregistren eller liknande.
Startadressen till arraynen är då "my_array".

> Om du shifter LSB'n först och sedan MSB'n får du det så.

Exakt, och det är ju just därför som C-flaggan alls är med i shiften.
Då förstår jag.

Tack för hjälpen och alla tips. :tumupp:
Skriv svar