Les menus déroulants :
  
    Choisisez une fonction avec les touches du
  curseur et validez avec ENTER ou F10.
    Utilisez Esc pour sortir d'un menu ou de 
  l'éditeur.

L'éditeur : 

    Pour obtenir une aide sur cet éditeur : F1;
    pour le quitter : F10 ou Esc.

L'assemblage :	peut être interrompu à tout
		moment en pressant les touches
		CTRL et break.
  
Description de la syntaxe :
  
    Tous les mnémoniques 8031/8051 Intel sont 
  disponibles en minuscules ou majuscules. Les
  lignes ne doivent pas être numérotés.
  
  Les labels : 
  
    Commencent par une lettre alphabétique ou
  par un blanc souligné (_) suivi
  d'un nombre quelconque de caractères
  alphanumériques ou de blancs soulignés.
    Ils peuvent aussi être suivis d'un caractère
  ':'. 
    Tous les caractères sont significatifs 
  et les majuscules et minuscules sont
  différenciées.
 
Les symboles prédéfinis de la famille MCS-51 :

Un certain nombre de symboles sont prédéfinis 
(adresses de ports ou registres de fonctions 
spéciales en RAM et accessibles uniquement en mode
d'adressage direct) et utilisables uniquement
en cas de mode d'adressage direct. 
Ces symboles ne peuvent être redéfinis et toute
tentative dans ce sens produira une erreur.  
Voici la liste complète de ces symboles et leurs
valeurs :  

Pour les 8031/51 : 
ACC = 0E0H, B    = 0F0H, DPH = 83H,  DPL = 82H,
IE  = 0A8H, IP   = 0B8H, P0  = 80H,  P1  = 90H,
P2  = 0A0H, P3   = 0B0H, PCON= 87H,  PSW = 0D0H,
SBUF= 99H,  SCON = 98H,  SP  = 81H,  TCON= 88H,
TH0 = 8CH,  TH1  = 8DH,  TL0 = 8AH,  TL1 = 8BH,
TMOD= 89H   

Pour les 8032/52 
(après une instruction MODEL 8032 ou 8052) : 
Tous les symboles des 8031/51 avec en supplément : 
RCAP2H  =  0CBH,  RCAP2L  =  0CAH, 
T2CON  =  0C8H,  TH2  =  0CDH,  TL2  =  CCH

Pour les 80154/83154 
(après une instruction MODEL 80154 ou 83154) : 
Tous les symboles des 8032/52 avec en supplément : 
IOCON  =  0F8H  

Pour les 80515/535 
(après une instruction MODEL 80515 ou 80535) 
Tous les symboles des 8032/52 
sauf IE, IP, RCAP2H et RCAP2L 
avec en supplément : 
ADCON = 0D8H, ADDAT = 0D9H, CCEN = 0C1H, CCH1 = 0C3H, 
CCH2  = 0C5H, CCH3  = 0C7H, CCL1 = 0C2H, CCL2 = 0C4H,
CCL3  = 0C6H, CRCH  = 0CBH, CRCL = 0CAH, DAPR = 0DAH,
IEN0  = 0A8H, IEN1  = 0B8H, IP0  = 0A9H, IP1  = 0B9H,
IRCON = 0C0H, P4    = 0E8H, P5   = 0F8H 

Pour les autres : doc en préparation...


Les expressions d'adresses de bits  : 

Les adresses de bits que l'on doit donner à 
certaines instructions peuvent être :  
- une expression numérique dont la valeur doit être 
comprise entre 0 et 127 (255 si pas de controle des
SFRs) ou encore une adresse d'un port ou d'un bit 
utilisateur F0 ou F1; 
c'est cette valeur qui sera prise telle quelle 
comme adresse de bit. 
- une expression donnant l'adresse directe de 
l'octet concerné (qui doit être adressable par bits 
et non incluse dans la zone des SFRs sauf si port 
ou si pas de controle des SFRs) ou le symbole d'un 
SFR suivi d'un point et d'une autre expression 
comprise entre 0 et 7 donnant le numéro du bit à 
adresser.
Exemple : pour adresser le bit numéro 5 du port P0 
donnez l'expression P0.5 
- un symbole d'un bit prédéfini; 
voici la liste des symboles de bits prédéfinis qui 
ne peuvent être utilisés que dans les expressions 
d'adresses de bits :   

