Sam86 | |
Sortir du Manuel | 1. Sam86 / 2. Sam86 et les autres / 3. Le langage / 4. Ligne de commande / 5. Contact |
3.1 Syntaxelabel: instruction ; Commentaire
Vous pouvez mettre un, deux ou les trois éléments dans les combinaisons de votre choix mais obligatoirement dans cet ordre. L'instruction est ici au sens large, cela peut être une instruction assembleur, une déclaration, une directive, un appel de macro etc...
3.2 Décimal, héxadécimal, binaire et caractère
Par défaut les nombres sont considérés comme étant en base 10.
Les nombres en héxadécimal doivent commencer par un caractère entre 0 et 9. Si ce n'est pas le cas, il faut le préfixer avec un 0.
3.3 Variable et labelLes noms peuvent être composés de lettres, de chiffres, d'un '_' ou d'un '@', mais il ne doivent pas commencer par un chiffre. Sam86 n'est pas sensible à la casse. Les labels ne doivent être le nom d'un registre, d'une instruction assembleur ou un mot réservé du langage. (Résultat aleatoire.)
Un label est une référence (un emplacement dans le code) que vous pourrez utilisez pour faire un saut, une affectation, etc... Un label doit être suivi de ':'. Pour utiliser un label ou une variable, les crochets sont facultatifs. La directive OFFSET permet de mettre en immédiate l'adresse d'une référence.
3.4 Variable avec DB, DW, DD, DSD et DID3.4.1 DB = Define ByteRéserve un ou plusieurs octets en y associant éventuellement une étiquette. Avec DB vous pouvez mettre un entier 8 bits ou une chaine de caractère.
Faîtes bien la différence entre :
Dans le deuxième cas, abc n'est pas une variable mais un label placé juste avant une réservation sans étiquette. 3.4.2 DW = Define WordAvec DW vous pouvez mettre entier 16 bits. 3.4.3 DD = Define Double wordAvec DD vous pouvez mettre un entier 32 bits. 3.4.4 Contrôle de dimension
Un contrôle de dimension est effectué à l'utilisation des variables (par exemple : affectation de AX (16 bits)dans var1 (8 bits) => Attention).
Pour le forçage, utilisez byte, word et dword.
Vous pouvez ne pas afficher les warnings en utilisant les options silencieuses. (cf ligne de commande) 3.4.5 DSD = Define Segment Descriptor3.4.6 DID = Define Interrupt Descriptor
3.5 La directive EQUAvec EQU vous pouvez créer des équivalents syntaxiques, ou en d'autre terme, une constante.
Cette directive peut vous éviter d'avoir à modifer 2 fois "5" en "7", le jour où vous voudrez modifier Avec EQU vous pouvez créer des équivalents syntaxiques, ou en d'autre terme, une constante.
3.6 Les macrosUn macro est un outil purement syntaxique qui peut vous éviter d'avoir à recopier plusieurs fois la même suite d'instructionis. par exemple beep MACRO N mov cx, N @@: mov ax, 0E07h ; Fonction 0Eh, Caractère 7 (Bip) int 10h loop @b ; Saut vers label anonyme précédent ENDM debut: beep 2 ; Un programme très original ;) nop beep 3 ret
3.7 Inclure un fichier3.7.1 INCLUDE, inclure un fichier sourceinclude source.asm
INCLUDE ou %INCLUDE vous permet d'insérer à l'endroit de la directives un autre fichier source. (par exemple des bibliothèques de fonctions). Notez bien: le fichier est un texte source. 3.7.2 INCBIN, inclure un fichier binaireincbin image.dat
INCBIN ou %INCBIN vous permet d'insérer un fichier binaire dans votre exécutable (par exemple une police ou une image au format brut). Notez bien: le fichier est un binaire. 3.7.3 INCRLE, inclure en compressant un fichier binaireincrle image.bin
INCRLE fonctionne comme incbin sauf que le fichier est compressé en RLE. (par exemple pour stocker le noyau dans un loader). Notez bien: le fichier est un binaire. L'algorithme de décompression est schématisé ci-dessous. ![]() ; Code (libre) proposé pour décompresser ; un fichier intégré avec INCRLE par Sam86 ; Il n'est pas optimisé. noyau: incrle noyau.bin debut: cld ; pour stosb mov esi, offset noyau ; Source mov edi, 100000h ; Destination : premier Mo boucle: mov al, [esi] inc esi cmp al, 0FEh je joker ecritS: mov [edi], al ; Écriture Simple inc edi jmp boucle joker: xor ecx, ecx mov cl, [esi] inc esi test cl, cl jz ecritS cmp cl, 1 je fin btr cx, 7 jnc ecritM shl cx, 8 mov cl, [esi] inc esi ecritM: mov al, [esi] ; Écriture Multiple inc esi rep stosb jmp boucle fin:
3.8 La directive ORG
org 7C00h ; Pour écrire un secteur d'amorce par exemple
|