Språkkonstruktion i MPASM

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
jpalsson
Inlägg: 145
Blev medlem: 20 juli 2012, 13:14:41

Språkkonstruktion i MPASM

Inlägg av jpalsson »

Hej,

Efter ett 15 årigt upphåll från elektronik och assemblervärlden så känner jag
att det skulle vara lite kul att testa lite kopplingar igen, så jag har skaffat
en picprogrammerare och några kretsar.

Jag sitter och tittar i en Gooligum tutorial och undrar över en språkkonstruktion,
(Källa: http://www.gooligum.com.au/tutorials/mi ... id_A_1.pdf)

Det står:
movlw ~(1<<GP1) ;configure GP1 (only) as an output

Sedan, ett par rader ner säger man att man också kunnat skriva,

movlw b'111101'

Inte tycker jag att "~(1<<GP1)" bidrar till läsbarheten direkt..
Ni som kör PIC, brukar ni använda den här typen av konstruktioner ?


Mvh

/Johan
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9123
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Språkkonstruktion i MPASM

Inlägg av AndersG »

Ni som kör PIC, brukar ni använda den här typen av konstruktioner ?
Nej. Även om jag tycker att detta är kul:

http://www.ioccc.org/

:)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Språkkonstruktion i MPASM

Inlägg av sodjan »

> movlw ~(1<<GP1) ;

Jag tycker det där är en C'ism som inte hör hemma i ASM kod.
Även om det kanske fungerar så är det väldigt ovanligt i ASM.

> movlw b'111101'

Det är bättre men hade varit tydligare om man anger 8 bitar i värdet.
Alltså oavsett om den aktuella registret har 8 aktiva bitar.
Alltså : movlw b'00111101', då är det ingen tvekan.

Jag skulle antingen använda en binär parameter som i exempel ovan
eller för att göra koden riktigt tydlig (lite onödigt tydligt kanske):

Kod: Markera allt

   banksel   TRISIO
   bsf       TRISIO, TRISIO0
   bcf       TRISIO, TRISIO1
   bsf       TRISIO, TRISIO2
   bsf       TRISIO, TRISIO4
   bsf       TRISIO, TRISIO5
Notera att TRISIO3 är låst till "1" och inte behöver anges specifikt.
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Språkkonstruktion i MPASM

Inlägg av Krille Krokodil »

Förstår inte varför man ska hålla på och skifta i koden??? Det bör väl vara tydligare att definiera GP1 som 0b00000010 och sedan bara behöva skriva ~GP1 eller om man skall sätta fler portar som utgång ~(GP1 | GP4 | GP5).
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9123
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Språkkonstruktion i MPASM

Inlägg av AndersG »

Nej. Jag tycker att det är viktigare att koden är lätt att läsa.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Språkkonstruktion i MPASM

Inlägg av sodjan »

Detta är dessutom i initieringsdelen och det finns ingen anledning
till "smart" programmering. Tydlighet är viktigast som AndersG sa.
Användarvisningsbild
Icecap
Inlägg: 26651
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Språkkonstruktion i MPASM

Inlägg av Icecap »

Jag brukar definiera sådana saker i "klarspråk" i början:
#define LED_Red 0x02 ; Connected to GP1

Senare i programmet kan man sedan skriva:
movlw ~LED_Red ; Value to turn off red LED

Såklart kan man skriva:
#define LED_Red (1<<GP1) ; Connected to GP1
om man vill, det har ingen betydelse längre ner i programmet och man använde de redan definierade värden.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Språkkonstruktion i MPASM

Inlägg av sodjan »

Vad har "~" för funktion där?
Sen så talar du väl om GPIO, inte TRISIO ??

Det är ju lite andra avväganden (kodstorlek, prestanda o.s.v)
för kod inne "i main", så att säga, än i init-delen.

För att göra det som jag tror att du gör skulle jag skriva :

Kod: Markera allt

#define   LED_Red   GPIO, GP2
...
...
   bcf    LED_Red
...
Varför MOVLW över huvudtaget?
Mr Andersson
Inlägg: 1409
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Språkkonstruktion i MPASM

Inlägg av Mr Andersson »

~ är bit-invertering.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Språkkonstruktion i MPASM

Inlägg av sodjan »

Jo, det är jag med på, men varför använda den där?
Koden blir ju inte tydligare/klararde av det, IMHO.
jpalsson
Inlägg: 145
Blev medlem: 20 juli 2012, 13:14:41

Re: Språkkonstruktion i MPASM

Inlägg av jpalsson »

Hej och tack för alla svar :)

Men, då är jag ju inte fel ute då, jag blev då väldigt förbryllad
när jag såg "<<" i assemblerkod i den första "tutorial" jag öppnat om PIC
och tänkte för mig själv "det här blir en uppförsbacke..."
Nej, lättläst och enkelt ska det vara precis som de exempel ni givit.
(Och jag håller med Sodjan om att binära tal bör uttryckas i hela bytes)


Mvh

/Johan
Mr Andersson
Inlägg: 1409
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Språkkonstruktion i MPASM

Inlägg av Mr Andersson »

Jaha okej, ursäkta. Jag missuppfattade din fråga. :(
Jag håller med om att rena konstanter (eller defines) gör koden mera lättläst. Och dessutom är det förmodligen inte alla assemblers som klarar såna högnivåfunktioner.
Absolut inget fel i att använda såna funktioner i sin egen kod, men man borde nog inte göra det i en tutorial som OP nämnde. Om det nu inte råkar vara en tutorial på just högnivåfunktioner i så fall :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Språkkonstruktion i MPASM

Inlägg av sodjan »

> Nej, lättläst och enkelt ska det vara precis som de exempel ni givit.

Bra! :-)
Ditt första exempel var ju riktigt kasst med både "shift" och "invers"
operatorer i samma kommando enbart för att sätta en bit = "1"... :-)

Sen så lär ju backträning vara väldigt nyttigt, har jag hört. :-)

> Jaha okej, ursäkta. Jag missuppfattade din fråga.

Ja, det var ju nästa självmål från min sida, jag kunde ha varit
lite med specifik där... :-)
Skriv svar