Symboles d'adresses de bits utilisables sur les 8031/51 : 
IT0  =  88H,  IE0  =  89H,  IT1  =  8AH,  IE1  =  8BH,  
TR0  =  8CH,  TF0  =  8DH,  TR1  =  8EH,  TF1  =  8FH,
RI   =  98H,  TI   =  99H,  RB8  =  9AH,  TB8  =  9BH,
REN  =  9CH,  SM2  =  9DH,  SM1  =  9EH,  SM0  =  9FH,
EX0  =  0A8H, ET0  =  0A9H, EX1  =  0AAH, ET1  =  0ABH,
ES   =  0ACH, EA   =  0AFH, PX0  =  0B8H, PT0  =  0B9H,
PX1  =  0BAH, PT1  =  0BBH, PS   =  0BCH, P    =  0D0H,
F1   =  0D1H, OV   =  0D2H, RS0  =  0D3H, RS1  =  0D4H,
F0   =  0D5H, AC   =  0D6H, CY   =  0D7H

Et pour les 8032/52 
(après une instruction MODEL 8032 ou 8052) : 
comme les 8031/51 avec en supplément : 
ET2  =  0ADH, PT2  =  0BDH, CPRL2=  0C8H, CT2  =  0C9H, 
TR2  =  0CAH, EXEN2=  0CBH, TCLK =  0CCH, RCLK =  0CDH,
EXF2 =  0CEH, TF2  =  0CFH  

Pour les 80154/803154 
(après une instruction MODEL 80154 ou 83154) :  
comme les 8032/52 avec en supplément : 
PCT  =  0BFH, ALF  =  0F8H, P1HZ =  0F9H, P2HZ =  0FAH,
P3HZ =  0FBH, IZC  =  0FCH, SERR =  0FDH, T32  =  0FEH,
WDT  =  0FFH

Pour les 80515/535 
(après une instruction MODEL 80515 ou 80535) : 
comme pour les 8032/52 avec en supplément : 
WDT  =  0AEH, EAL  =  0AFH, EADC =  0B8H, EX2  =  0B9H,
EX3  =  0BAH, EX4  =  0BBH, EX5  =  0BCH, EX6  =  0BDH,
SWDT =  0BEH, IADC =  0C0H, IEX2 =  0C1H, IEX3 =  0C2H,
IEX4 =  0C3H, IEX5 =  0C4H, IEX6 =  0C5H, T2I0 =  0C8H,
T2I1 =  0C9H, T2CM =  0CAH, T2R0 =  0CBH, T2R1 =  0CCH,
I2FR =  0CDH, I3FR =  0CEH, T2PS =  0CFH, MX0  =  0D8H,
MX1  =  0D9H, MX2  =  0DAH, ADM  =  0DBH, BSY  =  0DCH,
CLK  =  0DEH, BD   =  0DFH 
et avec les modifications
EXEN2=  0BFH, TF2  =  0C6H, EXF2 =  0C7H 
et sans	EA, PX0, PT0, PX1, PT1, PS, PT2, CPRL2, 
	CT2, TR2, TCLK et RCLK.

Pour les autres : doc en préparation...

exemples : 
	
	mov	c, ov	; charge le bit overflow
			; dans la carry
	mov	P0.1,c	; charge le bit 1 de p0
			; avec la carry
	jnb	3, $	; boucle tant que le bit
			; dont l'adresse est 3
			; est à 0
	setb	20H.3	; met le bit 3 de 
			; l'adresse 20H à 1
     
  Les constantes :	
			
    nombres décimaux : 		12, 12d, 12D
    nombres hexadécimaux : 	12h, 12H, 0bH, 0Bh
    nombres binaires : 		1010b, 10101111B

    caractères ascii : 			'd'

  L'identificateur $ est égal à la valeur courante
  du PC c'est à dire l'adresse de l'instruction en
  cours. Pour changer sa valeur il faut utiliser
  la directive ORG (décrite plus loin).

  Les opérateurs :

  Par ordre de prioritée :	-, + (unaires)
  			        *, /, MOD, SHR, SHL
  			        +, -
  			        NOT
  			        AND
  			        OR, XOR
  			        LOW, HIGH
  
  Les expressions : peuvent être soit une
  		    constante, un label
  	(y compris $), une expression entre
  	parenthèse ou une combinaison d'expressions
  	et d'opérateurs. Toutes les adresses et
  	données figurant dans une instruction
  	sont en fait des expressions.

  Les directives d'assemblage ou
  pseudo-instructions :

