Trebuie remarcat faptul că, chiar și atunci când nu ne gândim la segmentele, două segmente ale programului este: segment de cod și date de segment. Dacă te uiți atent la program, veți găsi că, în plus față de codurile de comandă constante sunt stocate în memoria de program, adică, în memoria programului microcontroler are cel puțin două segmente: software și date. Alternanța programului și constantelor poate duce la consecințe nedorite. Din cauza orice motiv, datele pot fi executate în mod accidental ca un program invers program sau vice pot fi primite și procesate ca date.
Figura 1. partiție de memorie de program și de memorie de date segmente.
Motivele menționate mai sus conduc la faptul că este de dorit să identifice în mod explicit cel puțin patru segmente:
segmente de memorie absolute
Pentru a determina absolute segmentele de memorie utilizate de directivă:
Figura 3. Exemplu de utilizare Directiva CSEG pentru a plasa o rutina de întrerupere de servicii.
Roaming segmente de memorie
Directiva segment permite să specificați numele segmentului și zona de memorie care va găzdui segmentul de memorie. Pentru fiecare cuvânt cheie de memorie Locul de amplasare specificat:
În acest exemplu buferKlav șir declarat, format din opt variabile octet. În plus, în acest exemplu, variabila este declarată VershSteka, care corespunde ultima locație de memorie, care este utilizat pentru a stoca variabile. Variabila VershSteka poate fi folosit pentru inițializare pointer stivă pentru a aloca un teanc de cantitatea maximă utilizabilă de celule de memorie internă. Acest lucru este necesar pentru a evita o depășire de stivă atunci când apelați subrutine imbricate.
Exemplu segmentelor mobile în programul sursă prezentată în Figura 8.
Figura 8. Exemplu directivelor de segment și rseg într-un modul software
Acest exemplu arată partea inițială a programului a miezului microcontroler, care a făcut tranziția cu celule de memorie de programare la zero. Folosind o astfel de structură de program face posibilă în orice moment, de a utiliza oricare dintre vectorii de întrerupere disponibile într-un anumit microcontroler pentru care este scris programul, dacă este necesar. Plasarea unei definiții a acestui vector folosind directiva CSEG.
În exemplul folosit numele _code segmentului mobil. A fost introdusa pe prima linie de cod sursă. Denumirea specifică a segmentului de roaming poate fi orice, dar după cum am menționat anterior, aceasta ar trebui să reflecte problema să fie rezolvată prin acest modul particular.
Împreună cu articolul „Utilizarea segmentelor de programare în limbaj de asamblare“, se spune: