Etienne Tremblay - PowerPoint PPT Presentation

1 / 19
About This Presentation
Title:

Etienne Tremblay

Description:

Cours 8, Registres, M moire et Instructions Arithm tiques/Logiques du 8086 ... Pour les instructions affectant la pile (PUSH, POP, CALL, RET, etc.), SS:SP est utilis . ... – PowerPoint PPT presentation

Number of Views:148
Avg rating:3.0/5.0
Slides: 20
Provided by: Sab70
Category:

less

Transcript and Presenter's Notes

Title: Etienne Tremblay


1
Etienne Tremblay
  • Ordinateurs, Structure et Applications

GIF-16116
Cours 8, Registres, Mémoire et Instructions
Arithmétiques/Logiques du 8086
Université Laval, Hiver 2007
2
Registres et drapeaux
Tiré du didacticiel de EMU8086
3
Les registres
  • AX Registre accumulateur 16 bits ( composé de
    deux registres 8 bits, AH et AL).
  • BX Registre d'adresses de base 16 bits (composé
    de deux registres 8 bits, BH et BL).
  • CX Registre compteur 16 bits (composé de deux
    registres 8 bits, CH et CL).
  • DX Registre de données 16 bits (composé de deux
    registres 8 bits, DH et DL).
  • SI Registre d'index source 16 bits.
  • DI Registre d'index destination 16 bits.
  • BP Registre pointeur de base 16 bits.
  • SP Registre pointeur de pile 16 bits.
  • IP Instruction pointeur 16 bits.

Tiré du didacticiel de EMU8086
4
Les drapeaux
  • Carry Flag (CF) Ce flag est à 1 lorsquil y a
    une retenue.
  • Zero Flag (ZF) - Ce flag est à 1 lorsque le
    résultat est zéro.
  • Sign Flag (SF) - Ce flag est à 1 lorsque le
    résultat est négatif.
  • Overflow Flag (OF) - Ce flag est à 1 lorsqu'un
    débordement a lieu.
  • Parity Flag (PF) - Ce flag est à 1 lorsque le
    résultat est un nombre pair de bits. Même si le
    résultat est un Word (mot), uniquement les 8 bits
    de poids faible sont analysés !
  • Auxiliary Flag (AF) - Ce flag est à 1 lorsqu'un
    débordement non signé a lieu sur les 4 bits de
    poids faible.
  • Interrupt enable Flag (IF) - Lorsque ce flag est
    à 1, le processeur réagit aux interruptions des
    dispositifs externes.
  • Direction Flag (DF) - Ce flag est utilisé par
    quelques instructions pour traiter les chaînes de
    données, Lorsque ce drapeau est placé à 0, la
    chaîne est traitée octet par octet en
    incrémentant, lorsque ce drapeau est placé à 1,
    la chaîne est traitée octet par octet en
    décrémentant.

Les drapeaux sont tous contenus dans un unique
registre de status.
5
Mémoire et registres segments (1)
  • Le 8086 a 20 lignes dadresses et peut donc
    accéder à une mémoire de 220 adresses, soit 1Mo
    ou FFFFh.
  • Chaque case de mémoire contient 1 byte.
  • Comme les registres nont que 16 bits, un
    registre seul ne peut quaccéder à 64Ko de
    mémoire.
  • Les registres segments permettent daccéder à
    toutes les adresses de la mémoire.
  • Il y a 4 segments un segment de code (le
    programme), 2 segments de données (les variables)
    et 1 segment pour la pile (voir plus loin).
  • La convention Little Endian est utilisée pour
    stocker des mots de 2 bytes

6
Mémoire et registres segments (2)
  • Les 4 registres segments sont CS (Code Seg.), DS
    (Data Seg.), ES (Extra Data Seg.) et SS (Stack
    Seg.).
  • Les registres de segment ont 16 bits. Leur valeur
    multipliées par 16 (équivaut à ajouter un 0 en
    hex) donne la première adresse dun segment.
  • Le segment de code contient le programme, ceux de
    data, les données, et celui de Stack, la pile. Il
    est cependant possible dutiliser les registres
    de segments à dautres fins (déconseillé).
  • Les segments peuvent être superposés (overlap).
  • À moins de modifier les registres segments à
    lintérieur même dun programme, la taille
    maximum dun programme est 464k 256k. Un
    programme où tous les registres segments ont la
    même valeur fait 64k (.com).

