<?xml version="1.0" encoding="iso-8859-1" ?>
<rss version="0.92">
	<channel>
    <title>cours-assembleur</title>
    <link>http://cours-assembleur.blog2geek.com</link>
    <description>Blog specialise; geek et geek attitude.</description>
    <language>fr-FR</language><item>
        <title>simulation de microprocesseur MIPSprocesseur</title>
        <link>http://cours-assembleur.blog2geek.com/simulation-de-microprocesseur-mipsprocesseur-656.html</link>
        <description>Pour tout comprendre sur les processeurs, découvrez notre émulateur :

The aim of this project is to develop a computer application capable of simulating a RISC processor&amp;#39;s behavior and showing each step of execution of an instruction among a reduced subset. The components represented are : the memory, the datapath and its control unit. The processor we have chosen is a simplified MIPS-R2000-like processor.
The program is written in C++ using the GTK+ library and should therefore work on every platform for which a distribution of this library exists.

http://koyoteproject.free.fr/</description>
		<pubDate>Wed, 14 Mar 2007 19:08:00 GMT</pubDate>
      </item><item>
        <title>émulateur de processeur</title>
        <link>http://cours-assembleur.blog2geek.com/emulateur-de-processeur-654.html</link>
        <description>
Pour tout comprendre sur les processeurs, découvrez notre émulateur :

The aim of this project is to develop a computer application capable of simulating a RISC processor&amp;#39;s behavior and showing each step of execution of an instruction among a reduced subset. The components represented are : the memory, the datapath and its control unit. The processor we have chosen is a simplified MIPS-R2000-like processor.
The program is written in C++ using the GTK+ library and should therefore work on every platform for which a distribution of this library exists.

http://processor.emulator.free.fr/ 
</description>
		<pubDate>Mon, 12 Mar 2007 23:14:00 GMT</pubDate>
      </item><item>
        <title>[ASM]Les instructions</title>
        <link>http://cours-assembleur.blog2geek.com/asmles-instructions-605.html</link>
        <description>A quoi ressemble une instruction ?

L&amp;#39;instruction est l&amp;#39;élément clé de l&amp;#39;ordinateur car c&amp;#39;est elle qui permet de spécifier au processeur l&amp;#39;action à effectuer. Toutes les instructions sont stockées en mémoire et un compteur dans le processeur permet de passer de l&amp;#39;une à l&amp;#39;autre. 
Une instruction est composée de deux éléments : 


	le code opération : action à effectuer par le processeur 
	le champ opérande : donnée ou bien adresse de la case mémoire contenant une donnée 


La taille d&amp;#39;une instruction dépend de l&amp;#39;instruction et de l&amp;#39;opérande, elle est généralement de quelques octets (1 à 8). La taille des instructions dépend également de l&amp;#39;architecture du processeur. Elle peut ainsi atteindre 4 octets dans le cas de processeurs 32 bits, voire 8 octets pour les processeurs x86 64 bits. L&amp;#39;octet est l&amp;#39;unité qui est utilisée généralement car elle est pratique pour le stockage de certaines données (notamment les caractères). 



	
		
			code opération
			champ opérande
		
	



Les types d&amp;#39;instructions

L&amp;#39;ensemble des instructions est appelé jeu d&amp;#39;instruction. On peut les répartir selon plusieurs catégories selon le type d&amp;#39;action que son exécution déclenche. 

Instructions d&amp;#39;affectation

Les instructions d&amp;#39;affectation permettent de faire des transferts de données entre les registres et la mémoire, c&amp;#39;est-à-dire : 


	soit une écriture (du registre vers la mémoire) 
	soit une lecture (de la mémoire vers un registre) 


Instructions arithmétiques et logiques

