Langage machine

Architectures matérielles et systèmes d’exploitation

Plan

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.

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.
  • Bcondition étiquette: la condition peut être EQ:Equal to, NE:Not equal to, GT:Greater than, LT:Less than (je laisse en anglais!). 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 operande et Rn et place la réponse dans Rd
  • ORR Rd, Rn, opérande: effectue un OR (bits à bits !) entre operande et Rn et place la réponse dans Rd
  • EOR Rd, Rn, opérande: effectue un XOR (bits à bits !) entre operande et Rn et place la réponse dans Rd
  • MVN Rd, opérande: effectue un NOT (bits à bits !) sur operande 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: arret du programme
  • int Rd,2: attent 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.
  • 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
						
							

Exercices

  1. Que fait le code suivant? Placer le nombre de votre choix en mémoire 101
    
    	MOV R2,#100
    	LDR R3,101
    	ADD R2,R2,R3
    	LSL R3,R2,#1
    	HALT
    
    
  2. Ecrire la table de 7.
  3. Trouver la plus grande puissance de 2 inférieure à un nombre que l'on va entrer
  4. Trouver le quotient entier de deux nombres que l'on va entrer.

Android

De la programmation pour pc à la programmation pour téléphone.

A finir

Pas eu le temps de tout faire.....