Les procédures et interruptions en Assembleur (Tasm) Tp°4 Les procédures et interruptions en Assembleur (Tasm)
Les Procédures Pour déclarer une procédure en assembleur Syntaxe: <nom-procédure> proc near …….. ret <nom-procédure> endp
Les Procédures Exemple: ecrire_message proc near mov ax, data mov ds, ax mov dx, offset message1 mov ah, 09h int 21h ret ecrire_message endp
Les Procédures Appel d’une procédure: Syntaxe: call <nom-procédure> Exemple: call ecrire_message
Les Procédures pile segment stack pp dw 20 dup (?) pile ends data segment message1 db "bonjour",'$' data ends assume cs:code, ds:data, ss:pile code segment debut: mov cx, 3 boucle: call ecrire_message loop boucle mov ah,4ch int 21h ecrire_message proc near mov ax, data ; fixer le registre segment de donnée mov ds, ax ; charger ds par l'adresse de la chaine mov dx, offset message1 ; reperer le début mov ah, 09h ; préparer l'interruption d'affichage du texte int 21h ; appeler l'interruption ret ecrire_message endp code ends end debut
Les Procédures Écrivez ce programme et observer son exécution sous TD de tasm Que fait ce programme?
Les Procédures Pour passer des paramètres, il y a deux méthodes: On peut utiliser les registres AX, BX, CX et DX Ou l’empilement et dépilement dans une pile
Interruptions Une interruption est un petit programme stocké en mémoire qui peut être appelé et qui a une tâche spécifique. Les interruptions permettent l'interactivité entre l'utilisateur et le programme (les entrées/sorties). Pour accéder aux périphériques de l’ordinateur, il faut le demander au MS-DOS via des interruptions. A chaque périphérique correspond une fonction identifiée par un numéro.
Interruptions Pour lancer une interruption il faut appeler l’interruption selon la syntaxe suivante: Syntaxe: int <n°> Exemple: int 21 Mais à une interruption, peut y avoir plusieurs fonctions définies chacune pour un périphérique. La valeur de la fonction doit être placée dans le registre ‘AH’
Interruptions Exemple: mov ah, 09h int 21h ici, est l’appel de l'interruption n°= 21h et la fonction n°= 09h.
Interruptions Exemple1: Pour arrêter l’exécution un programme : mov ah, 4ch int 21h
Interruptions int 21h Exemple 2: Pour écrire un caractère à l'écran mov ah, 02h int 21h Mais il faut mettre le caractère à afficher dans le registre DL
interruptions Exemple 3: Écrire une chaîne de caractères à l'écran mov ah, 09h int 21h, Il va falloir écrire une phrase dans un tableau qui se termine par le caractère ‘$’ Ensuite donner l'adresse de ce tableau dans DX
interruptions Exemple 4: Changer la position du curseur mov ah, 02h int 10h
interruptions Exemple 4: Lecture d'une touche au clavier l'interruption 16h gère le clavier. Elle possède deux fonctions intéressantes : 00h: lecture d'une touche. renvoi le code ASCII de la touche dans le registre AL. Si celui-ci vaut 0, alors la touche est étendue, et le code est stocké dans AH 01h, vérification de la présence d'une touche dans le tampon clavier.
Tp à remettre Écrire le programme assembleur permettant de trier un tableau de 10 éléments entiers non signés.