Ces instructions portent sur le registre AX (l&amp;#39;accumulateur). Elles permettent d&amp;#39;effectuer une opération entre le registre AX et une donnée puis stocker le résultat dans AX. Ces instructions sont : 


	l&amp;#39;addition : AX = AX + donnée 
	la soustraction : AX = AX - donnée 
	l&amp;#39;incrémentation : AX = AX + 1 
	la décrémentation : AX = AX - 1 
	le décalage à gauche 
	le décalage à droite 


Instructions de comparaison

Permet de comparer le registre AX à une donnée. Le résultat de la comparaison est indiqué grâce à... des indicateurs... 
Ces instructions (ainsi que les instructions de branchement) sont nécessaires pour permettre une « interactivité », c&amp;#39;est-à-dire qu&amp;#39;en fonction de certains paramètres le programme va pouvoir avoir divers comportements. Sans ces indicateurs les programmes auraient un comportement déterminé et le programme ferait constamment les mêmes actions (comme un film...). 

Instructions de branchement

Ce type d&amp;#39;instruction permet de sauter à une instruction non consécutive à l&amp;#39;instruction en cours. En l&amp;#39;absence de ce type d&amp;#39;instruction le processeur passe automatiquement à l&amp;#39;instruction suivante (c&amp;#39;est-à-dire l&amp;#39;instruction contiguë (en mémoire) à l&amp;#39;instruction en cours). C&amp;#39;est le registre IP qui repère l&amp;#39;instruction suivante à exécuter. Les instructions de branchement permettent donc de modifier la valeur de ce registre et ainsi de choisir la prochaine instruction à exécuter. 


On distingue deux sortes de branchements : 


	Les branchements conditionnels : en fonction d&amp;#39;une condition à satisfaire le processeur traitera le branchement indiqué ou l&amp;#39;instruction suivante. 
	
		condition satisfaite : exécution de l&amp;#39;instruction située à l&amp;#39;adresse indiquée 
		condition non satisfaite : exécution de l&amp;#39;instruction suivante 
	
	Les branchements conditionnels sont très utiles, notamment pour créer des boucles ou des structures conditionnelles. 
	Les branchements inconditionnels : on affecte une valeur définie au registre IP, c&amp;#39;est-à-dire que l&amp;#39;on ira exécuter l&amp;#39;instruction vers laquelle il pointe après celle en cours quoi qu&amp;#39;il arrive ! 



Ce document intitulé « L&amp;#39;assembleur - Instructions » issu de l&amp;#39;encyclopédie informatique Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.


;-) : http://www.spoonylife.com/
</description>
		<pubDate>Tue, 13 Feb 2007 10:22:00 GMT</pubDate>
      </item><item>
        <title>[ASM]Compilation</title>
        <link>http://cours-assembleur.blog2geek.com/asmcompilation-597.html</link>
        <description>
La compilation du programme 