ORG <expression> : Cette instruction initialise
  		   le compteur de programme
	(registre PC) à la valeur de l'expression
	qui la suit. Ne doit pas être précédé d'un
	label. Peut être utilisé autant de fois que
	nécessaire par le même programme. Par
	defaut,le PC est automatiquement initialisé
	à 0. La valeur de l'expression doit être 
	définie dès la première  passe.

<label>   EQU	<expression> : Cette directive
				donne une valeur 
	non modifiable par la suite à un label.
	La valeur de l'expression doit être définie
	dès la première passe.

[<label>] DEFB	<expression>[,...] ou bien
[<label>] DB	<expression>[,<expression>,...]
		initialise le contenu d'un ou
	plusieurs octets avec les données
	spécifiés.

[<label>] DEFS	<expression> ou bien
[<label>] DS	<expression> : 	incrémente le
				compteur de
	programme ou PC de la valeur de
	l'expression donnée, cela permet par
	exemple de reserver une zone mémoire pour
	le stockage de données. La valeur de 
	l'expression doit être définie dès la 
	première passe.
	
[<label>] DEFM	"<chaine>" ou bien
[<label>] DM	"<chaine>" : initialise le contenu
			     de la mémoire à
	l'adresse du compteur de programme avec
	les valeurs ascii des caractères de la
	chaîne donnée.

[<label>] END	: indique la fin du programme
		  à assembler (obligatoire sinon
	une erreur est déclenchée). Stoppe
	immédiatement l'assemblage;
	s'il y a du texte après cette directive,
	il sera ignoré.

[<label>] MODEL	31|32|51|52|053|054|154|410|451|
		515|528|535|550|552|562|592|652|
		654|751|752|851 : 
(le symbole | signifie ou bien) 
Indique à l'assembleur l'ensemble des symboles
d'adresses de registres de fonctions spéciales
(SFR) utilisables ainsi que les symboles d'adresses
de bits en fonction du microcontrôleur cible (liste
des symboles plus haut). Par défaut, le model actif 
est le 8031/51 au début de chaque assemblage.
Lors de l'adresse en mode direct d'un de ces
registres, aucun controle d'adresse n'est effectué
et c'est à l'utilisateur de s'assurer qu'il s'agit
d'une adresse valide en fonction du microcontroleur
cible. Important : notez que les registres de 
fonctions spéciales (SFR) sont accessibles 
uniquement en mode d'adressage direct.
En fait, il est préférable et plus logique
d'utiliser seulement une fois cette instruction en
début de programme.

[<label>] SFR	: active certains controles 
		  concernant les registres SFRs
situés dans la zone d'adresses directes 128 à 255.
Quand actif, les SFRs de cette zone ne peuvent
être accédés que par leurs symboles (sauf pour les
ports et les bits utilisateurs F0 et F1).

[<label>] NOSFR : désactive le controle des SFRs,
		  dans ce cas, on peut utiliser
n'importe quelle expression numérique pour
acceder en adressage direct à la zone des SFRs,
adresses 128 à 255.

#INCLUDE : SYNTAXE :

#INCLUDE<séparateur>"<nomdefichier>"[<remarque>]
Inclus un fichier dans le source. Cette directive 
ne doit pas se trouver dans un fichier déjà inclus. 
Ce fichier est chargé en mémoire uniquement le 
temps d'être assemblé. Cela permet en découpant un 
programme en plusieurs parties inclues d'assembler 
un programme de très grande taille sans pour cela 
augmenter la quantitée de mémoire utilisée.

	Assemblage conditionnel :