7
Les registres segments et associations
  • Chaque registre segment doit être associé à un ou
    plusieurs registres afin de former une adresse
    physique réelle. La table suivante donne ces
    associations
  • Une adresse physique est exprimée sous la forme
    aaaabbbb en hexadécimal où aaaa est le segment
    et bbbb est loffset (ou adresse virtuelle!?!).
    La valeur de ladresse physique sur 20 bits est
    aaaa0hbbbb ou encore aaaa16bbbb.
  • Supposons par exemple que CS vaille 1111h et que
    IP vaille AAAAh. Alors, ladresse de
    linstruction de programme pointée par IP (celle
    qui sera exécutée) est 11110 0AAAAh 1BBBAh.
  • Pour les instructions affectant la pile (PUSH,
    POP, CALL, RET, etc.), SSSP est utilisé. SSBP
    est ladresse de base de la pile.
  • DSBX est utilisé avec linstruction MOV (qui
    équivaut à une affectation) pour chercher des
    données en mémoire.
  • DSSI et ESSI sont habituellement utilisés pour
    travailler sur des tableaux ou des chaînes de
    caractères.

8
Les modes dadressage (MOV)
  • Un mode dadressage est une instruction offerte
    par un microprocesseur afin de transférer de
    linformation dun emplacement mémoire à un autre
    emplacement. Cest une opération daffectation
    souvent représentée en assembleur par
    linstruction MOV.
  • Pour le 8086, linstruction MOV dst,src signifie
    mettre le contenu de src (la source) dans dst (la
    destination). On dit que dst et src quils sont
    des opérandes.
  • Src et dst peuvent être certains registres, des
    adresses (variables) ou des constantes (immédiate
    en anglais, dst ne peut pas être une constante!).
  • Le 8086 supporte des transferts de bytes ou de
    mots (1 word 2 bytes) dans certains cas. Src et
    dst doivent toujours avoir la même taille.

9
Les modes dadressage (2)
  • MOV REG, mémoire Direct addressing mode, base
    adressing mode, etc.
  • MOV mémoire, REG
  • MOV REG, REG Register Mode
  • MOV mémoire, immédiate
  • MOV REG, immédiate Immediate Mode
  • REG AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH,
    DL, DI, SI, BP, SP.
  • mémoire BYTE PTR BX, WORD PTR BX,
    BXSI7, variable, etc.
  • immédiate 5, -24, 3Fh, 10001101b, etc.
  • MOV SREG, mémoire
  • MOV mémoire, SREG
  • MOV REG, SREG
  • MOV SREG, REG
  • SREG DS, ES, SS, source seulement CS.
  • REG AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH,
    DL, DI, SI, BP, SP.
  • mémoire b. BX, w. BX, BXSI7, variable,
    etc.

Tiré du didacticiel de EMU8086, Ajouts de Etienne
Tremblay
10
Variables
  • Une variable est un nom donné à une adresse de
    mémoire. Il nexiste pas dinstruction pour créer
    ou manipuler des variables. Il nexiste que des
    instructions pour manipuler la mémoire.
  • Les variables sont des créations du langage
    assembleur afin de faciliter la création dun
    programme Il est plus facile de retenir un nom
    quune adresse de mémoire!!!
  • Avec les assembleurs de 8086, la syntaxe pour
    déclarer une variable est
  • nom DB valeur pour déclarer une variable dun
    byte dont la valeur initiale est valeur et le nom
    est nom.
  • nom DW valeur pour déclarer une variable dun
    mot.
  • Linstruction DB sert à un insérer un byte dans
    la mémoire du 8086. Ladresse de ce byte est
    ladresse de la variable. DW insère 2 bytes Il
    est possible, si lon connaît les opcodes et les
    opérandes des instructions du 8086 décrire un
    programme avec des DB!
  • Lassembleur soccupera de remplacer tous les
    noms des variables par les adresses correspondant
    à ces nom.
  • Linstruction LEA permet daller chercher
    ladresse dune variable. OFFSET aussi, voir le
    didacticiel de EMU8086.
  • Note Changer la valeur de DS peut créer de jolis
    problèmes avec les variables.

11
Tableaux
  • Les tableaux peuvent être vus comme des chaînes
    de variables. Une chaîne texte est un exemple de
    tableau d'octets, chaque caractère est présenté
    comme un élément de code ASCII (0 à 255). Voici
    quelques exemples de définition d'un tableau a
    DB 48h, 65h, 6Ch, 6Ch, 6Fh, 00hb DB 'Hello', 0
    b est la copie exacte d'une rangée, lorsque le
    compilateur voit une chaîne entourée par des
    guillemets, il la convertit automatiquement en un
    ensemble d'octets.
  • Si vous devez déclarer un grand tableau, vous
    pouvez utiliser l'opérateur DUP.Par exemple c
    DB 5 DUP(9) La déclaration sans DUP c DB 9, 9,
    9, 9, 9

Tiré du didacticiel de EMU8086
12
Constantes
  • La directive assembleur EQU permet de déclarer
    des constantes (comme un define en C). Exemple
    MyConst EQU 12h.
  • Lors de lassemblage, tous les MyConst de
    lexemple ci-dessous seraient remplacés par 12h

