Språkkonstruktion i MPASM
Språkkonstruktion i MPASM
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
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
Re: Språkkonstruktion i MPASM
Nej. Även om jag tycker att detta är kul:Ni som kör PIC, brukar ni använda den här typen av konstruktioner ?
http://www.ioccc.org/

Re: Språkkonstruktion i MPASM
> 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):
Notera att TRISIO3 är låst till "1" och inte behöver anges specifikt.
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
- Krille Krokodil
- Inlägg: 4062
- Blev medlem: 9 december 2005, 22:33:11
- Ort: Helsingborg
Re: Språkkonstruktion i MPASM
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).
Re: Språkkonstruktion i MPASM
Nej. Jag tycker att det är viktigare att koden är lätt att läsa.
Re: Språkkonstruktion i MPASM
Detta är dessutom i initieringsdelen och det finns ingen anledning
till "smart" programmering. Tydlighet är viktigast som AndersG sa.
till "smart" programmering. Tydlighet är viktigast som AndersG sa.
Re: Språkkonstruktion i MPASM
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.
#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.
Re: Språkkonstruktion i MPASM
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 :
Varför MOVLW över huvudtaget?
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
...
-
- Inlägg: 1409
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Språkkonstruktion i MPASM
Jo, det är jag med på, men varför använda den där?
Koden blir ju inte tydligare/klararde av det, IMHO.
Koden blir ju inte tydligare/klararde av det, IMHO.
Re: Språkkonstruktion i MPASM
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

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
-
- Inlägg: 1409
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Språkkonstruktion i MPASM
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

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

Re: Språkkonstruktion i MPASM
> 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...
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...
