Assembleur 8086

download Assembleur 8086

of 45

Transcript of Assembleur 8086

  • 8/13/2019 Assembleur 8086

    1/45

    Assembleur du 8086

  • 8/13/2019 Assembleur 8086

    2/45

    Assembleur 8086

    Gestion des adresses mmoires sur deux mots :

    - 1 mot pour le segment,- 1 mot pour le dplacement dans le segment : l'offset ou adresse relative.

    Rappels :

    8 bits

    = 1 octet

    = 1 byte (anglais)

    16 bits

    = 1 mot (de 2 octets)

    = 1 word (anglais)

    On peut calculer l'adresse relle par la formule suivante :

    adresse = 16 * Segment + Offset

    Segment

    Offset

    Adresse (20 bits)

  • 8/13/2019 Assembleur 8086

    3/45

    Remarque:

    Deux segments conscutifs ne sont pas disjoints.

    Exemple :

    Ces deux adresses indiquent le mme octet en mmoire :

    0000:0010 et 0001:0000

    = 00010 = 00010F000:FFFF = FFFFF

    Mmoire

    Haut

    1 Mo

    Bas

    0000:0000 = 00000

  • 8/13/2019 Assembleur 8086

    4/45

    Zones mmoires rserves par le micro-processeur :

    - les 16 octets les plus hauts sont rservs la mise en service

    (Que faire quand la machine se met sous tension ?)(F000:FFF0 --> F000:FFFF),

    - les 1024 octets les plus bas sont rservs aux vecteurs

    d'interru tion (0000:0000 --> 0000:03FF).

    Zones mmoire rserves par l'architecture, l'organisation interne

    de la machine :

    - une partie de la mmoire est constitue de ROM (Read Only

    Memory) et contient les oprations de base de la machine,

    - une partie tait rserve la mmoire cran :

    + partir de B000:0000 pour un cran monochrome,

    + partir de B800:0000 pour un cran couleur.

  • 8/13/2019 Assembleur 8086

    5/45

    Les registres

    On distingue quatre groupes de registres :- les registres de donnes,

    - les registres de segments,

    - les registres pointeurs et index,

    - le registre d'tat.

  • 8/13/2019 Assembleur 8086

    6/45

  • 8/13/2019 Assembleur 8086

    7/45

    Les registres de donnesCes registres, auquel un rle privilgi a t attribu, peuvent tre

    considrs comme un registre de 16 bits ou deux de 8 bits :

    + AX (ou AL et AH pour respectivement la partie basse (Low) et haute

    (High)) appel Accumulateur, utilis pour les oprations arithmtiques,

    + BX (ou BL et BH) appel registre de base ou base (Base register),

    utilis pour l'adressage de donnes en mmoire,

    + CX (ou CL et CH) appel compteur (Count register), utilis commecompteur de boucle,

    + DX (ou DL et DH) appel registre de donnes (Data register), utilis

    en complment d'opration arithmtique.

  • 8/13/2019 Assembleur 8086

    8/45

    Les registres de segments

    Ces registres indiquent les segments des zones standards d'un

    programme :

    + CS (Code Segment) : Segment de code c'est dire contenant les

    ' ,

    + SS (Stack Segment) : Segment de pile c'est dire contenant la pile,

    + DS (Data Segment) : Segment de donnes c'est dire contenant lesdonnes en cours d'utilisation,

    + ES (Extra Segment) : Segment de donnes supplmentaire.

  • 8/13/2019 Assembleur 8086

    9/45

    Les registres Pointeurs et Index

    Ces registres vont contenir des offsets pour adresser la mmoire dansles segments vus prcdemment :

    + IP Instruction Pointer associ CS CS:IP donne l'adresse de la

    prochaine instruction excuter,

    + BP (Base Pointer) et SP (Stack Pointer), associs SS, SS:SP

    indique le sommet de la pile,

    + SI (Source Index) et DI (Destination Index), registres d'index,

    utiliss pour parcourir des tableaux, en standard, SI est associ DS,

    DI ES.

  • 8/13/2019 Assembleur 8086

    10/45

    Le registre dtat

    Ce registre de 16 bits contient des indicateurs (flags ou drapeaux) sur

    l'tat du micro-processeur, en particulier la suite d'oprationsarithmtiques ou de comparaison.

    DF TFIF SF ZFOF PFAF CF

    Overflow Flag :Dpassement de capacit

    NV : Not oVerflow

    OV : OVerflow

    Direction Flag :

    UP : UP

    DN : DowN

    Interruption Flag :

    Autorisation des interruptions

    DI : Disable Interruption

    EI : Enable Interruption

    Trap Flag :

    Indicateur du pas pas

    Sign Flag :

    Bit de signe

    (bit 7 ou 15)

    PL : PlusNG : NeGative

    Auxiliary Carry Flag :

    idem CF sur les quartets

    bas

    NA : Not Auxiliary CarryAC : Auxiliary Carry

    Carry Flag :

    Bit de retenue

    CY : CarrY

    NC : Not Carry

    Parity Flag :

    Bit de parit (nb de bit 1)

    PO : Parity Odd (Impaire)PE : Parity Even (Paire)

    Zero Flag :

    Bit 1 si le rsultat est 0

    NZ : Not ZeroZR : Zero

  • 8/13/2019 Assembleur 8086

    11/45

    Les instructions

    Les instructions sont constitues de deux zones :

    " "

    mnmonique

    de linstructionoprandes

    , ,

    destination puis source

    Espace ou

    tabulation

    Exemple :

    MOV dest,source pour effectuer un transfert de

    source vers dest

  • 8/13/2019 Assembleur 8086

    12/45

    Il existe diffrentes manires d'accder aux informations, diffrents

    modes d'adressage :- adressage par registre :

    Utilisation des noms des registres (AX, BX, CX, ...)

    Les modes dadressage

    Exemples : MOV AX,BX

    MOV AL,BL

    - adressage immdiat :

    Utilisation d'une valeur donne, d'une constante

    Exemples : MOV AX,460H

    MOV AL,-30

  • 8/13/2019 Assembleur 8086

    13/45

    Les modes dadressage (2)

    - les adressages en mmoire :

    + adressage direct :Utilisation de l'adresse mmoire o aller chercher la donne

    ,

    --> Offset dans DS

    + adressage indirect par registre :

    Utilisation de l'adresse mmoire contenue dans un registre (BX, BP,

    SI, DI)

    Exemple : MOV BX,300H

    MOV AX,[BX]

  • 8/13/2019 Assembleur 8086

    14/45

    Les modes dadressage (3)

    + adressage relatif une base :Utilisation de l'adresse mmoire obtenue par la somme d'un

    registre de base (BX ou BP) et un dplacement (dep)

    Il existe diffrentes notations :

    [BX + dep]

    [BX] + dep

    dep[BX]

    Exemple : MOV BX,2F0H

    MOV AX,[BX+10H]

  • 8/13/2019 Assembleur 8086

    15/45

    Les modes dadressage (4)+ adressage direct index :

    Utilisation de l'adresse mmoire obtenue par la somme d'un

    dplacement (dep) et un registre d'index (SI ou DI)

    Exemple : MOV DI,10H

    , +

    + adressage index par rapport une base :

    Utilisation de l'adresse mmoire obtenue par la somme d'un registre

    de base (BX ou BP), d'un registre d'index (SI ou DI) et d'un

    dplacement (dep).

    Exemple : MOV DI,15H

    MOV BX,0BHMOV AX,[BX+DI+1E0H]

  • 8/13/2019 Assembleur 8086

    16/45

    Les instructions

    On distingue 6 types d'instructions :- les instructions de transfert de donnes,

    - les oprations arithmtiques et logiques,

    - ,

    - les instructions de travail sur les chanes,- les interruptions,

    - les instructions de contrle du processeur et du registre d'tat.

    Une instruction ncessite un certain nombre de cycles pour sexcuter.

    La dure d un cycle dpend de la frquence dhorloge.

  • 8/13/2019 Assembleur 8086

    17/45

    Les instructions de transfert

    La principale instruction de transfert :

    MOV destination,source

    Transfert de l'octet ou du mot de source dans destination

    impossible de faire les transferts mmoire/mmoire, registre de

    segment/immdiat,

    impossible d'utiliser IP

  • 8/13/2019 Assembleur 8086

    18/45

    Les instructions de transfert (2)

    PUSH source

    Empiler un mot sur la pile

    0000

    Principe de la pile

    = -

    (SP+1; SP) = source

    POP destination

    Dpiler un mot sur la pile

    destination = (SP+1; SP)

    SP= SP + 2

  • 8/13/2019 Assembleur 8086

    19/45

    Les oprations logiquesAND destination,source

    ET logique entre destination et source, le rsultat est mis dans destination

    OR destination,source

    OU logique entre destination et source, le rsultat est mis dans

    destination

    X R dest nat on,sourceOU exclusif entre destination et source, le rsultat est mis dans

    destination

    NOT destinationNgation logique de destination, le rsultat est mis dans destination

    TEST destination,source

    ET logique entre destination et source pour positionner les indicateurssans modification de destination

  • 8/13/2019 Assembleur 8086

    20/45

    Les oprations arithmtiquesCBW

    Convertir un octet en un mot en tenant compte du signe (AL --> AX)

    Addition

    destination = destination + source

    ADC destination,source

    Addition avec retenue (Add with carry)

    destination = destination + source + CF

    INC destination

    Incrmentationdestination = destination + 1

  • 8/13/2019 Assembleur 8086

    21/45

    Les oprations arithmtiques (2)

    Soustraction

    SUB destination,source

    destination = destination - source

    SBB destination,source

    Soustraction avec retenue (Subtract with Borrow)

    destination = destination - source - CF

    DEC destination

    Dcrmentation

    destination = destination - 1

  • 8/13/2019 Assembleur 8086

    22/45

    Les oprations arithmtiques (3)

    NEG destination

    Ngation

    -

    CMP destination,source

    Comparaison

    Soustraction (destination - source) pour le positionnement des

    indicateurs, sans modification de destination

  • 8/13/2019 Assembleur 8086

    23/45

  • 8/13/2019 Assembleur 8086

    24/45

    Les oprations arithmtiques (5)Division

    DIV sourceDivision non signe

    si source est un octet, AL = AX DIV source

    =

    si source est un mot, AX = (DX; AX) DIV sourceDX = (DX; AX) MOD source

    IDIV source

    Division signe

    si source est un octet, AL = AX DIV source

    AH = AX MOD source

    si source est un mot, AX = (DX; AX) DIV sourceDX = (DX; AX) MOD source

  • 8/13/2019 Assembleur 8086

    25/45

    Les oprations de dcalage

    SAR destination,count

    (o count = 1 ou CL pour toutes les oprations de dcalage et de rotation)

    Shift Arithmetic Right : Dcalage arithmtique droite

    = , ,

    Le bit de poids fort est laiss son ancienne valeur (conservation du

    signe).

    Le bit limin est mis dans CF.

    CF

  • 8/13/2019 Assembleur 8086

    26/45

    Les oprations de dcalage (2)SHL destination,count ou SAL destination,count

    Shift Logical Left ou Shift Arithmetic Left : Dcalage gauche

    Si count = 1, multiplication par 2

    Le bit de poids faible est mis 0.

    Le bit limin est mis dans CF.

    SHR destination,count

    Shift Logical Rigth

    Dcalage logique droiteSi count = 1, division entire par 2, avec le reste dans CF

    Le bit de poids fort est mis 0.

    Le bit limin est mis dans CF.

    CF 0

    CF0

  • 8/13/2019 Assembleur 8086

    27/45

    Les oprations de dcalage (3)

    ROL destination,countRotate Left : Rotation gauche

    Faire count fois

    CF prend la valeur du bit de poids fort

    Tous les bits sont dcals de 1 vers la gauche

    Le bit de poids faible prend la valeur de CF (de l'ancien bit de poids fort)

    CF

  • 8/13/2019 Assembleur 8086

    28/45

    ROR destination,count

    Rotate Right : Rotation droite

    Faire count foisCF prend la valeur du bit de poids faible

    Tous les bits sont dcals de 1 vers la droite

    Le bit de poids fort prend la valeur de CF (de l'ancien bit de poids faible)

    CF

    RCL destination,countRotate Left through Carry : Rotation gauche travers "Carry Flag"

    Faire count fois

    Tous les bits sont dcals de 1 vers la gauche

    Le bit de poids faible prend la valeur de CFCF prend la valeur du bit de poids fort limin

    CF

  • 8/13/2019 Assembleur 8086

    29/45

    Les oprations de dcalage (5)RCR destination,count

    Rotate Right through Carry : Rotation droite travers "Carry Flag"Faire count fois

    Tous les bits sont dcals de 1 vers la droite

    Le bit de oids fort rend la valeur de CF

    CF prend la valeur du bit de poids faible limin

    CF

    Exercices :1/ Faire l'addition des octets contenus en 40H et 41H, mettre le rsultat en 42H.

    2/ Multiplier [40H] par 2, mettre le rsultat en 41H

    3/ Mettre zro du quartet de poids fort de [40H], mettre le rsultat en 41H

    4/ Mettre zro l'octet [40H]

    5/ Partager [40H] en deux quartets l'un en 41H, l'autre en 42H

  • 8/13/2019 Assembleur 8086

    30/45

    Les instructions de contrle

    Les instructions

    de branchement inconditionnel

    JMP destination

    JumpSaut dans le mme segment (NEAR) ou dans un autre segment (FAR)

    Modification de IP (Saut Intra-segment) ou CS et IP (Saut Inter-segment)

  • 8/13/2019 Assembleur 8086

    31/45

    Les instructionsde branchement conditionnel

    JA ou JNBE CF = 0 et ZF = 0Jump if Above / if Not Below or Equal

    JBE ou JNA CF = 1 ou ZF = 1

    JAE ou JNC ou JNB CF = 0

    Jump if Above or Equal / if Not Carry / if Not Below

    JB ou JC ou JNAE CF = 1

    Jump if Below / if Carry / if Not Above or equal

  • 8/13/2019 Assembleur 8086

    32/45

    Les instructionsde branchement conditionnel (2)

    JCXZ (CX) = 0Jump if CX is Zero

    Jump if Equal / if ZeroJNE ou JNZ ZF = 0

    Jump if Not Equal / if Not Zero

    JNP ou JPO PF = 0

    Jump if No Parity / if Parity Odd

    JP ou JPE PF = 1

    Jump if Parity / if Parity Even

  • 8/13/2019 Assembleur 8086

    33/45

    Les instructionsde branchement conditionnel (3)

    JG ou JNLE ZF = 0 et OF = SF

    Jump if Greater / if Not Less nor Equal

    ou = ou

    Jump if Less or Equal / if Not Greater

    JGE ou JNL OF = SF

    Jump if Greater or Equal / if Not LessJL ou JNGE OF # SF

    Jump if Less / if Not Greater nor Equal

  • 8/13/2019 Assembleur 8086

    34/45

    Les instructionsde branchement conditionnel (4)

    JNO OF = 0

    Jump if No Overflow

    J OF = 1

    Jump if Overflow

    JNS SF = 0

    Jump if No SignJS SF = 1

    Jump if Sign

  • 8/13/2019 Assembleur 8086

    35/45

    Utilisation

    Utilisation aprs un CMP destination,source :

    Saut si Entiers Entiers

    non s gn s s gn s

    destination = source JE JE

    destination # source JNE JNE

    destination > source JA JGdestination >= source JAE JGE

    destination < source JB JL

    destination

  • 8/13/2019 Assembleur 8086

    36/45

    Exercices

    1/ Trouver le plus grand (puis le plus petit) des deux nombres des

    adresses 38H et 40H, la mettre en 42H

    2/ Faire la somme des valeurs contenues partir de l'adresse 42H, lenombre de valeurs additionner tant en 40H, mettre la somme en 38H

    3/ Trouver le nombre de valeurs ngatives contenues partir de l'adresse

    4/ De la mme manire, trouver la valeur minimum puis la valeurmaximum, puis les deux en mme temps

    5/ Trouver le nombre de caractres d'une chane ASCII termine par le

    caractre nul de code ASCII '0'

    6/ Faire la concatnation de deux chanes ASCII termines par 0 (CH1et CH2) dans une chane RES, mettre le nombre de caractres de la

    chane obtenue dans LG

    7/ Convertir un octet NB en une chane de caractres numriques RES (

    123 --> '123' )

  • 8/13/2019 Assembleur 8086

    37/45

    Correction exercice 1

    program plusgrandasm;

    function plusgrand:integer;assembler;

    asm

    MOV AX,5

    MOV BX,40h

    cmp AX,BX

    ja @plusgrand

    jmp @pluspetit

    @plusgrand:mov BX,42h

    mov [bx],ax

    jmp @fin

    @pluspetit:

    MOV [BX],AX

    mov ax,[40h]

    MOV AX,3

    MOV BX,38hMOV [bx],ax

    mov bx,ax

    mov ax,[40h]

    mov AX,bx

    mov bx,42hmov [bx],ax

    jmp @fin

    @fin:

    mov ax,[42h]

    end;

    var i:integer;

    begin

    writeln(plusgrand);

    readln;

    end.

  • 8/13/2019 Assembleur 8086

    38/45

    Correction exercice 2

    program sommes;

    procedure initso(nb:integer);assembler;

    asm

    mov ax,1

    ,

    mov ax,2

    mov [44h],ax {ranger 2 dans 44h}

    mov ax,3

    mov [46h],ax

    mov ax,4

    mov [48h],ax

    mov ax,5

    mov [50h],axmov ax,[nb]

    mov [40h],ax {ranger le nombre de repetitions dans 40h}

    end;

  • 8/13/2019 Assembleur 8086

    39/45

    function so:integer;assembler;

    asmmov bx,40h

    mov ax,0

    mov si,0

    @debut:

    inc si

    cmp si,[40h]jg @fin {si si > [40h] arreter}

    inc bx

    inc bx {passe a l adresse des donnees suivante}

    add ax,[bx]

    @fin:

    mov bx,38h {stocke resultat dans 38h}

    mov [bx],ax

    end;

    var i:integer;

    begin

    initso(2);writeln(so);

    end.

  • 8/13/2019 Assembleur 8086

    40/45

    Les instructions de contrle

    du processeur et du registre d'tat

    NOP

    No Opration

    CLC

    CLD

    Clear Direction Flag DF = 0

    STC

    =

    STC

    Set Carry CF = 1

    CMC

    Complement Carry CF = not CF

    =

    CLI

    Clear Interruption Flag IF = 0

    STI

    Set Interruption Flag IF = 1

  • 8/13/2019 Assembleur 8086

    41/45

    Les interruptions

    Une interruption est semblable un appel de sous-programme maisfait toujours un appel long (segment + offset). L'adresse de

    branchement n'est pas dans l'instruction, elle est indique par le

    num ro e se rouve ans a a e es n errup ons ans e segmen .

    On peut donc faire appel aux interruptions indpendamment des

    adresses mmoires o elles se trouvent.

    Les interruptions peuvent tre dclenches par le matriel (clavier,

    horloge par exemple) ou par un logiciel.

  • 8/13/2019 Assembleur 8086

    42/45

    Les interruptions (2)

    INT numro

    Appel d'une interruption

    Sauve arde du re istre d'tat sur la ile

    Mise 0 des indicateurs pas pas (TF) et d'autorisationd'interruption (IF)

    Sauvegarde de CS sur la pile

    Calcul de l'adresse de la table d'interruption (numro x 4)

    Chargement dans CS du second motSauvegarde de IP sur la pile

    Chargement du premier mot de la table dans IP

    donc Saut l'adresse CS:IP

  • 8/13/2019 Assembleur 8086

    43/45

    Les interruptions (3)

    IRETRetour d'une interruption

    ' ,

    Exemples d'interruptions :

    Interruption 0 : Division par 0

    Interruption 10H : Gestion d'cran

    Interruption 16H : Gestion clavier

  • 8/13/2019 Assembleur 8086

    44/45

    Codage dalgorithmes

    Algorithme

    Si A = B

    Alors C 100

    Assembleur

    MOV AX, a

    MOV BX, b

    Assembleur optimis

    MOV AX, a

    MOV BX, b

    non

    Finsi

    ,

    JNE sinonalors: MOV AX, 100

    MOV c, AX

    JMP finsi

    sinon: MOV AX, 200

    MOV c, AX

    finsi:

    ,

    JNE sinonalors: MOV AX, 100

    JMP finsi

    sinon: MOV AX, 200

    finsi: MOV c, AX

  • 8/13/2019 Assembleur 8086

    45/45

    Codage dalgorithmes (2)

    Algorithme

    B 10

    A 1

    Assembleur

    MOV b, 10

    MOV a, 1

    Assembleur optimis

    MOV b, 10

    MOV a, 1PUSH AX

    PUSH BX

    an que a re

    AA + 1Fintq

    debtq: MOV AX, aCMP AX, b

    JG fintq

    ADD a, 1

    JMP debtq

    fintq: POP AX

    , a

    MOV BX, b

    debtq: CMP AX, BX

    JG fintq

    INC AX

    JMP debtq

    fintq: MOV a, AX

    POP BX

    POP AX