Cours n° 2 - MsgBox

COURS N° 3 - Les registres du microprocesseur


Ce cours a pour objectif de vous montrer comment utiliser les registres. Seuls les registres de même taille peuvent être utilisés ensemble. On ne peut pas copier le contenu d'un registre 16 bits dans un registre 32 bits. Les deux opérandes doivent être de même taille tel que : mov eax, esp

Avant de commencer ce cours il est vivement recommandé de consulter : Les registres du microprocesseur

Les registres de segment sont initialisés par le système d'exploitation MS-DOS pour ce qui est du modèle mémoire TINY.

Version 32 bits


.8086
.MODEL TINY


MonCode SEGMENT 'CODE'

        ORG 100h

    ;Point d'entrée du programme
    Main:
  
        ;Copie le contenu d'un registre 16 bits vers un autre registre 16 bits.     
        mov ax, bp
        mov bx, sp
        mov dx, di
        mov cx, si
        mov si, cx
        mov di, dx
        mov sp, bx
        mov bp, ax

        ;Copie le contenu d'un registre 8 bits vers un autre registre 8 bits.     
        mov ah, bh
        mov al, bl
        mov bh, dh
        mov bl, dl
        mov dh, ch
        mov dl, cl
        mov ch, ah
        mov cl, al
        mov cl, dl
        mov bl, al
        mov bl, bl
     
        ;Le registre FLAGS n'est pas directement utilisable. Il faut utiliser les instructions
        ;spéciales pour manipuler son contenu. Récupération et restauration du registre des drapeaux.
        ;Avant la restauration on met le bit 0 : CF à 1.     
        pushf
        pop ax
        mov al,1 ;CF = 1
        push ax
        popf
     
        ;Le registre IP n'est pas directement utilisable. Il faut utiliser les instructions push et ret, call et ret ou
        ;alors les instructions de saut : jcond, pour placer une adresse offset valide dans ce registre.
     
        ;1) Utilisation des instructions push et ret
        mov bx, OFFSET Function
        push bx ;On place l'adresse Function sur la pile.
        ret ;Puis on dépile avec l'instruction ret qui a pour effet de placer l'adresse dans le registre IP.
     
    Next:
     
        ;2)Utilisation de l'instruction call
     
        call Function1 ;L'instrction call place l'adresse Function1 dans le registre IP
     
        ;3) Utilisation de l'instruction de saut inconditionnel : jmp
        mov bx, OFFSET Function2
        jmp bx ;L'instruction jmp place dans le registre IP l'adresse Function2
     
    EndProg:     
        ;Fin du programme     
        mov ax, 4C00h
        int 21h
     
    Function:     
        mov ax, sp
        mov bx, OFFSET Next
        push bx ;On place l'adresse de l'instruction : call Function1 sur la pile.
        ret ;On dépile l'adresse dans le registre IP
     
    Function1:     
        mov ax, cx
        ret
     
    Function2:     
        mov ax, di
        mov bx, OFFSET EndProg
        jmp bx ;jmp place dans le registre IP l'adresse EndProg

MonCode ENDS

END Main