13
Instructions arithmétiques et logiques, principe
  • Les instructions arithmétiques et logiques sont
    des opération mathématiques (, -, , /) ou
    booléennes (AND, XOR, NOT, ROL, ROR) opérée sur
    des bits. Les nombres sont exprimées en notation
    complément 2.
  • Les instructions arithmétiques et logiques
    changent presque toujours les valeurs de certains
    drapeaux (en fonction de linstruction).
  • Le résultat de lopération est habituellement
    placé dans le premier opérande ADD A,B vaut A
    A B.
  • Plusieurs registres ne peuvent être utilisés pour
    des opérations arithmétiques et seuls AX,BX,CX et
    DX peuvent être utilisés directement pour les
    opérations avec des bytes.

14
ADD, SUB, CMP, AND, TEST, OR, XOR
2 opérandes REG, mémoiremémoire, REGREG,
REGmémoire, immédiatREG, immédiat REG AX,
BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI,
SI, BP, SP.Ces instructions affectent les flags
suivants  CF, ZF, SF, OF, PF, AF. ADD - Ajoute
le deuxième opérande au premier. SUB - Soustrait
le deuxième opérande au premier. CMP - Soustrait
le deuxième opérande au premier pour les flags
uniquement. AND - Compare par un ET logique tous
les bits des deux opérandes. TEST - Idem à AND
mais pour les flags uniquement. OR - Effectue un
OU logique entre tous les bits des deux
opérandes. XOR - Effectue un OU exclusif logique
entre tous les bits des deux opérandes.
Tiré du didacticiel de EMU8086. Modifié par
Etienne Tremblay
15
Exemple dopérations sur des bits
  • Supposons que lon veille mettre le bit 3 (23)
    de AX à 0, mais laisser le reste du registre
    intact
  • AND AL, F7h
  • Supposons que lon veille mettre le bit 3 (24)
    de AX à 1, mais laisser le reste du registre
    intact
  • OR AL, 08h

16
MUL, IMUL, DIV, IDIV
  • 1 seul opérande REG ou mémoire
  • REG AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH,
    DL, DI, SI, BP, SP. Les instructions MUL et
    IMUL affectent uniquement les flags CF et OF 
    lorsque le résultat est plus grand que la taille
    de l'opérande ces flags sont placés à 1, lorsque
    la taille de l'opérante est ajustée ces flags
    sont placés à 0. Pour DIV et IDIV les flags ne
    sont pas définis.
  • MUL - Multiplication non signée
  • byte AX AL opérande.
  • word  (DX AX) AX opérande.
  • IMUL - Multiplication signée
  • byte AX AL opérande.
  • word (DX AX) AX opérande.
  • DIV - Division non signée
  • byte AL AX / opérande AH reste (modulo)
  • word  AX (DX AX) / opérande DX reste
    (modulo)
  • IDIV - Division signée
  • byte AL AX / opérande AH reste (modulo)
  • word  AX (DX AX) / opérande DX reste
    (modulo)

Tiré du didacticiel de EMU8086. Modifié par
Etienne Tremblay
17
Note sur les multiplications et divisions
  • En base deux, les multiplications et les
    divisions par des multiples de 2 peuvent
    (devraient!!!) se faire avec ROR, ROL (ROtate
    Left/Right), SAR et SAL (arithmetic left/right
    shift) .
  • Schéma de RCR, RCL, SAR, SAL, ROL et ROR pour une
    rotation de 1 bit

18
INC, DEC, NOT, NEG
  • Un opérande REG ou mémoire
  • REG AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH,
    DL, DI, SI, BP, SP. Les instructions INC, DEC
    affectent les flags suivants  ZF, SF, OF, PF,
    AF.L'instruction NOT n'affecte aucun
    flag.L'instruction NEG affecte les flags
    suivants CF, ZF, SF, OF, PF, AF.
  • INC Ajoute 1 à l'opérande.
  • DEC Soustrait 1 à l'opérande.
  • NOT - Inverse chaque bit de l'opérande.
  • NEG - Effectue un complément à 2 sur l'opérande
    négative. En fait, inverse chaque bit de
    l'opérande et lui ajoute 1.
  • Note Si vous navez quun seul byte de 0 à 255,
    la meilleur façon dajouter 256 est dajouter
    255, puis dajouter 1

Tiré du didacticiel de EMU8086. Modifié par
Etienne Tremblay
19
Références et exercices
  • Références pour tout lassembleur
  • Irv Englander chapitre 12 (jusquà la page 351)
    et Annexe 2.
  • http//www.commentcamarche.net/asm/assembleur.php3
  • http//www.ifrance.com/zarbi-os/DOCS/chap2.htm
    (très bon résumé)
  • Didacticiel de EMU8086 (Pour débutants, mais bien
    fait)
  • www.intel.com/design/intarch/datashts/24018708.pdf
    (datasheet du 8086)
  • William Stallings chapitre 10 11.2
  • Exercices
  • Lire le didacticiel de EMU8086
Write a Comment
User Comments (0)
About PowerShow.com