Accueil

Web

FaceBook

Telechargement

Contact

 

Ajouter aux Favoris

    Bienvenue ! 25/03/2019 @ 07:52:45 - IP : 107.23.176.162 -



Les cours du langage Assembleur - ZNsoft Tutorial
 




 

Microsoft

Télécharger

SQL Server 2012

Pinpoint

Visual Studio

Choisir son PC

 
 

Developpement

Visual Basic

Langage C

Java

Assembleur

Delphi

SQL

Python

WinDev

 
 

Systèmes OS

Ms Dos

Windows 9.x

Windows Nt

Windows Vista

Unix

Linux

Mac Os

 
 

Conception Web

PHP

ASP

Html

XmL

Flash Adobe

Director Adobe

WebDev

Java Script

 




Livre GRATUIT:
Livre gratuit pour maitriser Google Docs



 
 

 

Sommaire :


Présentation - Les bases d'Asm - Programmation du microprocesseur - Application Asm

Votre première aplication en Assembleur

 

Cours du langage Assembleur pour les débutants

 

 

Votre première application en Assembleur

 

Développer et déployer facilement vos sites web

Télécharger gratuitement Office 2013

Héberger votre site web sur des serveurs gratuits

Visual Studio 2013

Télécharger et apprenez gratuitement

Trucs et Astuces

Découvrez Windows 8.1 et télécharger le gratuitement

 

Application "Bonjour les visiteurs de ZNsoft" :

;**************************

;*** ZNsoft Asm Exemple ***

;**************************

.model small

;**************************

;*** Segment de donnée ***

;**************************

.data

texte db "Bonjour les visiteurs de ZNsoft",13,10,"$"

;*****************

;*** Programme ***

;*****************

.code

;Segment de donnée dans DS

mov ax,@data

mov ds,ax

mov ah,09h

mov dx,offset texte

int 21h

mov ax,4c00h

int 21h

end

 

Bon, vous l'aurez compris, ce n'est pas aussi simple qu'en C. Au début de notre programme, on a : .model small. Cette instruction indique à l'assembleur que notre programme pourra se contenter d'un petit modèle mémoire.

Ensuite, on a le segment de données. C'est ici qu'on doit déclarer toutes les variables utilisées dans le programme. Pour afficher bonjour, on doit donc créer une chaîne de caractères contenant le texte bonjour les visiteurs de ZNsoft. C'est ce que fait la ligne :

