.section - szekció (.section) neve melyek a következők lehetnek:
.text - végrehajtható kódok,. Tulajdonsága : code
Pld.:
.text ; A programkódok területe
.section .nev_1, code, address(0x900) ; Forábban meg kell adni ha kódkezdetnél címet adunk meg: .section .strtab
cimke: ; Cimke megadása kettőspont lezárással
; Ide kerülnek a programkódok...
Megj.: Amennyiben meg akarjuk adni a ".global __reset" előtt (kezdő) programkódoknál a kezdetet, akkor a programfej részben még a ".global __reset" előtt be kell írni a ".section .strtab" utasítást.
Ha nem akarunk a kezdőkódoknak kezdőcímet adni a programmemóriába, nem szükséges a ".section .strtab " sor beírása a fej részbe.
A programkódokban minden objektumnak amelyek külön fájlban vannak, meg kell adni a feni utasításokat. Ezt példaprogrammal mutatom be: Link itt!
.data - adatmemória, amelynek az elhelyezkedésére az adatmemóriába kezdeti címet is megadhatunk. Tulajdonsága : data
Ezt példaprogrammal mutatom be: Link itt!
.bss - inicializálatlan adatmemória. Tulajdonsága : bss
Az iniciálatlan alatt azt értjük, hogy üres memóriaterületet jelöli ki az adatmemóriába a változók tárolására. Ha kezdőcímet adunk meg, akkor azt figyelmen kívül hagyja.
Ezt példaprogrammal mutatom be: Link itt!
.data
.section valtozokezdet_1, address(0x806)
elso: .byte 0x11,0x22,0x33,0x44 ; Ilyemkor 4 byte-ot foglal le, de az adatokat nem trszi be, csak a memóriaméret kiszámolására használje fel öket.
masodik: .word 0x1111,0x2222,0x3333 ; Ilyemkor 3 word-ot foglal le, de az adatokat nem trszi be, csak a memóriaméret kiszámolására használje fel öket.
harmadik: .word 0x1100,0x2200,0x3300 ; Ilyemkor 3 word-ot foglal le, de az adatokat nem trszi be, csak a memóriaméret kiszámolására használje fel öket.
; 3 word mindegyike 3 egymást követő páros memóriacímen érhető el
.bss
.global valtozo_bbs_1
; .section valtozo_bbs_1, address(0x830) ; HELYTELEN!, nem a megadott címre teszi, hanem nem lefoglalt területre, ezért címet nem adunk!
.bss ; üres helyre beékelődve fe külön memőriacímtől indulva.
bss_1: .space 4 ; Négy byte-ot foglal le, ami 2 word, vagyis 2x16 bit. Így két páros memóriacímen találhatók meg.
bss_2: .space 2
bss_3: .space 1
; Másik módszer:
Objeltumok létrehozása külön fájlban
Példapeogram:
.equ __24FJ256GA702, 1 ; A mikrokontroller azonosításának megadása
.include "p24FJ256GA702.inc" ; A mikrokontroller "inc" fájljának megadása
; Az inc fálj lehetséges elérhetősége: c:\Program Files (x86)\Microchip\xc16\v1.41\support\PIC24F\inc\
.equ hofok_r, 0x880 ; A memóriacímeh megadása, melyeket aztán változónévként kezelünk. Így nem kell globálissá tenni!
.extern hofok_rovid ; Megadjuk azt az objektunot vagy függvényt, ahonnan meghívható lehet ez az objektum, illetve függvény.
.global LM75A_rovidhofok ; Függvényünk globálissá tétele, hogy például a főprogramból meghívható legyen
.text ; Jelezzük a fordítónak, hogy programkódok következnek
.section .LM75A_rovidhofok, code; , address(0x900) ; A linkernek megadhatom, hogy a programmemóriábe hová helyezze el a
; lentebb megírt programkódokatp
LM75A_rovidhofok: ; Cimke megadása kettőspont lezárással
; Ide kerülnek a programkódok
.end ; Az objektum (egész oldal) lezárása, ami nem kötelező.
Példaprogram az adatmemória RAM-ba történő váltzozók elhelyezésére
; Az írható/olvasható adatmemória byte-os (8 bites) elrendezésű, így a word adatot két szomszédos címmel rendelkező memóriarészbe helyezi el. Páratlan címzéssel kezdve kiírja a debugger a cimkét. Byte (8 bites) típusú adatok esetén minden címre kerül adat, viszont csak a páratlan címen levő adatoknak a cimkéjét tudja csak kijelezni a debugger. A long típusnál értelemszerűen 4 bjt kell egy adat tárolására. A cimkéket minden tíbusnál csak a páratlan címen kezdődő adatoknál tudja csak a sebugger kijelezni!
.equ __24FJ256GA702, 1
.include "p24FJ256GA702.inc" ; c:\Program Files (x86)\Microchip\xc16\v1.41\support\PIC24F\inc\
.global __reset ; Ez kell és így kell!
.section .strtab ; .strab- végrehajtandó (szekció)Karakterláncok, Leggyakrabban a karakterláncok, amelyek a szimbólumtáblázat bejegyzéseivel társított neveket képviselik.
.section .strtab ; .section után kell a meghatzározás, mert máskülönben hibát generál
; .section .bss ; A változók RAM-ban (adatmemóriában) történő létrehozását jelzi
; RAM memóriába memőria lefoglalása
.section .data
szoveg: .ascii "Ring the bell\7";A string constant
valtozo_l_RAM: .byte 1
valtozo_2_RAM: .byte 2
valtozo_3_RAM: .byte 2
valtozo_4_RAM: .byte 2
valtozo_5_RAM: .byte 2
valtozo_6_RAM: .byte 2
;.skip 10 ; ebben az esetben 10 byte-ot átugrik és csak az után folytatódik az adatok helyfoglalása.
valtozo_7_RAM: .byte 1
valtozo_8_RAM: .byte 1
valtozo_9_RAM: .word 1 ; 1
valtozo_10_RAM: .word 1
long_valtozo_1: .long 1
long_valtozo_2: .long 1
.text ;Start of Code section
; #pragma config ALTI2C1 = ALTI2CEN ; SDA1 and SCL1 on RB9 and RB8
__reset:
programkezdet:
mov #0b10010001, W0 ; P24 Adatokat kérek a szolgától R/!W Adatküldés=0, adatkérés=1
mov W0, I2C1TRN ;P24
mov #123, W3
mov W3, valtozo_3_RAM
nop
nop
mov #0b10101010, W1 ;
bra $-2
nop
.end