Hur programmerar man smart i assembler?
Hur programmerar man smart i assembler?
Har programmerat en del i assembler nu, men skulle vilja ha lite allmänna tips på hur man skriver sin kod för att undvika att tappa bort sig, och hålla bra ordning på koden.
Har en del programmeringserfarenheter sedan tidigare av C++ och Java etc och i dessa språk är det betydligt lättare att hålla koll på sin kod. Dels pga att det är tex objektorienterat och att varje enskilt delprogram kan hållas isär från huvudprogrammet, men även pga att koden för att göra samma sak blir mycket längre i assembler. Nu sitter jag med ett 2000 rader långt assemblerprogram som är en enda lång textfil.
När jag hoppar mellan de olika subrutinerna i programmet använder jag för närvarande sökfunktionen. bara en sån sak kanske går att göra betydligt lättare.
Det jag önskar av er som har sysslat en hel del med assemblerprogrammering är väl främst era tips och erfarenheter om sånt som ni kommit på under tidens gång.
Har en del programmeringserfarenheter sedan tidigare av C++ och Java etc och i dessa språk är det betydligt lättare att hålla koll på sin kod. Dels pga att det är tex objektorienterat och att varje enskilt delprogram kan hållas isär från huvudprogrammet, men även pga att koden för att göra samma sak blir mycket längre i assembler. Nu sitter jag med ett 2000 rader långt assemblerprogram som är en enda lång textfil.
När jag hoppar mellan de olika subrutinerna i programmet använder jag för närvarande sökfunktionen. bara en sån sak kanske går att göra betydligt lättare.
Det jag önskar av er som har sysslat en hel del med assemblerprogrammering är väl främst era tips och erfarenheter om sånt som ni kommit på under tidens gång.
* Vettiga namn på labels, ska avslöja funktionen direkt. ("Send2LCD", "GetKey", "Execute_Communication" osv.)
* Varje funktion kommenterat ordentligt om funktion osv. behövs därmed inte alltid att vara rad-för-rad.
* Funktioner som är testade och färdiga kan man lägga i en fil som man inkluderar, ger mindre bläddrande.
Det är egentligen ingen skillnad oavsett vilket språk man använder, samma sätt ska gälla. Jag brukar göra så att om jag har en rutin som heter t.ex. "Send2LCD" använder jag "Send2LCD_xx" som labels "inuti" rutinen (xx ersätts av fortlöpande tal 01, 02, 03...) för att säkra mot felhopp vid att ha unika label-namn.
Lägger man sedan till lite "linjer" mellan funktioner som avskiljare blir det ganska lättläst och "segmenterat", man behöver inte undra över hur stor en funktion är.
* Varje funktion kommenterat ordentligt om funktion osv. behövs därmed inte alltid att vara rad-för-rad.
* Funktioner som är testade och färdiga kan man lägga i en fil som man inkluderar, ger mindre bläddrande.
Det är egentligen ingen skillnad oavsett vilket språk man använder, samma sätt ska gälla. Jag brukar göra så att om jag har en rutin som heter t.ex. "Send2LCD" använder jag "Send2LCD_xx" som labels "inuti" rutinen (xx ersätts av fortlöpande tal 01, 02, 03...) för att säkra mot felhopp vid att ha unika label-namn.
Lägger man sedan till lite "linjer" mellan funktioner som avskiljare blir det ganska lättläst och "segmenterat", man behöver inte undra över hur stor en funktion är.
Använda makron för "variabler" och liknande är ofta en vettig ide. Då slipper man hålla reda på vilka register som råkar vara "lediga" just då (har man makrodefinitionerna samlade så ser man direkt där vilka register som används till variabler och inte).
Konsekvens är bra också, alltid använda samma register för loopräknare, som slaskregister osv. (Precis som en C-kompilator oftast gör.)
Konsekvens är bra också, alltid använda samma register för loopräknare, som slaskregister osv. (Precis som en C-kompilator oftast gör.)
Att skriva objektorienterat är egentligen inte beroende av språket. Visst är det lättare att se saker i ett språk som stödjer det direkt, men det går utmärkt att skriva objektorienterat även i t.ex assembler. Använd rätt tänk bara och dela upp programmet på ett liknande sätt som man gjort i t.ex C++ med tänkta objekt och stödfunktioner (metoder) till dessa. Enligt min mening så får man en betydligt bättre överblick på detta sätt och det är lättare att få en snygg struktur på programmet. Dessutom ofta lättare att göra förändringar i dom oika delarna utan att påverka resten.
Det går ju även i assembler att dela upp olika funktioner i olika filer och sedan länka ihop dem.
Som tidigare nämnt så är bra kommentarer och beskrivningar av subrutiner viktigt, i synnerhet om koden är tänkt att återanvändas.
En bra editor är guld värd när man programmerar, kanske något som jag har uppskattat mer på senare år än när jag var ung och "bara" körde assembler.
Personligen är jag rätt så förtjust i Emacs. (Jag vet att en del anser att riktiga män anväder vi, men det kan jag bjuda på).
Som tidigare nämnt så är bra kommentarer och beskrivningar av subrutiner viktigt, i synnerhet om koden är tänkt att återanvändas.
En bra editor är guld värd när man programmerar, kanske något som jag har uppskattat mer på senare år än när jag var ung och "bara" körde assembler.
Personligen är jag rätt så förtjust i Emacs. (Jag vet att en del anser att riktiga män anväder vi, men det kan jag bjuda på).
Du kan studera Olin Lathrops utvecklingsmiljö ör assembler:
http://www.embedinc.com/pic/dload.htm
Kanske den mest "drivna" fria utvecklingsmiljön för assembler.
Deen inehåller många färdiga lösningar för FIFO buffrar m.m.
För övrigt håller jag med de andra. Det är inget speciellt med assembler.
- Modularisera (d.v.s dela upp koden i flera filer).
- Använd macron.
- Använd övriga assembler verktyg/direktiv så mycket det går.
Speciellt att dela upp projektet i flera asm-filer gör mycket för överblicken.
Att du ska köra relocatable är väl onödigt att säga, det är ju fullständigt
självklart...
http://www.embedinc.com/pic/dload.htm
Kanske den mest "drivna" fria utvecklingsmiljön för assembler.
Deen inehåller många färdiga lösningar för FIFO buffrar m.m.
För övrigt håller jag med de andra. Det är inget speciellt med assembler.
- Modularisera (d.v.s dela upp koden i flera filer).
- Använd macron.
- Använd övriga assembler verktyg/direktiv så mycket det går.
Speciellt att dela upp projektet i flera asm-filer gör mycket för överblicken.
Att du ska köra relocatable är väl onödigt att säga, det är ju fullständigt
självklart...