L'Assembleur



Je donne ici une explication très générale pour permettre au néophyte de comprendre les codes du cours sur les virus.Si vous souhaitez programmer en assembleur, je vous conseil de consulter d'autres zines plus complets.

1.Définition

L'assembleur est le langage le plus proche du langage machine.C'est pour cette raison qu'on le qualifie de langage de bas niveau.
Il est vrai que l'assembleur est un langage relativement difficile à aborder de part sa forme et ses instructions très éloignées de notre langage parlé. Toutefois, pour peu qu'on s'investisse un tant soit peu, on remarque très vite qu'il est basé sur une logique assez simple.

Ce cour d'initiation à l'assembleur est évidemment ici pour complèter le cours sur la programmation de virus, mais l'assembleur peut vous être utile dans de nombreuses autres applications, comme par exemple pour remplacer certaines lignes de code d'un autre langage de plus haut niveau dans un programme afin de rendre son éxécution plus rapide.De plus, l'assembleur étant plus proche du langage machine, il vous permetra plus tard d'effectuer des opérations difficilement applicables avec les autres langages.
Pour être à l'haise avec ce langage, il peut vous être utile d'être bien renseigné sur le DOSet son fonctionnement.
Maintenant, on y va.

2.Notion de registre.

Leur connaissance et leur utilisation est indispensable dans l'assembleur. Ce que vous verrez ici est une approche simplifiée des registres.

Vous pouvez considérer les registres comme des tiroirs dans lesquels vous pouvez ranger des valeurs, des variables.Comme vous pouvez avoir un tiroir pour vos chausettes, vous aurez un registre pour un certain type de valeurs.Ces registres sont divisés en deux : La partie haute H et la partie basse L.
Voici les principaux registres :

-ax :Comprenant ah + al.C'est le registre des entrées/Sorties et des opérations mathématiques.
-bx :Comprenant bh + bl.C'est le registre utilisé comme pointeur.
-cx :Comprenant ch + cl.On l'utilise beaucoup pour les loops.
-bx :Comprenant dh + dl.Il est très semblable à bx.

Le fait de diviser les registres en deux est une notion importante. En gros lorsque vous aurez une valeur du type 1B5C à stocker dans ax, ah contiendra 1B et al contiendra 5C. Il faut savoir que les registres sont de 16 bits, et qu'ils stockent donc des nombres compris de 0 à 65535 ou -32768 à 32768.

Il existe égalament d'autres registres : Les registres de segment. J'y consacrerai une partie complète un peu plus tard car leur utilisation peu s'avérer difficile et risquée.
Contentez vous pour le moment de les considérer comme des subdivisions de la mémoire dans lesquelles sont stockées différentes informations comme le code ( registre CS), les données ( registres DS et ES ),les adresses des sous routines à appeler ( registre SS ).

Enfin, vous trouverez les registres d'index et les pointeurs:
-SI, l'index source qui est souvent utilisé avec DS pour des instructions de déplacement de bloc.C'est un pointeur interne au segment.
-DI, l'index de destination qui est utilisé comme pointeur interne à ES.

Je pense que vous cernez à peu près ce qu'est un registre maintenant.Cette approche reste très vague et très générale, mais elle est suffisante pour le moment.

3.Les instructions

-mov Opérande 1, Opérande 2 :
ex : mov ax,10h.
mov permet de placer ou de déplacer le contenu de opérande 2 dans opérande1 .On peut l'utiliser avec adresses, des registres ou des valeurs. Dans cet exemple, on place la valeur 10h dans ax.

-int valeur :
ex : int 21h.
Cette instruction génère une interuption.Dans cet exemple, nous appelons le DOS.Toutefois, une interruption comprend plusieurs fonctions que l'on définit dans ah et al.

-jmp adresse :
ex : jmp 0B20h.
Saut inconditionnel.Cette instruction renvoie à l'adresse 0B20h.Toutefois, il existe une trentaine de sauts.

-CALL procédure :
ex : CALL ROUT1
Cette instruction appelle une procédure, une routine.

-jc adresse :
Saut en cas de transport.Renvoie à l'adresse spécifiée si CF = 1.

RET :
Marque la fin d'une sous routine.Renvoie au programme principal .

-xchg opérande 1, opérande 2 :
Echange les valeurs des 2 opérandes.

-xor opérande 1, opérande 2 :
OU exclusif entre les deux opérandes.

-db 'Chaine ascii' :
Declare Byte. Déclaration d'une chaine de caractère.

Voilà. Je n'ai mis ici que les instructions qui figurent dans les codes sources de la partie Virus.Les autres instructions viendrons plus tard.

Bye.