#IF : SYNTAXE : 

#IF <séparateur><expression test>
[<instructions>]
#ENDIF ou bien 

#IF<séparateur><expression test>
[<instructions>]
#ELSE
[<instructions>]
#ENDIF

où <expression test> peut être :
<expression> ou
<expression> EQ <expression>     
<expression> NE <expression>     
<expression> LT <expression>
<expression> LE <expression>
<expression> GT <expression>     
<expression> GE <expression>     

Si le résultat du test ou de l'expression est vrai 
ou différent de zéro alors les instructions qui 
suivent #IF seront assemblées sinon elles sont 
ignorées et seules les instructions suivant le 
#ELSE (s'il y en a un) seront assemblées.
Les directives #IF peuvent s'emboîter les unes dans 
les autres.
    
Commentaires :	Ils doivent être précédés d'un
		point-virgule.

Rappel des mnémoniques du 8031/8051 :

Rn	=	registre R0 à R7
Ri	=	registre R0 ou R1
dir	=	adresse directe (0..255)
bitdir	=	adresse de bit directe
data	=	donnée immédiate sur 8 bits
data16	=	donnée immédiate sur 16 bits
adrel	=	adresse relative ($ + -128..127)
adr	=	adresse quelconque
adr11	=	adresse dans la même page de 2Ko

ACALL	adr11
ADD	A, Rn
ADD	A, dir
ADD	A, @Ri
ADD	A, #data
ADDC	A, Rn
ADDC	A, dir
ADDC	A, @Ri
ADDC	A, #data
AJMP	adr11
ANL	A, Rn
ANL	A, dir
ANL	A, @Ri
ANL	A, #data
ANL	dir, A
ANL	dir, #data
ANL	C, bitdir
ANL	C, /bitdir
CJNE	A, dir, adrel
CJNE	A, #data, adrel
CJNE	Rn, #data, adrel
CJNE	@Ri,#data, adrel
CLR	A
CLR	C
CLR	bitdir
CPL	A
CPL	C
CPL	bitdir
DA	A
DEC	A
DEC	Rn
DEC	dir
DEC	@Ri
DIV	AB
DJNZ	Rn, adrel
DJNZ	dir, adrel
INC	A
INC	Rn
INC	dir
INC	@Ri
INC	DPTR
JB	bitdir, adrel
JBC	bitdir, adrel
JC	adrel
JMP	@A+DPTR
JNB	bitdir, adrel
JNC	adrel
JNZ	adrel
JZ	adrel
LCALL	adr
LJMP	adr
MOV	A, Rn
MOV	A, dir
MOV	A, @Ri
MOV	A, #data
MOV	Rn, A
MOV	Rn, dir
MOV	Rn, #data
MOV	dir, A
MOV	dir, Rn
MOV	dir, dir
MOV	dir, @Ri
MOV	dir, #data
MOV	@Ri, A
MOV	@Ri, dir
MOV	@Ri, #data
MOV	C, bitdir
MOV	bitdir, C
MOV	DPTR, #data16
MOV	A, @A+DPTR
MOVC	A, @A+PC
MOVX	A, @Ri
MOVX	A, @DPTR
MOVX	@Ri, A
MOVX	@DPTR, A
MUL	AB
NOP
ORL	A, Rn
ORL	A, dir
ORL	A, @Ri
ORL	A, #data
ORL	dir, A
ORL	dir, #data
ORL	C, bitdir
ORL	C, /bitdir
POP	dir
PUSH	dir
RET
RETI
RL	A
RLC	A
RR	A
RRC	A
SETB	C
SETB	bitdir
SJMP	adrel
SUBB	A, Rn
SUBB	A, dir
SUBB	A, @Ri
SUBB	A, #data
SWAP	A
XCH	A, Rn
XCH	A, dir
XCH	A, @Ri
XCHD	A, @Ri
XRL	A, Rn
XRL	A, dir
XRL	A, @Ri
XRL	A, #data
XRL	dir, A
XRL	dir, #data

	*** fin du texte d'aide ***