PIC18F2550 Assembly kommando "BRA"

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
emilrowland
Inlägg: 145
Blev medlem: 20 april 2011, 19:14:44
Ort: Gnesta

PIC18F2550 Assembly kommando "BRA"

Inlägg av emilrowland »

Hej jag undrar om någon här har koll på hur minnesaddreseringen sker på PIC18F2550 i program minnet när PC(Program Counter) Är ett negativt värde.
För när man använder kommandot BRA så verkar det som enligt databladet för PIC18F2550 att PC kan få ett negativt värde, men vart pekar den då i program minnet?
Så här står det i databladet:
BRA n
-1024 <= n <= 1023
PC + 2 + 2n -> PC
Där 2n är tvåkomplements numret n.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: PIC18F2550 Assembly kommando "BRA"

Inlägg av sodjan »

Vilken sida/kapitel/stycke syftar du på?
PC kan aldrig vara negativ...
Senast redigerad av sodjan 23 april 2016, 14:27:33, redigerad totalt 1 gång.
emilrowland
Inlägg: 145
Blev medlem: 20 april 2011, 19:14:44
Ort: Gnesta

Re: PIC18F2550 Assembly kommando "BRA"

Inlägg av emilrowland »

Sidan 321 (märkt sidan 319) Vilket inehåller förklaringen på kommandot BRA.
Castor
Inlägg: 1985
Blev medlem: 24 mars 2012, 13:03:49

Re: PIC18F2550 Assembly kommando "BRA"

Inlägg av Castor »

Rimligen menas att n kan vara positiv eller negativ, du kan alltså hoppa framåt eller bakåt, dvs öka eller minska PC.
Dock inom gränserna som anges även om minnet i sig är större.
emilrowland
Inlägg: 145
Blev medlem: 20 april 2011, 19:14:44
Ort: Gnesta

Re: PIC18F2550 Assembly kommando "BRA"

Inlägg av emilrowland »

Castor skrev:Rimligen menas att n kan vara positiv eller negativ, du kan alltså hoppa framåt eller bakåt, dvs öka eller minska PC.
Dock inom gränserna som anges även om minnet i sig är större.
Så om PC skulle bli negativ så bör man sätta den till 0?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: PIC18F2550 Assembly kommando "BRA"

Inlägg av sodjan »

PC kan aldrig bli negativ (skrev jag inte det?).
Däremot kan den "slå över" och man bör väl programmera
så att det undviks. Varför är det ett problem? Vid en BRA
till en label i koden så kan det ju aldrig inträffa.
Castor
Inlägg: 1985
Blev medlem: 24 mars 2012, 13:03:49

Re: PIC18F2550 Assembly kommando "BRA"

Inlägg av Castor »

Nu förutsätter jag vissa saker: Du skriver assembler och vill göra BRA (branch=hopp?) ? Då vill du fortsätta där rutinen XYZ finns, då räknar assemblern (när du kör den) ut skillnaden mellan nuvarande PC och adressen XYZ och lägger det som en offset (som kan vara positiv eller negativ) efter koden för BRA. När koden sedan exekveras adderas offseten till PC och PC ersätts med det nya värdet (hopp framåt eller bakåt) och programmet fortsätter därifrån.
Jag kör andra processorer än PIC så om detta är fel får någon PIC-guru rätta.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: PIC18F2550 Assembly kommando "BRA"

Inlägg av sodjan »

Korrekt. Men labeln du hoppar till kan ju inte ligga "under" koden
så att argumentet till BRA skulle kunna peka längre "tillbaka"
än vad det faktiskt finns tillgänglig kod. *All* kod ligger så klart
på positiva adresser.

Kanske bättre om Emil beskrivet ett faktiskt fall där detta är ett problem.

Rent tekniskt kan man ha en BRA på en låg adress med ett argument
som är större (och negativt) än den egna adressen. Detta skulle få
PC att "slå runt" till en hög adress. Sedan början den läsa instruktion
0x000, vilket av processorn tolkas som NOP och den stegar då bara
fram till adress "noll" och startar i princip om. Men detta är ju inget
som händer i praktiken...
Castor
Inlägg: 1985
Blev medlem: 24 mars 2012, 13:03:49

Re: PIC18F2550 Assembly kommando "BRA"

Inlägg av Castor »

Nu hoppas vi att Emil lägger ihop all info och skriver ett fungerande program, eller analyserar ett befintligt och förstår vad som händer.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: PIC18F2550 Assembly kommando "BRA"

Inlägg av sodjan »

Se också (samma datablad):
5.1 Program Memory Organization
PIC18 microcontrollers implement a 21-bit program
counter which is capable of addressing a 2-Mbyte
program memory space. Accessing a location between
the upper boundary of the physically implemented
memory and the 2-Mbyte address will return all ‘0’s (a
NOP instruction).
Skriv svar