texte db "Bonjour les visiteurs de ZNsoft",13,10,"$"

 Ici :
  • texte est le nom de la variable
  • db est le type (b comme byte, octet en français)
  • "Bonjour les visiteurs de ZNsoft",13,10,"$" permet d'initialiser la chaîne avec la valeur Bonjour, suivie des codes ASCII 13 et 10 (qui permettent de sauter une ligne) et du symbole $ (qui indique la fin d'une chaîne de caractères en assembleur)

    Enfin, on a la partie programme. Les 2 premières instructions :
  • mov ax,@data

    mov ds,ax

    Ces deux instructions permettent d'initialiser le registre DS avec la valeur du segment de données alloué au programme. Je vais essayer de m'expliquer (un peu) plus clairement. Il faut que je commence par expliquer ce qu'est le mode réel.

    C'est un problème qui date des années 80. A l'époque, les ingénieurs de chez IBM avaient pour objectif de concevoir un PC gérant 1 Mo de mémoire vive (pour l'époque, c'était énorme, c'est comme si on parlait de 100 Go de mémoire actuellement). Pour gérer une telle quantité de mémoire, il faut un registre d'adresse de 20 bits (je n'explique pas pourquoi, je suppose que vous le savez). A l'époque, de tels registres n'existaient pas : le maximum était de 16 bits. Ces ingénieurs ont donc eu l'idée d'utiliser 2 registres d'adresse : un registre de poids fort : le registre de segment, et un registre de poids faible : le registre d'offset (il est appellé ainsi, car il sert à se déplacer dans un segment donné).

    Notre adresse sur 20 bits est donc donnée par : segment*16 + offset. Notre programme étant " petit " (on l'a précisé par la ligne .model small), on ne dispose que d'un segment. On peut donc initialiser DS au début du programme, puis on agira sur le registre d'offset pour " jongler " entre les différentes variables.

    Après avoir initialisé DS, on peut afficher notre texte. On utilise pour cela une interruption. Ici aussi, c'est assez simple. Un PC dispose de 256 interruptions. Ce sont des groupes de sous-programmes (exactement comme des fonctions) fournis par un système d'exploitation pour réaliser une tâche particulière.

    Pour chaque interruption, on peut trouver une documentation avec ce qu'elle attend en entrée, et ce qu'elle retourne en sortie.
    Par exemple, pour l'interruption 21h, qui est une interruption DOS, on a la description suivante
    :
    Int 21h, Fct 09h    Sortie d'une chaine de
    caractères     DOS (> 1.0)
    Cette fonction permet de sortir une chaîne de caractères sur le périphérique de sortie standard. Comme ce périphérique standard peut être redirigé sur un autre périphérique ou vers un fichier, il n'y a aucune garantie que la chaîne de caractères apparaisse sur l'écran. Si la sortie est redirigée sur un fichier, le programme d'appel n'a aucune possibilité de détecter si le support (disquette, disque dur) sur lequel figure le fichier est déjà plein, autrement dit s'il est encore possible d'écrire la chaîne de caractères dans le fichier.

    Entrée :

    AH = 09h DS = Adresse de segment de la chaîne de caractères DX = Adresse d'offset de la chaîne de caractères

    Sortie : aucune

    Remarques :
  • La chaîne de caractères doit être stockée dans la mémoire sous forme d'une séquence d'octets correspondant aux codes ASCII des caractères composant la chaîne. La fin de la chaîne de caractères doit être signalée au DOS à l'aide d'un caractère "$" (code ASCII 36).
  • Si la chaîne de caractères contient des codes de commande comme Backspace, Carriage Return ou Line Feed, ceux-ci seront traités comme tels.
  • Seul le contenu du registre AL est modifié par l'appel de cette fonction.

    On voit donc que pour utiliser cette fonction, on doit fournir en entrée :

    AH = 09h DS = Adresse de segment de la chaîne de caractères DX = Adresse d'offset de la chaîne de caractères

    On s'est déjà occuper du registre DS au début du programme. On doit donc mettre les valeurs correspondantes dans AH et DX, et appeler notre interruption, ce qui est fait par les instructions :
  • mov ah,09h
    mov dx,offset texte
    int 21h
    
    Enfin, on n'a plus qu'à quitter le programme. Ca peut paraître étonnant, mais pour quitter, il faut aussi appeler
     une interruption :
    Int 21h, Fct
    4Ch    Terminer programme avec un code de fin    DOS (> 1.0)
    
     Cette fonction permet de terminer un programme en définissant un code de fin que 
    le programme d'appel pourra tester à l'aide de la fonction 4Dh. La mémoire RAM 
    occupée par le programme à terminer est libérée après appel de cette fonction, 
    de sorte qu'elle peut à nouveau être attribuée à d'autres 
    programmes.

    Entrée :
    AH = 4Ch AL = Code de fin

    Sortie : aucune

    Remarques :

  • Cette fonction est à utiliser de préférence aux autres fonctions pour terminer un programme.
  • Lorsque cette fonction est appelée, les 3 vecteurs d'interruption dont le contenu avait été stocké dans le PSP avant le lancement du programme sont restaurés.
  • Avant que le contrôle ne soit rendu au programme d'appel, tous les handles qui ont été ouverts par le programme appelé, ainsi que tous les fichiers correspondants, sont refermés. Cela ne concerne toutefois que les fichiers auquel on accédait par FCB.
  • Le code de fin peut être examiné dans un fichier batch à l'aide des instructions ERRORLEVEL et IF.


  • Déposez votre CV
    lien de téléchargement direct
    50 tirages offerts à l'inscription chez myPIX.com!
    Dépot de CV gratuit sur Touslesemplois
    Logiciel de référencement automatique

             

    Devenez membre ZNsoft : La communauté Informatique

    Cours -  Etudiants -  Concours -  Congrès -  Téléchargement -  Formations


    _________________________________________________________________________________________________________
    Qui sommes-nous ? | Contact | | Inviter un ami | Soutenir ZNsoft | Revue de press | Références
    ZNsoft Corporation, Tous Droits Réservés © 2002/ 2019 ZNsoft RSS
      Dernière mise à jour : 22/03/2019