Utasítások a fordítónak és a linkernek

 

.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