Langage d’assemblage : I. Définition Langage qui permet de définir en détail chaque instruction d’un programme. L’assembleur, programme qui va traduire un programme en langage d’assemblage en programme en code machine (binaire) II. Langage d’assemblage μPIUP Une ligne par instruction o o o Label (étiquette) : symbole en début de ligne qui représente une adresse Mnémonique d’opération : indique l’opération effectuée par un mot assez court (ex : ADD, ADC, LDW, …) Opérandes : de 0 à 3 opérandes selon les instructions. Séparées par des virgules, certains sont sources, d’autres destinataires. Pour chaque opérande, on définit un mode d’adressage, un registre et/ou une constante. Label (étiquette) III. Mnémonique d’opération Opérande(s) // Commentaires Modes d’adressage. Ecriture des opérandes. Mode Registre Basé, indirect Immédiat Syntaxe Ri (Ri) Exemple R3 R3 #Constante #3 Direct @ adresse #0xF30A @0xF30A Valeur opérande Contenu R3 Contenu de la case mémoire dont l’adresse est dans R3 (pointé par R3) 3 qui est dans le mot d’extension de l’instruction (qui suit le code d’instruction) (F30A)16 hexadécimal Contenu de la case mémoire dont l’adresse est indiquée Adresse opérande - Contenu du PC, car il pointe sur le mot qui suit le code d’instruction 0xF30A = contenu du mot d’extension IV. Exemples d’instructions. ADD R2, R3, R1 NEG R4, R3 //Charge R1 avec la somme de R2 et R3 // charge R3 avec le complément à 2 (l’opposé) du contenu de R4 STC // met l’indicateur CF à 1 (SeT Carry) (mode direct) LDW R1, @0xFF04 (mode registre) LDW R1, R2 (mode immédiat) LDW R1, #3 (mode basé) LDW R1, (R2) Code Type 01 Byte 10 Word 11 Long word LDB R1, @0xFF03 LDB R1, (R2) // charge R1 avec le mot mémoire d’adresse FF04 // charge R1 sur le contenu de R2 // charge R1 avec la valeur constante 3 // charge R1 avec le contenu de la case mémoire pointée par R2 // charge l’octet d’adresse FF03 dans R1 // charge l’octet pointé par R2 dans R1 Attention : ces instructions sont impossibles : LDW R1, @OxFF03 LDB R1, R2 ADD R1, (R2), R3 // l’adresse est impaire or les mots sont à des adresses paires // les instructions en mode registre ne gèrent que des mots // ADD ne gère que le mode registre Groupe rapide : « Mode rapide ». La constante est codée en code complément à 2 dans l’octet droit du code d’instruction. LDQ 3, R2 ADQ 3, R2 // charge R2 avec 3 // ajoute 3 au registre de R2 Instructions de branchement relatif, court (et rapide) : BEQ 52 // branche à l’instruction cible dont l’adresse est PC # 52 (soit l’adresse de l’instruction courante + 2 + 52) L’opérande est l’instruction cible. Intérêt du mode d’adressage relatif : translatable et réglable Branchement relatif, long (et lent) : JEQ #52 // branche à l’instruction cible dont l’adresse est PC # 52. L’adresse de l’instruction cible est relative au PC et le déplacement est en mode immédiat. Branchement absolu : JEA @0xFF00 // branche sans condition à l’instruction cible dont l’adresse est FF00 (Jump to Effective Address) L’opérande est l’instruction cible.