Le programme doit être saisi dans un fichier texte non formaté (c&amp;#39;est-à-dire sans caractères en gras, souligné, avec des polices de caractères de différentes tailles, ...) appelé fichier source. En effet, l&amp;#39;assembleur (le programme permettant de faire la traduction du langage assembleur en langage machine) permet uniquement de créer un fichier assemblé à partir du fichier source (il devra comporter l&amp;#39;extension .ASM, en s&amp;#39;appelant par exemple source.asm ou n&amp;#39;importe quel autre nom suivi de l&amp;#39;extension .asm). 


L&amp;#39;assembleur va fournir un fichier objet (dont l&amp;#39;extension est .obj) qui va contenir l&amp;#39;ensemble des instructions traduites en instructions machines. Ce fichier .OBJ ne pourra toutefois pas s&amp;#39;exécuter directement car il faut encore lier les différents fichiers. 
Comment ça les différents fichiers ? 
En effet il est possible de construire un exécutable à partir de plusieurs fichiers sources (à partir d&amp;#39;un certain niveau de programmation il devient intéressant de créer des fichiers contenant des fonctions...). Ainsi, même si vous avez un seul fichier objet il vous faudra utiliser un programme (appelé éditeur de liens) qui va vous permettre de créer un fichier exécutable (dont l&amp;#39;extension sera « .exe »). 


 Note d&amp;#39;un visiteur : 

Les fichiers de sortie ne sont pas obligatoirement des fichiers object, ni même un exécutable ! 
Il est en effet possible de générer un fichier binaire ne comportant que la traduction exacte du fichier source. Ce fichier binaire pourra par exemple être utilisé comme programme d&amp;#39;amorçage (boot) d&amp;#39;un ordinateur lorsqu&amp;#39;il sera placé sur le secteur d&amp;#39;amorçage (MBR) d&amp;#39;une disquette ou d&amp;#39;un disque dur. 

A quoi ressemble un fichier source en assembleur ? 

Comme dans tout programme le fichier source doit être saisi de manière rigoureuse. Chaque définition et chaque instruction doivent ainsi s&amp;#39;écrire sur une nouvelle ligne (pour que l&amp;#39;assembleur puisse différencier les différentes intructions). Le fichier source contient : 


	Des définitions de données déclarées par des directives (mots spéciaux interprétés par l&amp;#39;assembleur, nous les étudierons plus tard, le but est ici de donner une idée de ce à quoi ressemble un fichier source). Celles-ci sont regroupées dans le segment de données délimité par les directives SEGMENT et ENDS 
	Puis sont placées les instructions (qui sont en quelque sorte le coeur du programme), la première devant être précédée d&amp;#39;une étiquette, c&amp;#39;est-à-dire par un nom qu&amp;#39;on lui donne. Celles-ci sont regroupées dans le segment d&amp;#39;instructions délimité par les directives SEGMENT et ENDS 
	Enfin le fichier doit être terminé par la directive END suivi du nom de l&amp;#39;étiquette de la première instruction (pour permettre au compilateur de connaître la première instruction à exécuter 
	(Les points-virgules marquent le début des commentaires, c&amp;#39;est-à-dire que tous les caractères situés à droite d&amp;#39;un point-virgule seront ignorés) 


Voici à quoi ressemble un fichier source (fichier .ASM) : 


donnees   	SEGMENT; voici le segment de données dont l&amp;#39;étiquette est donnees	;Placez ici les déclarations de donnéesdonnees 	ENDS; ici se termine le segment de donnéesASSUME DS:donnee, CS: instrinstr	SEGMENT; voici le segment d&amp;#39;instructions dont l&amp;#39;étiquette est instr	debut : ;placez ici votre première instruction (son étiquette est nommée debut) ;Placez ici vos instructionsinstr	ENDS; fin du segment d&amp;#39;instructionsEND debut; fin du programme suivie de l&amp;#39;étiquette de la première instruction

La declaration d&amp;#39;un segment 

Comme nous le verrons plus loin, les données sont regroupées dans une zone de la mémoire appelée segment de données, tandis que les instructions se situent dans un segment d&amp;#39;instructions. 


Le registre DS (Data Segment) contient le segment de données, tandis que le registre CS (Code Segment) contient le segment d&amp;#39;instructions. C&amp;#39;est la directive ASSUME qui permet d&amp;#39;indiquer à l&amp;#39;assembleur où se situe le segment de données et le segment de code. 
Puis il s&amp;#39;agit d&amp;#39;initialiser le segment de données : 


 


MOV AX, nom_du_segment_de_donneesMOV DS, AX



Ce document intitulé « L&amp;#39;assembleur - Fichier source et compilation » issu de l&amp;#39;encyclopédie informatique Comment Ça Marche (http://www.commentcamarche.net/) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement. 







</description>
		<pubDate>Thu, 08 Feb 2007 19:46:00 GMT</pubDate>
      </item><item>
        <title>[asm]Présentation</title>
        <link>http://cours-assembleur.blog2geek.com/asmpresentation-583.html</link>
        <description>
   L&amp;#39;assembleur - Introduction Les prérequis nécessaires 


Le langage assembleur est très proche du langage machine (c&amp;#39;est-à-dire le langage qu&amp;#39;utilise l&amp;#39;ordinateur : des informations en binaire, soit des 0 et des 1). Il dépend donc fortement du type de processeur. Ainsi il n&amp;#39;existe pas un langage assembleur, mais un langage assembleur par type de processeur. Il est donc nécessaire de connaître un minimum le fonctionnement d&amp;#39;un processeur pour pouvoir aborder cette partie. Un processeur réel a toutefois trop de registres et d&amp;#39;instructions pour pouvoir les étudier en détail. C&amp;#39;est pour cette raison que seuls les registres et les instructions d&amp;#39;un processeur simple (Intel 80x86 16 bits) seront étudiés dans ce dossier. 

Le processeur en bref... 

Un processeur est relié à la mémoire par l&amp;#39;intermédiaire d&amp;#39;une liaison appelée bus. Les données dont le processeur a besoin sont stockées dans ce que l&amp;#39;on appelle des registres (ils sont notés AX, BX, CX, DX, ...). Chacun a sa propre utilité  : 


Nom du registreTaille Accumulateur AX 16 bits Registre auxiliaire de base BX 16 bits Registre auxiliaire (compteur) CX 16 bits Registre auxiliaire de données DX 16 bits Pointeur d&amp;#39;instruction IP 16 bits Index de source SI 16 bits Index de destination DI 16 bits Registre segment de code CS 16 bits Registre segment de données DS 16 bits Registre segment de pile SS 16 bits Registre segment supplémentaire ES 16 bits Pointeur de pile SP 16 bits Pointeur de base BP 16 bits 


Les registres AX, BX, CX et DX sont les registres les plus utilisés pour les calculs : 


	Le registre AX sert à effectuer des calculs arithmétiques ou à envoyer un paramètre à une interruption 
	Le registre BX sert à effectuer des calculs arithmétiques ou bien des calculs sur les adresses 
	Le registre CX sert généralement comme compteur dans des boucles 
	Le registre DX sert à stocker des données destinées à des fonctions 


Il s&amp;#39;agit là de l&amp;#39;utilisation de base de ces registres, mais dans la pratique ils peuvent être utilisés à d&amp;#39;autres fins. 


Les registres AX, BX, CX et DX peuvent être utilisés par bloc d&amp;#39;un octet (8 bits), la lettre X de leur nom est alors remplacée par L (comme Low pour désigner les bits de poids faible) et H (pour High afin de désigner les bits de poids fort). De plus, dans les architectures x86 32 bits, ces registres ont été étendus à 32 et ont vu leur nom précédé d&amp;#39;un E (pour Extended, en français « étendu »). 


EAX (32 bits)   AX (16 bits)   AH (8 bits) AL (8 bits) 

Pourquoi utiliser l&amp;#39;assembleur ? 

Pour faire exécuter une suite d&amp;#39;instructions au processeur, il faut lui fournir des données binaires (souvent représentées en notation hexadécimale pour plus de lisibilité, mais cela revient au même...). Or, les fonctions en notation hexadécimale sont difficiles à retenir, c&amp;#39;est pourquoi le langage assembleur a été mis au point. Il permet de noter les instructions avec des noms explicites suivis de paramètres. 


Voici par exemple à quoi peut ressembler un programme en langage machine : 
A1 01 10 03 06 01 12 A3 01 14 


Il s&amp;#39;agit de la représentation hexadécimale d&amp;#39;un programme permettant d&amp;#39;additionner les valeurs de deux cases mémoire et de stocker le résultat dans une troisième case. Il est évident que ce type d&amp;#39;écriture est difficilement lisible par nous, humains. 


Ainsi, puisque toutes les instructions que le processeur peut effectuer sont chacune associées à une valeur binaire, on utilise une notation symbolique sous forme textuelle qui correspond à chaque fonction, c&amp;#39;est ce que l&amp;#39;on appelle le langage assembleur. Dans l&amp;#39;exemple précédent la séquence A1 01 10 signifie copier le contenu de la mémoire à l&amp;#39;adresse 0110h dans le registre AX du processeur. Cela se note en langage assembleur : 
MOV AX, [0110] 


Toutes les instructions ont une notation symbolique associée (fournie par le fabricant du processeur). L&amp;#39;utilisation du langage assembleur consiste donc à écrire sous forme symbolique la succession d&amp;#39;instructions (précédées de leur adresse pour pouvoir repérer les instructions et passer facilement de l&amp;#39;une à l&amp;#39;autre). Ces instructions sont stockées dans un fichier texte (le fichier source) qui, grâce à un programme spécifique (appelé « l&amp;#39;assembleur ») sera traduit en langage machine. 


Le programme précédent écrit en langage assembleur donnerait : 


Adresse de l&amp;#39;instructionInstruction en langage machineInstruction en langage assembleurCommentaires sur l&amp;#39;instruction 0100 A1 01 10 MOV AX, [0110] Copier le contenu de 0110 dans le registre AX 0103 03 06 01 12 ADD AX, [0112] Ajouter le contenu de 0112 à AX et mettre le résultat dans AX 0107 A3 01 14 MOV [0114], AX Stocker AX à l&amp;#39;adresse mémoire 0114 


L&amp;#39;écriture en langage assembleur, bien que restant rebutante, est beaucoup plus compréhensible pour un humain, car on a généralement les noms sont plus faciles à retenir que les nombres. 


Ce document intitulé « L&amp;#39;assembleur - Introduction » issu de l&amp;#39;encyclopédie informatique Comment Ça Marche (http://www.commentcamarche.net/) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement. 

</description>
		<pubDate>Tue, 06 Feb 2007 21:50:00 GMT</pubDate>
      </item><item>
        <title>Introduction</title>
        <link>http://cours-assembleur.blog2geek.com/introduction-579.html</link>
        <description>
Le langage assembleur ou langage d&amp;#39;assemblage, dit aussi assembleur ou abrégé ASM, est le langage de programmetion  lisible pour un humain le plus proche du langage machine utilisé par le microprocesseur de la machine. Le langage machine est une combinaison de bits, il est rendu lisible en remplaçant les valeurs brutes par des symboles appelés mnémoniques (du grec mnêmonikos, relatif à la mémoire) simples et plus faciles à retenir. 


Par exemple, alors qu&amp;#39;un processeur de la famille x86 reconnaîtra ce que l&amp;#39;instruction machine 


 10110000 01100001


signifie, pour le programmeur c&amp;#39;est plus simple de se souvenir de son équivalent en langage assembleur : 


 mov %al,$0x61


(cela signifie de mettre la valeur hexadécimale 61 (97 en décimal) dans la partie de registree &amp;#39;AL&amp;#39;.) 


Contrairement à un langage de haut niveauu, il y a une correspondance un à un entre le code assembleur et le langage machine, ainsi il est possible de traduire le code dans les deux sens sans perdre d&amp;#39;information. La transformation du code assembleur en langage machine est accomplie par un programme nommé assembleurr, dans l&amp;#39;autre sens par un programme désassembleurr. Les opérations s&amp;#39;appellent respectivement assemblage et désassemblage. Dans un programme réel en assembleur, c&amp;#39;est un peu plus complexe que cela (on peut donner des noms aux routines, aux variables), et on n&amp;#39;a plus cette correspondance. Sur les premiers ordinateurs, la tâche d&amp;#39;assemblage était accomplie manuellement par le programmeur. 


Chaque architecture d&amp;#39;ordinateurss a son propre langage machine, et donc son propre langage d&amp;#39;assemblage (l&amp;#39;exemple ci-dessus est pour le x866). Ces différents langages diffèrent par le nombre et le type d&amp;#39;opérations qu&amp;#39;ils ont à supporter. Ils peuvent avoir des tailles et des nombres de registres différents, et différentes représentations de type de données en mémoire. Tous les ordinateurs sont capables de faire les mêmes choses, ils peuvent les faire de manières différentes. 


De plus, plusieurs groupes de mnémoniques ou de syntaxes de langage assembleur peuvent exister pour un seul ensemble d&amp;#39;instructions.

Lire la suite : http://fr.wikipedia.org/wiki/Assembleur 
</description>
		<pubDate>Mon, 05 Feb 2007 14:18:00 GMT</pubDate>
      </item>		</channel>
</rss> 
