Support de cours apprendre l’assembleur (INTEL)

PREMIERE PARTIE NOTIONS DE BASE SUR LE FONCTIONNEMENT DE L’ORDINATEUR

I. L’ARITHMETIQUE SIGNEE
On appelle arithmétique non signée l’arithmétique dans laquelle tous les entiers sont  positifs. En arithmétique signée au contraire, les nombres peuvent être soit positifs, soit  négatifs. Un nombre signé n’est donc pas forcément négatif.
Les données informatiques se présentent sous la forme d’une succession de chiffres binaires, les bits. Nous supposerons que les systèmes de numération binaire et hexadécimal vous sont  déjà familiers.
Il est en revanche fort possible que vous ne connaissiez pas la façon dont un ordinateur représente les nombres négatifs. Il existe deux conventions : la notation en signe et valeur absolue et la notation en complément à 2.
La première est extrêmement simple: le premier bit représente le signe, et les autres bits la valeur absolue du nombre. Le bit de signe vaut 1 si le nombre est strictement négatif, 0 sinon. Par exemple, le nombre (–14) codé sur 8 bits s’écrit ainsi :10001110

LA MEMOIRE VIVE

1. La segmentation de la mémoire
Votre PC est conçu pour gérer 1 Mo (soit 2 20  octets) de mémoire vive en mode réel. Il  faut donc 20 bits au minimum pour adresser toute la mémoire. Or en mode réel les bus  d’adresses n’ont que 16 bits. Ils permettent donc d’adresser 216  = 65536 octets = 64 Ko, ce qui  est insuffisant !
Afin de pallier ce manque, on utilise deux nombres pour adresser un octet quelconque de la  RAM. Le premier est appelé adresse de segment, le second adresse d’offset. Ils seront stockés  séparément.
La mémoire est ainsi découpée en segments de 64 Ko chacun. Un segment est donc en  quelque sorte un gros bloc de mémoire auquel on peut accéder grâce à une adresse de  segment qui désigne son numéro. Par exemple, le premier segment est le segment 0000 (en hexa), le deuxième est le 0001, le quarante-deuxième est le 0029, etc… Chaque numéro est  codé sur 16 bits, c’est-à-dire 4 chiffres hexa.
Pour accéder à un octet particulier dans un segment, il suffit de compter le décalage de cet  octet par rapport au début du segment. Ce décalage est obligatoirement inférieur ou égal à  65535 : il tient bien sur 16 bits lui aussi. On appelle ce décalage « offset ».
L’adresse d’un octet se note XXXX:YYYY où XXXX est l’adresse de segment et YYYY est  l’offset (tous deux en notation hexadécimale, bien sûr).

2. Structure d’un programme en mémoire
Lorsque l’utilisateur exécute un programme, celui-ci est d’abord chargé en mémoire par  le système. Le DOS distingue deux modèles de programmes exécutables : les fichiers COM et  les fichiers EXE.
La différence fondamentale est que les programmes COM ne peuvent pas utiliser plus d’un segment dans la mémoire. Leur taille est ainsi limitée à 64 Ko. Les programmes EXE ne sont  quant à eux limités que par la mémoire disponible dans l’ordinateur.

LIRE AUSSI :  Le langage assembleur instructions arithmétiques et logiques

a) les fichiers COM
Lorsqu’il charge un fichier COM, le DOS lui alloue toute la mémoire disponible. Si celle-ci est insuffisante, il le signale à l’utilisateur par un message et annule toute la procédure  d’exécution. Dans le cas contraire, il crée le PSP du programme au début du bloc de mémoire réservé, et copie le programme à charger à la suite.

b) les fichiers EXE
« Pour un fichier EXE, tout est toujours un peu plus compliqué. »
(Devise du programmeur débutant en assembleur)  Bien qu’il soit possible de n’utiliser qu’un seul segment à tout faire, la plupart des programmes EXE ont un segment réservé au code(c’est ainsi qu’on appelle les instructions du  langage machine), un ou deux autres aux données, et un dernier à la pile.
La pile est une mémoire très spéciale qui sert comme son nom l’indique à empiler des données de 16 bits de façon temporaire. On peut en suite retrouver ces données en les dépilant.Le «dépilage » se fait toujours dans l’ordre inverse de l’empilage.
Le PSP a lui aussi son propre segment. Le programme commence donc à l’offset 0h du segment de code et non à l’offset 100h.

3. Les cycles de lecture-écriture
Le code et les variables d’un programme se trouvent dans la mémoire vive. Pour accéder à une donnée en mémoire, le processeur place son adresse dans un bus d’adresse. Un cycle de lecture se met alors en place. Il consiste à retourner la donnée lue au processeur via le bus de données.
Pour l’écriture, l’adresse de la destination est transmise dans le bus d’adresse et la donnée à écrire est placée dans le bus de données.
Ouf !…
Nous aurons l’occasion de revenir sur la mémoire vive dans les autres chapitres pour apporter quelques précisions. Vous devriez mieux comprendre toutes ces notions en lisant la suite, car jusqu’ici nous n’avons pas encore parlé de la façon dont l’ordinateur se sert des adresses pour accéder à des données ou pour exécuter du code. C’est là qu’intervient le microprocesseur…

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
Apprendre l’assembleur (INTEL) (563 KO) (Cours PDF)
cours apprendre l'assembleur

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *