160 likes | 302 Views
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
E N D
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 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.