Le fichier source est un fichier texte en code ASCII.
Créer avec un simple éditeur de texte, comme vi / vim ou gedit , kate .. etc
Un fichier asm est constitué de mots clés, on doit y distinguer les directives d'assemblage des opérations concernant le msp430g2553 appélées mnémoniques.
Les directives de compilation sont des mots clés, des instructions permettant de communiquer avec l'assembleur ici naken_asm , pour lui apprendre ou mettre notre code , comment et nous aider avec des étiquettes plutôt que de devoir calculer des adresses.
Commandes s'adressant au cross compilateur , ici naken_asm porté .. sur votre système , windows, linux , Os X.
(extrait de documentations de l'auteur de Naken , Mike Kohn’s ,https://www.mikekohn.net/)
Les DIRECTIVES :
All directives can start with a . or a #. The # was used for compatibility
with some include files.
CPU Selection:
.65xx 6502, 6510, and any other 6500 series cpu
.8051 or .8052 8051/8052/MCS-51
.arm All ARM CPU's
.dspic dsPIC
.mips MIPS including PIC32
.msp430 MSP430/MSP430X
.stm8 STM8
.tms1000 TMS1000/TMS1200/TMS1070/TMS1270
.tms1100 TMS1100/TMS1300
Assembler Directives:
.ascii <text> Insert ASCII chars at memory address
.asciiz <text> Same as .ascii but zero padded
.big_endian Store databytes in big endian format
.binfile "binarydata.bin" Read in binary file and insert at memory address
.db <data bytes> 8 bit data bytes
.define <macro> Define a C style #define macro
.dw <data words> 16 bit data bytes
.ds8 <data byte count> Reserve <count> bytes
.ds16 <data words count> Reserve <count> 16 bit words
.else <exression> Else for .if or .ifdef
.endif Close an .ifdef or .if
.endm End of macro definition
.if <exression> Evaluate an expression and assemble code if true
.ifdef <exression> If defined, can be used with .define
.ifndef <exression> If not defined, can be used with .define
.include "includefile.inc" Include a file of asm source code
.macro <name> (opt. params) Define a macro (should end with .endm
.org <address> Address where next assembled bytes are written to
Like other MSP430 assemblers, naken430asm accepts C style .define, .ifdef,
.if defined(). An example would be:
.define BLAH 50
.define SOMETHING
Alternatively, to help with compatibility with include files from other
assemblers .define and .include can be written as #define and #include:
#define BLAH 50
To test for a definition the following code works:
.ifdef SOMETHING
mov.w r1, r12
.else
mov.w r3, r12
.endif
.if defined(SOMETHING) && !defined(ANOTHER) && BLAH>50
mov.w @r12+, r3
.endif
Standard assembler syntax "equ" is also accepted too:
BLAH equ 50
Also .macro / .endm works like the following:
.macro BLAH
mov.w #5, r10
mov.w #6, r11
.endm
or also:
.macro BLAH(a,b)
mov.w #a, r10
mov.w #b, r11
.endm
Les étiquettes permettent de dire que l'assembleur est un langage .. entre autre !
Car elle nous permettent d'oublier la notion d'adresse et de valeur ..
etiquette : equ 10
pour une valeur , ou nous voulons que la valeur 10 corresponde à étiquette
ou
deb_prog : nop
nop
nop
les étiquettes sont en caractères gras ...
permet de définir que deb_prog correspond à l'adresse courante..
Les étiquettes se doivent d'utiliser un maximum des mots intelligents pour aider à la compréhension du programme , un bon codeur , fait ça naturellement !:), je dis cela car au début , on a tendance a se dire !! ça marche … et de s'en moquer ! Mais on regrette plus tard !
Plus en détail page :
Commande s'adressant à la cible , ici le msp430g2553
La syntaxe en asm est souvent la suivante :
Les étiquettes en bord d’écran , les directives et mnémonique tabulées (ou espaces)
Pour naken_asm , les étiquettes étant suivi de « : » la règle des espaces et tabulations n'est pas obligatoire. Le C Style !:)
Les directives commencent par un .
(détaillé page )
On peut constater que dans le fichier .hex les valeurs sont stockées en little Endian.
Le processeur contient 16 registres de 16-bits, dont 4 sont dédiés à des usages particuliers: R0 est le compteur de programme, R1 est le pointeur de pile, R2 est le registre d'état, et R3 est un registre spécial appelé le générateur de constante, fournit 6 valeurs constantes sans nécessiter un opérande supplémentaiLe langage assembleurre. R3 fournit toujours la valeur NULL en lecture et les écritures sont ignorées. L'utilisateur ne doit pas l'utiliser .
R4 à R15 sont disponibles pour une utilisation générale.
Le jeu d'instructions est très simple, il y a 27 instructions en trois familles. La plupart des instructions sont disponibles en B (octet de 8 bits) et W (16-bit du mot) suffixé versions, en fonction de la valeur d'un bit B / W. (B=1 , W=0 )
Le bit est mis à 1 pour les 8-bits et 0 pour 16 bits. Un suffixe manquant est équivalent à. W. Opérations d'octets dans la mémoire affectent uniquement l'octet adressé.