- le langage machine ;
- les langages assembleurs ;
- les langages de haut niveau.
Sommaire du chapitre :
- A - Les catégories de langages
- B - L'assembleur 80x86
A - Les catégories de langages
1 - Langage machine
Le langage machine est celui qui est directement compréhensible par le processeur. Ce dernier ne comprend que les 0 et les 1. Les opérations simples deviennent d'énormes suites de 0 et de 1 incompréhensibles.
Voici ci-dessous le code permettant de calculer 2 + 2. La première ligne permet de mettre dans AX, un des registres du processeur, la valeur 2. Nous verrons en détail par la suite ce que c'est, considérons pour l'instant qu'il s'agit d'une variable qui prend dans ce cas la valeur 2. Ensuite la deuxième ligne permet d'y ajouter 2, représenté par 00000010 en binaire (que nous apprendrons à manipuler par la suite).
Code Machine | |
1 2 | 10111000 00000010 00000000 00000101 00000010 00000000 |
Vous conviendrez rapidement que ce langage est fastidieux et qu'il présente de nombreux risques d'erreurs. Les programmeurs possédaient une liste à laquelle ils se référaient pour ajouter au code les instructions voulues, en reportant le code binaire de cette dernière.
C'est en 1950 qu'est arrivée l'idée de remplacer ces instructions en binaire par des mots mnémotechniques plus faciles à manier, du type :
Code Assembleur | |
1 | MOV AX, 2 |
Permettant simplement de déplacer 2 dans le registre AX. MOV remplace ici : 10111000, beaucoup plus simple à utiliser. Par contre ce type de programme, non compréhensible directement par le processeur exige une étape de traduction en langage machine par un interpréteur pour être compris par le processeur. Il faut savoir qu'il existe différents types de processeurs qui impliquent différents langages machine, donc différents langages assembleurs.
Celui que nous allons étudier est celui qui est lié au processeur 80x86, qui est apparu en 1978. Ce langage est aussi compréhensible par les versions plus récentes de processeur, tels que les processeurs 80186 et 80188.
Ces langages possèdent tout d'abord un avantage particulier, en effet ils sont compatibles avec de nombreux ordinateurs, par le biais d'interpréteurs adaptés aux différents processeurs, contrairement aux langages assembleurs, de portabilité très restreinte. Ils sont de plus en plus faciles à utiliser et à comprendre. Nombre de ces langages proposent des fonctions très simples comme : printf("..."); en C ou encore : PRINT "..." en Basic permettant simplement d'afficher une chaîne de caractères. Une telle instruction est représentée en assembleur par :
Code Assembleur : Afficher une chaine de caractère | |
1 2 3 4 5 6 | msg DB "..." ; Définit la chaîne de caractères à afficher MOV DX, offset msg ; Précise l'emplacement de la chaîne de caractères MOV AH, 9 ; Appelle la 9ème sous-fonction INT 21h ; De l'interruption 21h(hexadécimal) du DOS |
Ne vous inquiétez pas il est normal de ne pas comprendre, nous verrons tout cela plus tard.
Ce code se traduit en langage machine par :
Code Machine : Afficher une chaine de caractère | |
1 2 3 4 5 | 11101011 00000100 00101110 00101110 00101110 00100100 10111010 00000010 00000000 10110100 00001001 11001101 00100001 |
Ceci représente simplement une traduction littérale du code en assembleur ci-dessus, compréhensible par le processeur. Vous constaterez donc que les langages évolués constituent un véritable "racourci" par rapport aux langages assembleurs.
B - L'assembleur 80x86
Ce langage est constitué de différents éléments faisant sa puissance :
- un groupe d'instructions ;
- différentes interruptions ;
- et les registres du processeur.
1 - Les instructions
Le processeur comprend une petite série d'instructions simples, à elles seules incapables de former un programme complet :
- Calculs basiques, additions, soustractions, multiplications, divisions, incrémentations(+1), décrémentations(-1)...
- Comparaisons entre deux nombres
- Manipulations de caractères, chaînes de caractères
- Et autres...
2 - Les interruptions
L'ordinateur met à notre service les interruptions. Ce sont des fonctions telles qu'afficher un pixel, un caractère, envoyer des données à un des périphériques (USB, imprimante...). Il y'a deux groupes d'interruptions :
Les interruptions sont définies par des nombres hexadécimaux, que nous verrons plus tard. Le "h" à la fin des numéros repaire un nombre hexadécimal.
Interruptions | |
---|---|
01h à 09h | Interruptions matérielles générées par les différentes cartes d'extensions et circuits auxiliaires d'un PC |
10h à 20h | Interruptions du BIOS : un ensemble de fonctions, contenues dans la mémoire morte (ROM) de la carte mère servant à faire des opérations basiques (écrire un caractère à l'écran, lire un secteur sur un disque, etc...) |
21h à 27h | Interruptions que le DOS, présent dans les PC, met à la disposition des programmes lors de leurs fonctionnement (appelé DOS API : Interface de Programmation d'Application). DOS met à notre disposition de nombreuses interruptions. |
Les autres | Après on trouve des interruptions plus spécialisées comme par exemple l'interruption 33h qui contient les Fonctions Gestionnaires de souris ... |
Nous verrons le fonctionnement de ces interruptions plus en détail par la suite.
Le processeur contient de nombreux registres. Ce sont en quelque sorte des cases pouvant contenir un nombre. Ils ont plusieurs utilités. Ils peuvent servir à faire des opérations simplement, mais aussi à informer sur le déroulement d'un programme (emplacement du code, instructions en cours...), d'un calcul (retenu, plus grand que...). Voici les différents types de registres (nous les verrons plus en détail par la suite) :
Type | Exemples | |
---|---|---|
Les registres généraux | AX, BX, CX, DX | Ils servent pour faire des opérations(AX, BX, DX), définir un nombre de boucles (CX) le cas échéant. Ils servent aussi à indiquer les attributs pour les interruptions |
Registres de segment et d'offset | CS, DS, ES, FS, GS, SS... | Ils indiquent l'emplacement du code, de la pile, des données... A l'aide du segment sur lesquels ils se trouvent et des offsets (ce que nous expliquerons plus tard) |
Les registres FLAG | AF, CF, DR, IF, OF, PF, SF... | Ils indiquent les informations suite à un calcul, ou une comparaison |
Aucun commentaire:
Enregistrer un commentaire