|
|
SECONDE - PC
PREMIERE PC
SCIENCES PREMIERE
SCIENCES TERMINALE
ANCIENNES TS
CONCOURS
|
Langage machine
Qu'est ce? Le processeur fonctionne avec des micros-instructions que nous étudierons en terminale. Ces micros instructions qui décrivent chacune une étape du cycle du processeur permettent de créer le langage de programmation le plus proche du processeur: l'assembleur. Ce langage placé en mémoire morte de l'ordinateur ne contient pas beaucoup d'instructions mais permet de faire fonctionner le bios puis tout le système d'exploitation.
Chaque instruction du langage assembleur est stockée à une adresse mémoire et se décompose en 2 parties: le code de l'opération qui donne l'opération à exécuter et une adresse pour l'opérande (son argument). Par exemple "add X" additionne le contenu de la mémoire X au contenu debug de l'accumulateur. Dans la machine virtuelle que nous allons utiliser, comme il y a plusieurs registres, il y aura souvent un opérande de plus pour préciser le registre utilisé. Cette machine virtuelle est sur 32 bits, ce qui permet des commandes qui choisissent le registre. Les instructions Nous allons utiliser le simulateur d'assembleur de Peter Higginson: http://www.peterhigginson.co.uk/AQA/.
Cette machine virtuelle simule une architecture de 32 bits. L'instruction Halt n'existe pas en pratique. Voici la liste des instructions: - LDR Rd, adresse mémoire: charge la valeur de l'adresse dans le registre Rd. Exemple ldr R0, 100 charge le contenu de l'adresse 100 dans le registre 0. Important, si on écrit ldr r0, [r1]: c'est le contenu du registre r1 qui donne l'adresse à lire et à placer en r0. La première solution c'est l'adressage direct, la seconde l'adressage indirect.
- STR Rd, adresse mémoire: place le contenu du registre Rd à l'adresse mémoire. - ADD Rd, Rn, opérande: additionne opérande et Rn et place le résultat dans Rd. Opérande peut être un nombre (précédé de dièse) ou la valeur d'un registre Rm. - SUB Rd, Rn, operand2: idem mais soustraction. - MOV Rd, operand2: copie la valeur de opérande dans Rd. - CMP Rn, operand2: effectue la comparaison entre Rn et l'opérande. Attention, cette instruction ne traite pas le résultat de la comparaison! C'est le rôle de la commande suivante. - B condition étiquette: la condition peut être EQ:Equal to, NE:Not equal to, GT:Greater than, LT:Less than. L'étiquette est un nom que nous choisissons pour savoir où sauter si la condition est réalisée. Par exemple cmp R1,R0, puis BEQ suite va faire: "si R0=R1" aller à la ligne suite. Remarquez que si l'égalité n'est pas vraie...on passe automatiquement à la ligne de code suivante. Pour indiquer ou est la ligne suite, on tape sur une ligne vide suite suivi de :. Soit suite:. - B étiquette: saut sans condition à la ligne nommée étiquette. - AND Rd, Rn, opérande: effectue un AND (bits à bits !) entre opérande et Rn et place la réponse dans Rd. - ORR Rd, Rn, opérande: effectue un OR (bits à bits !) entre opérande et Rn et place la réponse dans Rd. - EOR Rd, Rn, opérande: effectue un XOR (bits à bits !) entre opérande et Rn et place la réponse dans Rd. - MVN Rd, opérande: effectue un NOT (bits à bits !) sur opérande et place la réponse dans Rd. - LSL Rd, Rn, operand2: déplace les bits de Rn de 'opérande' bits vers la gauche et stocke dans Rd (multiplication par 2, souvenez vous!). - LSR Rd, Rn, operand2: déplace les bits de Rn de 'opérande' bits vers la droite et stocke dans Rd (division par 2!). - HALT: arrêt du programme. - int Rd,2: attend un nombre en entrée. - out Rd, nombre: affiche à l'écran. out Rd,4 affiche un nombre signé ou non(Rd,5). Rd,6 affiche en hexadécimal et Rd,7 affiche un caractère. Remarque: Pour saisir un hexadécimal taper suivant le modèle 0xnnn Exemples Commençons par un exemple très simple proposé dans logiciel. L'utilisateur va entrer deux nombres, et le programme va afficher leur somme.
INP R0,2
INP R1,2 ADD R2,R1,R0 OUT R2,4 HALT Voici un code plus complexe et commenté. Il sert à chercher le maximum d'un tableau de nombres. Vous devrez taper à l'adresse 180 l'adresse du début du tableau. Le tableau est considéré comme fini dès qu'il y a un zéro. Les commentaires sont précédés de / ldr R0,180 /l'adresse 180 contient le début du tableau
mov R1,#1 /place 1 dans R1, sert à incrémenter l'index ldr r2,188 /en r2 je stocke la valeur de fin de liste ldr r10,[r0] /r10 sera le registre de lecture ldr r11, [r0] /r11 le registre contenant le max debut: /debut tant que cmp r10,r2 beq fin /si on est fin de liste, aller à fin add r0,r1,r0 /on incrémente l'index cmp r10,r11 blt pasnewmax /si r10>r11 on mov r11,r10 /met r10 dans r11 pasnewmax: /fin si, reprise code ldr r10, [r0] /chargement valeur suivante b debut /fin tant que fin: out r11,4 /affiche max liste halt
Date de création : 07/03/2021 16:02
Dernière modification : 07/03/2021 16:02 Catégorie : INFORMATIQUE - Architecture Page lue 2582 fois |
SECONDE - SNT
SCIENCES & LABO
COURS DU SUPERIEUR
KHOLLES MPSI
AUTRES SITES
|