SlideShare a Scribd company logo
1 of 26
Download to read offline
Sistemi a Microprocessore                                                Assembler 8086




                      Sistemi a Microprocessore


                                   ASSEMBLER 8086:
                                  CARATTERISTICHE E
                                      ISTRUZIONI
                                    FONDAMENTALI

                                                                 1




                            Modalità di indirizzamento

                      Sono disponibili, in generale, le modalità
                        immediata, tramite registro, assoluta (o
                        diretta), indiretta, indicizzata. Tuttavia,
                        non tutte le modalità sono attive con
                        ogni tipo di istruzione.




                                                                     2




Sergio PORCU                                                                         1
Sistemi a Microprocessore                                         Assembler 8086




                            Indirizzamento immediato

                      L’operando è una costante che esegue
                         immediatamente il codice mnemonico
                         dell’istruzione.
                      Esempio:
                                       ADD AL, 8



                                                              3




                       Indirizzamento tramite registro

                      L’operando è contenuto in un registro
                         indicato dal codice mnemonico
                         dell’istruzione.
                      Esempio:
                                      MOV CX, DX



                                                              4




Sergio PORCU                                                                  2
Sistemi a Microprocessore                                            Assembler 8086




                            Indirizzamento assoluto

                      L’operando si trova a un indirizzo
                         specificato direttamente nell’istruzione.
                      Esempi:
                                     ADD ALFA, 8

                                    MOV BX, RES

                                                                 5




                            Indirizzamento indiretto

                      L’operando si trova a un indirizzo puntato
                         da un registro.
                      Esempi:
                                    ADD AX, (BX)

                                    MOV (BX), CX

                                                                 6




Sergio PORCU                                                                     3
Sistemi a Microprocessore                                                 Assembler 8086




                            Indirizzamento indicizzato
                      L’operando si trova a un indirizzo puntato da
                         un registro base e/o un registro indice (BX,
                         BP, SI o DI). A seconda di quali registri sono
                         specificati, questa modalità dà luogo a molte
                         varianti:
                      • con base (solo registri BX e BP; può essere
                         presente un registro di segmento)
                      • con indice (solo registri SI o DI; non
                         possono essere presenti registri di
                         segmento)
                      • con entrambi
                                                                      7




                       Indirizzamento indicizzato con
                                   base

                      Esempi:

                                    ADD AX, (BX+8)

                                 MOV (BP+COST), CX



                                                                      8




Sergio PORCU                                                                          4
Sistemi a Microprocessore                                    Assembler 8086




                       Indirizzamento indicizzato con
                                  indice

                      Esempi:

                                  ADD AX, (DI+8)

                                MOV (SI+COST), CX



                                                        9




                       Indirizzamento indicizzato con
                                base e indice

                      Esempi:

                                 MOV (BX+DI), AX

                             ADD (BX+DI+COST), AX



                                                        10




Sergio PORCU                                                             5
Sistemi a Microprocessore                                                               Assembler 8086




                                     Elenco istruzioni
                      •     Istruzioni aritmetiche
                      •     Istruzioni logiche e di confronto
                      •     Istruzioni di aggiustamento per valori codificati in
                            BCD
                      •     Istruzioni riguardanti i flag
                      •     Istruzioni di salto
                      •     Istruzioni di rotazione e shift
                      •     Istruzioni di caricamento indirizzi
                      •     Istruzioni di ciclo
                      •     Istruzioni riguardanti operazioni sulle stringhe
                      •     Istruzioni di ripetizione per stringhe
                      •     Istruzioni varie
                                                                                   11




                                 Istruzioni aritmetiche

                      ADD (ADD) Addizione.
                      ADC (Add with Carry) Addizione con
                        riporto.
                      SUB (SUBtract) Sottrazione.
                      SBB (SUBtract with Borrow) Sottrazione
                        con prestito.


                                                                                   12




Sergio PORCU                                                                                        6
Sistemi a Microprocessore                                                          Assembler 8086




                              Istruzioni aritmetiche
                      MUL (MULtiply) Moltiplicazione senza segno. Il
                        moltiplicando e il risultato sono sempre posti in
                        registri fissi: solo il moltiplicatore (che è anche
                        l'unico dato specificato) può essere preso da
                        sorgenti diverse. Più esattamente, per moltiplicatori
                        a 8 bit il moltiplicando sta sempre in AL e il risultato
                        è sempre fornito in AX, mentre per moltiplicatori a
                        16 bit il moltiplicando sta sempre in AX e il risultato
                        è sempre fornito in DX e AX. In entrambi i casi, se
                        le parti più significative del prodotto (rispettivamente
                        AH o DX) sono nulle, i flag CF e OF vengono
                        resettati.
                                                                              13




                              Istruzioni aritmetiche
                      IMUL (Integer MULtiply) Moltiplicazione con segno (fra
                         interi). Analoga a MUL, a parte il fatto che operandi
                         e risultato sono considerati con segno.
                      DIV (DIVide) Divisione senza segno. Il dividendo e il
                         risultato sono sempre posti in registri fissi: solo il
                         divisore (che è anche l'unico dato specificato) può
                         essere preso da sorgenti diverse. Più esattamente,
                         per divisori di 8 bit il dividendo è sempre in AX e il
                         resto e il quoziente sono forniti rispettivamente in
                         AH e AL, mentre per divisori di 16 bit il dividendo
                         sta sempre in AX e DX, il resto è fornito in DX e il
                         quoziente in AX.
                                                                              14




Sergio PORCU                                                                                   7
Sistemi a Microprocessore                                                   Assembler 8086




                             Istruzioni aritmetiche
                      IDIV (Integer DIVdide) Divisione con segno (fra
                         interi). Analoga a DIV, tranne per il fatto che
                         gli operandi sono considerati con segno. Il
                         resto assume il segno del dividendo.
                      NEG (NEGate) Inversione del segno. Inverte il
                         segno di un valore, sottraendolo da zero.
                         Modifica il dato su cui opera.
                      INC (INCrement) Incremento (di 1).
                      DEC (DECrement) Decremento (di 1).

                                                                       15




                            Istruzioni di conversione
                             byte/word/double word
                      CBW (Convert Byte to Word) Conversione da
                        byte a word. Converte un byte (posto in AL)
                        in una word (posta in AX) estendendo il bit
                        di segno del byte verso sinistra, fino a
                        riempire la word.
                      CWD (Convert Word to Double word)
                        Conversione da word a double word.
                        Converte una word (posta in AX) in una
                        double word (posta in DX e AX) estendendo
                        il bit di segno della word verso sinistra, fino
                        a riempire la double word.
                                                                       16




Sergio PORCU                                                                            8
Sistemi a Microprocessore                                               Assembler 8086




                            Istruzioni logiche e di
                                   confronto
                      NOT not logico.
                      AND and logico.
                      OR or logico.
                      XOR or esclusivo logico.
                      TEST (TEST) Confronto logico. Effettua un
                        "and“ logico fra i due operandi (che non
                        vengono alterati) influenzando di
                        conseguenza i flag e permettendo di
                        condizionare le operazioni successive
                        (tipicamente salti).
                                                                   17




                            Istruzioni logiche e di
                                   confronto

                      CMP (CoMPare) Confronto aritmetico fra
                       due valori. Effettua una sottrazione fra
                       i due valori senza modificare però
                       nessuno dei due operandi e scartando
                       il risultato. Influenza lo stato dei flag in
                       modo da permettere di condizionare di
                       conseguenza le operazioni
                       successive.
                                                                   18




Sergio PORCU                                                                        9
Sistemi a Microprocessore                                                                Assembler 8086




                      Istruzioni di aggiustamento per
                           valori codificati in BCD
                      AAA (ASCII Adjust after Addition) Aggiustamento
                          ASCII dopo l’addizione. Dopo un'addizione fra due
                          numeri BCD non compattati, converte il risultato,
                          contenuto di AL, in un numero BCD anch'esso non
                          compattato e correttamente rappresentato. Perciò,
                          al termine il nibble più significativo di AL è zero. Il
                          valore finale è contenuto in AH (che può essere
                          stato incrementato di 1 in caso di riporti) e AL.
                      Si ricorda che un valore BCD si dice compatto quando
                          ogni cifra è rappresentata da un nibble (e quindi un
                          byte contiene due cifre), e non compatto quando
                          invece ogni cifra è rappresentata su un byte, il cui
                          nibble più significativo è mantenuto azzerato.
                                                                                    19




                      Istruzioni di aggiustamento per
                           valori codificati in BCD
                      AAS (ASCII Adjust after Subtraction)
                        Aggiustamento ASCII dopo la sottrazione.
                        Dopo una sottrazione fra due valori BCD
                        non compattati (il minuendo contenuto in AH
                        e AL, il sottraendo in qualche altro registro a
                        8 bit), converte il risultato, posto in AH e AL,
                        in un valore BCD corretto anch'esso non
                        compattato posto in AH (che può essere
                        stato decrementato di 1 in caso di prestito) e
                        AL.
                                                                                    20




Sergio PORCU                                                                                        10
Sistemi a Microprocessore                                             Assembler 8086




                      Istruzioni di aggiustamento per
                           valori codificati in BCD

                      AAM (ASCII Adjust after Multiplication)
                        Aggiustamento ASCII dopo la
                        moltiplicazione. Converte il risultato del
                        prodotto (effettuato tramite MUL) di
                        due numeri BCD non compattati,
                        inizialmente posti in AH e AL, in un
                        valore BCD pure non compattato e
                        correttamente rappresentato, posto in
                        AX.
                                                                 21




                      Istruzioni di aggiustamento per
                           valori codificati in BCD

                      AAD (ASCII Adjust before Division)
                        Aggiustamento ASCII prima della
                        divisione. Converte due cifre BCD non
                        compattate, poste in AH e AL, in un
                        singolo valore BCD compattato (pronto
                        a fungere da dividendo in una
                        divisione) posto in AL, azzerando AH.

                                                                 22




Sergio PORCU                                                                     11
Sistemi a Microprocessore                                            Assembler 8086




                      Istruzioni di aggiustamento per
                           valori codificati in BCD

                      DAA (Decimal Adjust after Addition)
                        Aggiustamento BCD in seguito ad
                        addizione. Converte il risultato
                        potenzialmente scorretto e incoerente
                        di un'addizione fra valori BCD
                        (compattati), contenuto in AL, in un
                        valore BCD (compattato) corretto.

                                                                23




                      Istruzioni di aggiustamento per
                           valori codificati in BCD

                      DAS (Decimal Adjust after Subtraction)
                        Aggiustamento BCD in seguito a
                        sottrazione. Converte il risultato
                        potenzialmente scorretto e incoerente
                        di una sottrazione fra valori BCD
                        (compattati), contenuto in AL, in un
                        valore BCD (compattato) corretto.

                                                                24




Sergio PORCU                                                                    12
Sistemi a Microprocessore                                                         Assembler 8086




                            Istruzioni riguardanti i flag

                      CLC (CLear Carry) Reset del flag di Carry.
                      STC (SeT Carry) Set del flag di Carry.
                      CMC (CoMplement Carry) Inversione del flag
                        di Carry.
                      CLD (Clear Direction) Reset del flag di
                        Direzione.
                      STD (SeT Direction) Set del flag di Direzione.


                                                                             25




                            Istruzioni riguardanti i flag
                      CLI (CLear Interrupt) Disabilitazione delle interruzioni
                         mascherabili.
                      STI (SeT Interrupt) Abilitazione del riconoscimento
                         delle interruzioni mascherabili.
                      LAHF (Load AH from Flags) Caricamento AH dai flag.
                      SAHF (Store into AH Flags) Memorizzazione in AH del
                         registro dei flag.
                      PUSHF (PUSH Flags) Pone nello stack il contenuto del
                         registro dei flag.
                      POPF (POP Flags) Preleva il dato a 16 bit al top dello
                         stack e lo pone nel registro dei flag.
                                                                             26




Sergio PORCU                                                                                 13
Sistemi a Microprocessore                                                Assembler 8086




                               Istruzioni di salto
                      JMP (Jump) Salto incondizionato.
                      JA & JNBE (Jump if Above / Jump if Not Below
                        or Equal) Salta se CF=0 oppure se ZF=0.
                      JAE & JNB (Jump if Above or Equal / Jump if
                        Not Below) Salta se CF=0.
                      JB & JNAE (Jump if Below / Jump if Not Above
                        or Equal) Salta se CF=1.
                      JBE & JNA (Jump if Below or Equal / Jump if
                        Not Above) Salta se CF=1 oppure se ZF=1.
                                                                    27




                               Istruzioni di salto
                      JC (Jump if Carry) Salta se CF=1.
                      JCXZ (Jump if CX is zero) Salta se il contenuto
                        del registro CX è 0.
                      JE & JZ (Jump if Zero / Jump if Equal) Salta se
                        ZF=1.
                      JG & JNLE (Jump if Greater / Jump if Not Less
                        or Equal) Salta se (SF xor OF or ZF)=0.
                      JGE & JNL (Jump if Greater or Equal / Jump if
                        Not Less) Salta se (SF xor OF)=0.
                                                                    28




Sergio PORCU                                                                        14
Sistemi a Microprocessore                                              Assembler 8086




                               Istruzioni di salto
                      JL & JNGE (Jump if Less / Jump if Not Greater
                        or Equal) Salta se (SF xor OF)=1.
                      JLE & JNG (Jump if Less or Equal / Jump if
                        Not Greater) Salta se ((SF xor OF) or
                        ZF)=1.
                      JNC (Jump if Not Carry) Salta se CF=0.
                      JNE & JNZ (Jump if Not Zero / Jump if Not
                        Equal) Salta se ZF=0.
                      JNO (Jump if Not Overflow) Salta se OF=0.
                                                                  29




                               Istruzioni di salto

                      JNS (Jump if Not Sign) Salta se SF=0.
                      JNP & JPO (Jump if Not Parity / Jump if
                        Parity Odd) Salta se PF=0.
                      JO (Jump if Overflow) Salta se OF=1.
                      JP & JPE (Jump if Parity / Jump if Parity
                        Even) Salta se PF=1.
                      JS (Jump if Sign) Salta se SF=1.
                                                                  30




Sergio PORCU                                                                      15
Sistemi a Microprocessore                                                   Assembler 8086




                        Istruzioni di rotazione e shift
                      RCL (Rotate with Carry to the Left) Rotazione
                        a sinistra con Carry. Ruota a sinistra i bit del
                        suo operando di n posizioni, coinvolgendo
                        nella rotazione anche il flag di Carry.
                      RCR (Rotate with Carry to the Right)
                        Rotazione a destra con Carry. Come sopra
                        ma verso destra.
                      ROL (ROtate Left) Rotazione a sinistra (senza
                        Carry). Come RCL ma senza coinvolgere il
                        flag di Carry.
                                                                       31




                        Istruzioni di rotazione e shift
                      ROR (ROtate Right) Rotazione a destra (senza
                        Carry). Come RCR ma senza coinvolgere il
                        flag di Carry.
                      SAL (Shift Arithmetic Left) Shift aritmetico a
                        sinistra.
                      SHL (SHift Left) Shift logico a sinistra.
                        Introduce n zeri a destra shiftando il valore
                        di n posizioni. Se n=1 può essere
                        specificato direttamente, altrimenti occorre
                        agire indirettamente tramite CL (vedi RCL).
                        Il bit espulso a sinistra finisce nel flag di
                        Carry.
                                                                       32




Sergio PORCU                                                                           16
Sistemi a Microprocessore                                                   Assembler 8086




                        Istruzioni di rotazione e shift
                      SAR (Shift Arithmetic Right) Shift aritmetico a
                        destra. Shifta il valore di n posizioni a
                        destra, replicando a sinistra il bit di segno.
                        Se n=1 può essere specificato direttamente,
                        altrimenti occorre agire indirettamente
                        tramite CL (vedi RCL). Il bit espulso a destra
                        finisce nel flag di Carry.
                      SHR (SHift Right) Shift logico a destra.
                        Analogo allo shift aritmetico a destra, tranne
                        per il fatto che introduce a sinistra degli zeri
                        anziché replicare il bit di segno.
                                                                       33




                            Istruzioni di caricamento
                                     indirizzi

                      LDS (Load using DS) Carica un indirizzo a 32
                        bit dalla memoria in due registri, di cui uno è
                        (implicitamente) DS.
                      LES (Load using ES) Carica un indirizzo a 32
                        bit dalla memoria in due registri, di cui uno è
                        (implicitamente) ES.
                      LEA (Load Effective Address) Carica un
                        indirizzo a 16 bit (offset) dalla memoria a un
                        registro (a 16 bit).
                                                                       34




Sergio PORCU                                                                           17
Sistemi a Microprocessore                                                Assembler 8086




                                Istruzioni di ciclo

                      LOOP Decrementa CX e cicla (saltando alla
                        label indicata) se CX>0.
                      LOOPE (Loop if Equal).
                      LOOPZ (Loop if Zero) Decrementa CX e cicla
                        se CX≠0 e inoltre il flag ZF=1.
                      LOOPNE (Loop if Not Equal).
                      LOOPNZ (Loop if Not Zero) Decrementa CX e
                        cicla se CX≠0 e inoltre il flag ZF=0.

                                                                    35




                              Istruzioni riguardanti
                            operazioni sulle stringhe
                      CMPS (CoMPare Strings) Confronto fra due
                        stringhe. Confronta due stringhe, indirizzate
                        da SI la prima e da DI la seconda, entrambi
                        incrementati/decrementati automaticamente
                        a seconda del flag di direzione DF.
                      MOVS (MOVe String) Spostamento di una
                        stringa. Sposta una stringa di byte o di word
                        da una posizione all’altra in memoria.
                        Destinazione indirizzata da DI, sorgente da
                        SI, entrambi incrementati/decrementati (a
                        seconda del flag di direzione DF)
                        automaticamente.
                                                                    36




Sergio PORCU                                                                        18
Sistemi a Microprocessore                                                     Assembler 8086




                               Istruzioni riguardanti
                             operazioni sulle stringhe
                  SCAS (SCAn String) Scansione di una stringa.
                    Effettua la scansione di una stringa (indirizzata da
                    DI) confrontandola con AX o AL (per stringhe di
                    word o byte rispettivamente.). Nessuno di questi
                    valori viene alterato, ma i flag sono influenzati di
                    conseguenza. DI è automaticamente
                    incrementato/decrementato dopo l'operazione.
                  STOS (STOre in String) Memorizzazione in una
                    stringa. Trasferisce un operando contenuto in AX
                    o AL in una stringa destinazione puntata da DI,
                    che è automaticamente
                    incrementato/decrementato a seconda del valore
                    del flag di direzione.                               37




                            Istruzioni di ripetizione per
                                      stringhe
                       REP (REPeat) Prefisso di ripetizione per
                         MOVS. Ripete il trasferimento fino a fine
                         stringa (CX=0).
                       REPE (REPeat while Equal) Prefisso di
                         ripetizione per SCAS o CMPS.
                       REPZ (REPeat while Zero) Prefisso di
                         ripetizione per SCAS o CMPS. Ripete il
                         confronto o la scansione (CMPS o SCAS)
                         fino a fine stringa (CX=0) o fino a quando le
                         due stringhe diventano diverse (ZF=0).
                                                                         38




Sergio PORCU                                                                             19
Sistemi a Microprocessore                                                    Assembler 8086




                            Istruzioni di ripetizione per
                                      stringhe

                      REPNE (REPeat while Not Equal) Prefisso di
                        ripetizione per SCAS o CMPS.
                      REPNZ (REPeat while Not Zero) Prefisso di
                        ripetizione per SCAS o CMPS. Ripete il
                        confronto o la scansione (CMPS o SCAS)
                        fino a fine stringa (CX=0) o fino a quando le
                        due stringhe diventano uguali (ZF=1).


                                                                        39




                                  Istruzioni varie
                      MOV (MOVe) Trasferimento dati. Trasferisce
                         byte o word (8 o 16 bit risp.) fra registri,
                         memoria e valori immediati.
                      CALL (CALL) Chiamata a subroutine.
                      RET (RET) Ritorno da subroutine.
                      IN (INput) Input da porta esterna.
                      OUT (OUTput) Output da porta esterna.
                      LOCK (LOCK) Blocco del bus. Impedisce in
                         hardware l'accesso al bus da parte di altre
                         CPU durante l'esecuzione dell'istruzione
                         successiva
                                                                        40




Sergio PORCU                                                                            20
Sistemi a Microprocessore                                                 Assembler 8086




                                 Istruzioni varie

                      WAIT (WAIT) Attesa segnale di wait. Attende
                        un segnale hardware sul piedino WAIT. È
                        utile in presenza di coprocessori.
                      ESC (ESC) Codici di escape. È utilizzato per
                        inviare a un coprocessore esterno dei codici
                        di controllo.
                      HLT (HaLT) Stop del processore. Ferma il
                        processore fino all'arrivo di un'interruzione.

                                                                     41




                                 Istruzioni varie

                      INT (INTerrupt) Generazione di un’interruzione
                        software.
                      INTO (INTerrupt per Overflow) Generazione di
                        un’interruzione software a seguito di
                        overflow.
                      IRET (Interrupt RETurn) Ritorno da routine di
                        gestione di un’interruzione.
                      NOP (No OPeration) Nessuna operazione.

                                                                     42




Sergio PORCU                                                                         21
Sistemi a Microprocessore                                                     Assembler 8086




                                   Istruzioni varie
                  PUSH Pone un dato a 16 bit nello stack,
                    decrementando automaticamente di 2 il puntatore
                    SP.
                  POP Preleva un dato a 16 bit dallo stack,
                    incrementando automaticamente di 2 il puntatore
                    SP.
                  XCHG (eXCHanGe) Scambio. Scambia il contenuto
                    dei due operandi.
                  XLAT (translation) Traslazione indice-valore.
                    Sostituisce il contenuto di AL, visto come indice in
                    una tabella il cui indirizzo iniziale si suppone
                    posto in BX, con l'elemento della tabella di
                    indirizzo BX+AL. Risultato in AL.                    43




                              Istruzioni di confronto
                  L'istruzione di confronto viene generalmente posta
                      subito prima di un'istruzione di salto condizionato,
                      in modo che questo venga effettuato in base al
                      risultato del confronto stesso. In questo caso,
                      alcune tra le istruzioni di salto viste in precedenza
                      possono assumere un significato logico simile a
                      quello usato nei linguaggi evoluti.
                  La forma sintattica di un’istruzione di confronto è:
                                         CMP op1, op2
                  ove op1 e op2 devono avere la medesima
                      dimensione e dove op1 non può mai essere una
                      costante.
                                                                         44




Sergio PORCU                                                                             22
Sistemi a Microprocessore                                   Assembler 8086




                            Istruzioni di confronto
                      JA indirizzo di riferimento:
                      • salta se op1>op2
                      • op1 e op2 interi senza segno
                      JAE indirizzo di riferimento
                      • salta se op1>=op2
                      • op1 e op2 interi senza segno
                      JB indirizzo di riferimento
                      • salta se op1 < op2
                      • op1 e op2 interi senza segno

                                                       45




                            Istruzioni di confronto

                      JBE indirizzo di riferimento
                      • salta se op1 <= op2

                      • op1 e op2 interi senza segno

                      JE indirizzo di riferimento
                      • salta se op1 = op2

                      JG indirizzo di riferimento
                      • salta se op1 > op2

                      • op1 e op2 interi con segno
                                                       46




Sergio PORCU                                                           23
Sistemi a Microprocessore                                   Assembler 8086




                            Istruzioni di confronto
                      JGE indirizzo di riferimento
                      • salta se op1 >= op2
                      • op1 e op2 interi con segno
                      JL indirizzo di riferimento
                      • salta se op1 < op2
                      • op1 e op2 interi con segno
                      JLE indirizzo di riferimento
                      • salta se op1 <= op2
                      • op1 e op2 interi con segno

                                                       47




                            Istruzioni di confronto
                      JNA indirizzo di riferimento
                      • salta se op1 <= op2
                      • op1 e op2 interi senza segno
                      JNAE indirizzo di riferimento
                      • salta se op1 < op2
                      • op1 e op2 interi senza segno
                      JNB indirizzo di riferimento
                      • salta se op1 >= op2
                      • op1 e op2 interi senza segno

                                                       48




Sergio PORCU                                                           24
Sistemi a Microprocessore                                   Assembler 8086




                            Istruzioni di confronto

                      JNBE indirizzo di riferimento
                      • salta se op1 > op2

                      • op1 e op2 interi senza segno

                      JNE indirizzo di riferimento
                      • salta se op1 <> op2

                      JNG indirizzo di riferimento
                      • salta se op1 <= op2

                      • op1 e op2 interi con segno
                                                       49




                            Istruzioni di confronto
                      JNGE indirizzo di riferimento
                      • salta se op1 < op2
                      • op1 e op2 interi con segno
                      JNL indirizzo di riferimento
                      • salta se op1 >= op2
                      • op1 e op2 interi con segno
                      JNLE indirizzo di riferimento
                      • salta se op1 > op2
                      • op1 e op2 interi con segno

                                                       50




Sergio PORCU                                                           25
Sistemi a Microprocessore                                  Assembler 8086




                            Istruzioni di confronto

                      JNZ indirizzo di riferimento
                      • salta se op1 <> op2

                      JZ indirizzo di riferimento
                      • salta se op1 = op2




                                                      51




Sergio PORCU                                                          26

More Related Content

Viewers also liked

Algoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneAlgoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneSergio Porcu
 
PIC microcontroller
PIC microcontroller PIC microcontroller
PIC microcontroller Rami Alsalman
 
Bk001 it c18-step_by_step
Bk001 it c18-step_by_stepBk001 it c18-step_by_step
Bk001 it c18-step_by_stephawk2012
 
Sistema di numerazione
Sistema di numerazioneSistema di numerazione
Sistema di numerazioneGilda Tobia
 
Tesi Magistrale 2014
Tesi Magistrale 2014Tesi Magistrale 2014
Tesi Magistrale 2014Mirko Mancin
 
Interfaccia verso il BUS
Interfaccia verso il BUSInterfaccia verso il BUS
Interfaccia verso il BUSSergio Porcu
 
Diagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in PoloniaDiagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in PoloniaGilda Tobia
 
Lezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 oreLezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 oreMirko Mancin
 
Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088Sergio Porcu
 
Storia di roma in 5 minuti
Storia di roma in 5 minutiStoria di roma in 5 minuti
Storia di roma in 5 minutiPaolo Gallese
 
OpenOffice.org - Come rendersi indipendenti da MS Office
OpenOffice.org - Come rendersi indipendenti da MS OfficeOpenOffice.org - Come rendersi indipendenti da MS Office
OpenOffice.org - Come rendersi indipendenti da MS OfficeNicola Corti
 

Viewers also liked (20)

Algoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneAlgoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsione
 
PIC microcontroller
PIC microcontroller PIC microcontroller
PIC microcontroller
 
Bk001 it c18-step_by_step
Bk001 it c18-step_by_stepBk001 it c18-step_by_step
Bk001 it c18-step_by_step
 
Tesi Triennale
Tesi TriennaleTesi Triennale
Tesi Triennale
 
Sistema di numerazione
Sistema di numerazioneSistema di numerazione
Sistema di numerazione
 
Assembly2
Assembly2Assembly2
Assembly2
 
Diagrammi di Bode
Diagrammi di BodeDiagrammi di Bode
Diagrammi di Bode
 
Investimenti
InvestimentiInvestimenti
Investimenti
 
Tesi Magistrale 2014
Tesi Magistrale 2014Tesi Magistrale 2014
Tesi Magistrale 2014
 
Interfaccia verso il BUS
Interfaccia verso il BUSInterfaccia verso il BUS
Interfaccia verso il BUS
 
Diagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in PoloniaDiagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in Polonia
 
Lezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 oreLezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 ore
 
Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088
 
Assembly
AssemblyAssembly
Assembly
 
Array
ArrayArray
Array
 
Arduino&Raspberry
Arduino&RaspberryArduino&Raspberry
Arduino&Raspberry
 
Storia di roma in 5 minuti
Storia di roma in 5 minutiStoria di roma in 5 minuti
Storia di roma in 5 minuti
 
Il pic 16 f84a
Il pic 16 f84aIl pic 16 f84a
Il pic 16 f84a
 
OpenOffice.org - Come rendersi indipendenti da MS Office
OpenOffice.org - Come rendersi indipendenti da MS OfficeOpenOffice.org - Come rendersi indipendenti da MS Office
OpenOffice.org - Come rendersi indipendenti da MS Office
 
Il plc
Il plcIl plc
Il plc
 

More from Sergio Porcu

Costi, break even point, analisi make or buy
Costi, break even point, analisi make or buyCosti, break even point, analisi make or buy
Costi, break even point, analisi make or buySergio Porcu
 
Analisi degli scostamenti
Analisi degli scostamentiAnalisi degli scostamenti
Analisi degli scostamentiSergio Porcu
 
Algoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeAlgoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeSergio Porcu
 
Il temporizzatore d'intervalli 8253
Il temporizzatore d'intervalli 8253Il temporizzatore d'intervalli 8253
Il temporizzatore d'intervalli 8253Sergio Porcu
 
L'interrupt nell'8086
L'interrupt nell'8086L'interrupt nell'8086
L'interrupt nell'8086Sergio Porcu
 
Reti di Calcolatori - Crittografia
Reti di Calcolatori - CrittografiaReti di Calcolatori - Crittografia
Reti di Calcolatori - CrittografiaSergio Porcu
 
Gestione date in PL/SQL
Gestione date in PL/SQLGestione date in PL/SQL
Gestione date in PL/SQLSergio Porcu
 
Traduzione dal modello ER al relazionale
Traduzione dal modello ER al relazionaleTraduzione dal modello ER al relazionale
Traduzione dal modello ER al relazionaleSergio Porcu
 
Soluzione generalizzazioni in diagrammi ER
Soluzione generalizzazioni in diagrammi ERSoluzione generalizzazioni in diagrammi ER
Soluzione generalizzazioni in diagrammi ERSergio Porcu
 
Diagrammi Entità/Relazioni (ER)
Diagrammi Entità/Relazioni (ER)Diagrammi Entità/Relazioni (ER)
Diagrammi Entità/Relazioni (ER)Sergio Porcu
 

More from Sergio Porcu (13)

Costi, break even point, analisi make or buy
Costi, break even point, analisi make or buyCosti, break even point, analisi make or buy
Costi, break even point, analisi make or buy
 
Analisi degli scostamenti
Analisi degli scostamentiAnalisi degli scostamenti
Analisi degli scostamenti
 
Algoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeAlgoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, code
 
Il temporizzatore d'intervalli 8253
Il temporizzatore d'intervalli 8253Il temporizzatore d'intervalli 8253
Il temporizzatore d'intervalli 8253
 
Il Turbo Debugger
Il Turbo DebuggerIl Turbo Debugger
Il Turbo Debugger
 
L'interrupt nell'8086
L'interrupt nell'8086L'interrupt nell'8086
L'interrupt nell'8086
 
Metodo di Newton
Metodo di NewtonMetodo di Newton
Metodo di Newton
 
Reti di Calcolatori - Crittografia
Reti di Calcolatori - CrittografiaReti di Calcolatori - Crittografia
Reti di Calcolatori - Crittografia
 
Mappe di Karnaugh
Mappe di KarnaughMappe di Karnaugh
Mappe di Karnaugh
 
Gestione date in PL/SQL
Gestione date in PL/SQLGestione date in PL/SQL
Gestione date in PL/SQL
 
Traduzione dal modello ER al relazionale
Traduzione dal modello ER al relazionaleTraduzione dal modello ER al relazionale
Traduzione dal modello ER al relazionale
 
Soluzione generalizzazioni in diagrammi ER
Soluzione generalizzazioni in diagrammi ERSoluzione generalizzazioni in diagrammi ER
Soluzione generalizzazioni in diagrammi ER
 
Diagrammi Entità/Relazioni (ER)
Diagrammi Entità/Relazioni (ER)Diagrammi Entità/Relazioni (ER)
Diagrammi Entità/Relazioni (ER)
 

Recently uploaded

Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxlorenzodemidio01
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxlorenzodemidio01
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................giorgiadeascaniis59
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileNicola Rabbi
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxtecongo2007
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxtecongo2007
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....giorgiadeascaniis59
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................giorgiadeascaniis59
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaSalvatore Cianciabella
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxlorenzodemidio01
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxlorenzodemidio01
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxtecongo2007
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.camillaorlando17
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxlorenzodemidio01
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoyanmeng831
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxlorenzodemidio01
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxlorenzodemidio01
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxtecongo2007
 

Recently uploaded (18)

Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 

Assembler 8086

  • 1. Sistemi a Microprocessore Assembler 8086 Sistemi a Microprocessore ASSEMBLER 8086: CARATTERISTICHE E ISTRUZIONI FONDAMENTALI 1 Modalità di indirizzamento Sono disponibili, in generale, le modalità immediata, tramite registro, assoluta (o diretta), indiretta, indicizzata. Tuttavia, non tutte le modalità sono attive con ogni tipo di istruzione. 2 Sergio PORCU 1
  • 2. Sistemi a Microprocessore Assembler 8086 Indirizzamento immediato L’operando è una costante che esegue immediatamente il codice mnemonico dell’istruzione. Esempio: ADD AL, 8 3 Indirizzamento tramite registro L’operando è contenuto in un registro indicato dal codice mnemonico dell’istruzione. Esempio: MOV CX, DX 4 Sergio PORCU 2
  • 3. Sistemi a Microprocessore Assembler 8086 Indirizzamento assoluto L’operando si trova a un indirizzo specificato direttamente nell’istruzione. Esempi: ADD ALFA, 8 MOV BX, RES 5 Indirizzamento indiretto L’operando si trova a un indirizzo puntato da un registro. Esempi: ADD AX, (BX) MOV (BX), CX 6 Sergio PORCU 3
  • 4. Sistemi a Microprocessore Assembler 8086 Indirizzamento indicizzato L’operando si trova a un indirizzo puntato da un registro base e/o un registro indice (BX, BP, SI o DI). A seconda di quali registri sono specificati, questa modalità dà luogo a molte varianti: • con base (solo registri BX e BP; può essere presente un registro di segmento) • con indice (solo registri SI o DI; non possono essere presenti registri di segmento) • con entrambi 7 Indirizzamento indicizzato con base Esempi: ADD AX, (BX+8) MOV (BP+COST), CX 8 Sergio PORCU 4
  • 5. Sistemi a Microprocessore Assembler 8086 Indirizzamento indicizzato con indice Esempi: ADD AX, (DI+8) MOV (SI+COST), CX 9 Indirizzamento indicizzato con base e indice Esempi: MOV (BX+DI), AX ADD (BX+DI+COST), AX 10 Sergio PORCU 5
  • 6. Sistemi a Microprocessore Assembler 8086 Elenco istruzioni • Istruzioni aritmetiche • Istruzioni logiche e di confronto • Istruzioni di aggiustamento per valori codificati in BCD • Istruzioni riguardanti i flag • Istruzioni di salto • Istruzioni di rotazione e shift • Istruzioni di caricamento indirizzi • Istruzioni di ciclo • Istruzioni riguardanti operazioni sulle stringhe • Istruzioni di ripetizione per stringhe • Istruzioni varie 11 Istruzioni aritmetiche ADD (ADD) Addizione. ADC (Add with Carry) Addizione con riporto. SUB (SUBtract) Sottrazione. SBB (SUBtract with Borrow) Sottrazione con prestito. 12 Sergio PORCU 6
  • 7. Sistemi a Microprocessore Assembler 8086 Istruzioni aritmetiche MUL (MULtiply) Moltiplicazione senza segno. Il moltiplicando e il risultato sono sempre posti in registri fissi: solo il moltiplicatore (che è anche l'unico dato specificato) può essere preso da sorgenti diverse. Più esattamente, per moltiplicatori a 8 bit il moltiplicando sta sempre in AL e il risultato è sempre fornito in AX, mentre per moltiplicatori a 16 bit il moltiplicando sta sempre in AX e il risultato è sempre fornito in DX e AX. In entrambi i casi, se le parti più significative del prodotto (rispettivamente AH o DX) sono nulle, i flag CF e OF vengono resettati. 13 Istruzioni aritmetiche IMUL (Integer MULtiply) Moltiplicazione con segno (fra interi). Analoga a MUL, a parte il fatto che operandi e risultato sono considerati con segno. DIV (DIVide) Divisione senza segno. Il dividendo e il risultato sono sempre posti in registri fissi: solo il divisore (che è anche l'unico dato specificato) può essere preso da sorgenti diverse. Più esattamente, per divisori di 8 bit il dividendo è sempre in AX e il resto e il quoziente sono forniti rispettivamente in AH e AL, mentre per divisori di 16 bit il dividendo sta sempre in AX e DX, il resto è fornito in DX e il quoziente in AX. 14 Sergio PORCU 7
  • 8. Sistemi a Microprocessore Assembler 8086 Istruzioni aritmetiche IDIV (Integer DIVdide) Divisione con segno (fra interi). Analoga a DIV, tranne per il fatto che gli operandi sono considerati con segno. Il resto assume il segno del dividendo. NEG (NEGate) Inversione del segno. Inverte il segno di un valore, sottraendolo da zero. Modifica il dato su cui opera. INC (INCrement) Incremento (di 1). DEC (DECrement) Decremento (di 1). 15 Istruzioni di conversione byte/word/double word CBW (Convert Byte to Word) Conversione da byte a word. Converte un byte (posto in AL) in una word (posta in AX) estendendo il bit di segno del byte verso sinistra, fino a riempire la word. CWD (Convert Word to Double word) Conversione da word a double word. Converte una word (posta in AX) in una double word (posta in DX e AX) estendendo il bit di segno della word verso sinistra, fino a riempire la double word. 16 Sergio PORCU 8
  • 9. Sistemi a Microprocessore Assembler 8086 Istruzioni logiche e di confronto NOT not logico. AND and logico. OR or logico. XOR or esclusivo logico. TEST (TEST) Confronto logico. Effettua un "and“ logico fra i due operandi (che non vengono alterati) influenzando di conseguenza i flag e permettendo di condizionare le operazioni successive (tipicamente salti). 17 Istruzioni logiche e di confronto CMP (CoMPare) Confronto aritmetico fra due valori. Effettua una sottrazione fra i due valori senza modificare però nessuno dei due operandi e scartando il risultato. Influenza lo stato dei flag in modo da permettere di condizionare di conseguenza le operazioni successive. 18 Sergio PORCU 9
  • 10. Sistemi a Microprocessore Assembler 8086 Istruzioni di aggiustamento per valori codificati in BCD AAA (ASCII Adjust after Addition) Aggiustamento ASCII dopo l’addizione. Dopo un'addizione fra due numeri BCD non compattati, converte il risultato, contenuto di AL, in un numero BCD anch'esso non compattato e correttamente rappresentato. Perciò, al termine il nibble più significativo di AL è zero. Il valore finale è contenuto in AH (che può essere stato incrementato di 1 in caso di riporti) e AL. Si ricorda che un valore BCD si dice compatto quando ogni cifra è rappresentata da un nibble (e quindi un byte contiene due cifre), e non compatto quando invece ogni cifra è rappresentata su un byte, il cui nibble più significativo è mantenuto azzerato. 19 Istruzioni di aggiustamento per valori codificati in BCD AAS (ASCII Adjust after Subtraction) Aggiustamento ASCII dopo la sottrazione. Dopo una sottrazione fra due valori BCD non compattati (il minuendo contenuto in AH e AL, il sottraendo in qualche altro registro a 8 bit), converte il risultato, posto in AH e AL, in un valore BCD corretto anch'esso non compattato posto in AH (che può essere stato decrementato di 1 in caso di prestito) e AL. 20 Sergio PORCU 10
  • 11. Sistemi a Microprocessore Assembler 8086 Istruzioni di aggiustamento per valori codificati in BCD AAM (ASCII Adjust after Multiplication) Aggiustamento ASCII dopo la moltiplicazione. Converte il risultato del prodotto (effettuato tramite MUL) di due numeri BCD non compattati, inizialmente posti in AH e AL, in un valore BCD pure non compattato e correttamente rappresentato, posto in AX. 21 Istruzioni di aggiustamento per valori codificati in BCD AAD (ASCII Adjust before Division) Aggiustamento ASCII prima della divisione. Converte due cifre BCD non compattate, poste in AH e AL, in un singolo valore BCD compattato (pronto a fungere da dividendo in una divisione) posto in AL, azzerando AH. 22 Sergio PORCU 11
  • 12. Sistemi a Microprocessore Assembler 8086 Istruzioni di aggiustamento per valori codificati in BCD DAA (Decimal Adjust after Addition) Aggiustamento BCD in seguito ad addizione. Converte il risultato potenzialmente scorretto e incoerente di un'addizione fra valori BCD (compattati), contenuto in AL, in un valore BCD (compattato) corretto. 23 Istruzioni di aggiustamento per valori codificati in BCD DAS (Decimal Adjust after Subtraction) Aggiustamento BCD in seguito a sottrazione. Converte il risultato potenzialmente scorretto e incoerente di una sottrazione fra valori BCD (compattati), contenuto in AL, in un valore BCD (compattato) corretto. 24 Sergio PORCU 12
  • 13. Sistemi a Microprocessore Assembler 8086 Istruzioni riguardanti i flag CLC (CLear Carry) Reset del flag di Carry. STC (SeT Carry) Set del flag di Carry. CMC (CoMplement Carry) Inversione del flag di Carry. CLD (Clear Direction) Reset del flag di Direzione. STD (SeT Direction) Set del flag di Direzione. 25 Istruzioni riguardanti i flag CLI (CLear Interrupt) Disabilitazione delle interruzioni mascherabili. STI (SeT Interrupt) Abilitazione del riconoscimento delle interruzioni mascherabili. LAHF (Load AH from Flags) Caricamento AH dai flag. SAHF (Store into AH Flags) Memorizzazione in AH del registro dei flag. PUSHF (PUSH Flags) Pone nello stack il contenuto del registro dei flag. POPF (POP Flags) Preleva il dato a 16 bit al top dello stack e lo pone nel registro dei flag. 26 Sergio PORCU 13
  • 14. Sistemi a Microprocessore Assembler 8086 Istruzioni di salto JMP (Jump) Salto incondizionato. JA & JNBE (Jump if Above / Jump if Not Below or Equal) Salta se CF=0 oppure se ZF=0. JAE & JNB (Jump if Above or Equal / Jump if Not Below) Salta se CF=0. JB & JNAE (Jump if Below / Jump if Not Above or Equal) Salta se CF=1. JBE & JNA (Jump if Below or Equal / Jump if Not Above) Salta se CF=1 oppure se ZF=1. 27 Istruzioni di salto JC (Jump if Carry) Salta se CF=1. JCXZ (Jump if CX is zero) Salta se il contenuto del registro CX è 0. JE & JZ (Jump if Zero / Jump if Equal) Salta se ZF=1. JG & JNLE (Jump if Greater / Jump if Not Less or Equal) Salta se (SF xor OF or ZF)=0. JGE & JNL (Jump if Greater or Equal / Jump if Not Less) Salta se (SF xor OF)=0. 28 Sergio PORCU 14
  • 15. Sistemi a Microprocessore Assembler 8086 Istruzioni di salto JL & JNGE (Jump if Less / Jump if Not Greater or Equal) Salta se (SF xor OF)=1. JLE & JNG (Jump if Less or Equal / Jump if Not Greater) Salta se ((SF xor OF) or ZF)=1. JNC (Jump if Not Carry) Salta se CF=0. JNE & JNZ (Jump if Not Zero / Jump if Not Equal) Salta se ZF=0. JNO (Jump if Not Overflow) Salta se OF=0. 29 Istruzioni di salto JNS (Jump if Not Sign) Salta se SF=0. JNP & JPO (Jump if Not Parity / Jump if Parity Odd) Salta se PF=0. JO (Jump if Overflow) Salta se OF=1. JP & JPE (Jump if Parity / Jump if Parity Even) Salta se PF=1. JS (Jump if Sign) Salta se SF=1. 30 Sergio PORCU 15
  • 16. Sistemi a Microprocessore Assembler 8086 Istruzioni di rotazione e shift RCL (Rotate with Carry to the Left) Rotazione a sinistra con Carry. Ruota a sinistra i bit del suo operando di n posizioni, coinvolgendo nella rotazione anche il flag di Carry. RCR (Rotate with Carry to the Right) Rotazione a destra con Carry. Come sopra ma verso destra. ROL (ROtate Left) Rotazione a sinistra (senza Carry). Come RCL ma senza coinvolgere il flag di Carry. 31 Istruzioni di rotazione e shift ROR (ROtate Right) Rotazione a destra (senza Carry). Come RCR ma senza coinvolgere il flag di Carry. SAL (Shift Arithmetic Left) Shift aritmetico a sinistra. SHL (SHift Left) Shift logico a sinistra. Introduce n zeri a destra shiftando il valore di n posizioni. Se n=1 può essere specificato direttamente, altrimenti occorre agire indirettamente tramite CL (vedi RCL). Il bit espulso a sinistra finisce nel flag di Carry. 32 Sergio PORCU 16
  • 17. Sistemi a Microprocessore Assembler 8086 Istruzioni di rotazione e shift SAR (Shift Arithmetic Right) Shift aritmetico a destra. Shifta il valore di n posizioni a destra, replicando a sinistra il bit di segno. Se n=1 può essere specificato direttamente, altrimenti occorre agire indirettamente tramite CL (vedi RCL). Il bit espulso a destra finisce nel flag di Carry. SHR (SHift Right) Shift logico a destra. Analogo allo shift aritmetico a destra, tranne per il fatto che introduce a sinistra degli zeri anziché replicare il bit di segno. 33 Istruzioni di caricamento indirizzi LDS (Load using DS) Carica un indirizzo a 32 bit dalla memoria in due registri, di cui uno è (implicitamente) DS. LES (Load using ES) Carica un indirizzo a 32 bit dalla memoria in due registri, di cui uno è (implicitamente) ES. LEA (Load Effective Address) Carica un indirizzo a 16 bit (offset) dalla memoria a un registro (a 16 bit). 34 Sergio PORCU 17
  • 18. Sistemi a Microprocessore Assembler 8086 Istruzioni di ciclo LOOP Decrementa CX e cicla (saltando alla label indicata) se CX>0. LOOPE (Loop if Equal). LOOPZ (Loop if Zero) Decrementa CX e cicla se CX≠0 e inoltre il flag ZF=1. LOOPNE (Loop if Not Equal). LOOPNZ (Loop if Not Zero) Decrementa CX e cicla se CX≠0 e inoltre il flag ZF=0. 35 Istruzioni riguardanti operazioni sulle stringhe CMPS (CoMPare Strings) Confronto fra due stringhe. Confronta due stringhe, indirizzate da SI la prima e da DI la seconda, entrambi incrementati/decrementati automaticamente a seconda del flag di direzione DF. MOVS (MOVe String) Spostamento di una stringa. Sposta una stringa di byte o di word da una posizione all’altra in memoria. Destinazione indirizzata da DI, sorgente da SI, entrambi incrementati/decrementati (a seconda del flag di direzione DF) automaticamente. 36 Sergio PORCU 18
  • 19. Sistemi a Microprocessore Assembler 8086 Istruzioni riguardanti operazioni sulle stringhe SCAS (SCAn String) Scansione di una stringa. Effettua la scansione di una stringa (indirizzata da DI) confrontandola con AX o AL (per stringhe di word o byte rispettivamente.). Nessuno di questi valori viene alterato, ma i flag sono influenzati di conseguenza. DI è automaticamente incrementato/decrementato dopo l'operazione. STOS (STOre in String) Memorizzazione in una stringa. Trasferisce un operando contenuto in AX o AL in una stringa destinazione puntata da DI, che è automaticamente incrementato/decrementato a seconda del valore del flag di direzione. 37 Istruzioni di ripetizione per stringhe REP (REPeat) Prefisso di ripetizione per MOVS. Ripete il trasferimento fino a fine stringa (CX=0). REPE (REPeat while Equal) Prefisso di ripetizione per SCAS o CMPS. REPZ (REPeat while Zero) Prefisso di ripetizione per SCAS o CMPS. Ripete il confronto o la scansione (CMPS o SCAS) fino a fine stringa (CX=0) o fino a quando le due stringhe diventano diverse (ZF=0). 38 Sergio PORCU 19
  • 20. Sistemi a Microprocessore Assembler 8086 Istruzioni di ripetizione per stringhe REPNE (REPeat while Not Equal) Prefisso di ripetizione per SCAS o CMPS. REPNZ (REPeat while Not Zero) Prefisso di ripetizione per SCAS o CMPS. Ripete il confronto o la scansione (CMPS o SCAS) fino a fine stringa (CX=0) o fino a quando le due stringhe diventano uguali (ZF=1). 39 Istruzioni varie MOV (MOVe) Trasferimento dati. Trasferisce byte o word (8 o 16 bit risp.) fra registri, memoria e valori immediati. CALL (CALL) Chiamata a subroutine. RET (RET) Ritorno da subroutine. IN (INput) Input da porta esterna. OUT (OUTput) Output da porta esterna. LOCK (LOCK) Blocco del bus. Impedisce in hardware l'accesso al bus da parte di altre CPU durante l'esecuzione dell'istruzione successiva 40 Sergio PORCU 20
  • 21. Sistemi a Microprocessore Assembler 8086 Istruzioni varie WAIT (WAIT) Attesa segnale di wait. Attende un segnale hardware sul piedino WAIT. È utile in presenza di coprocessori. ESC (ESC) Codici di escape. È utilizzato per inviare a un coprocessore esterno dei codici di controllo. HLT (HaLT) Stop del processore. Ferma il processore fino all'arrivo di un'interruzione. 41 Istruzioni varie INT (INTerrupt) Generazione di un’interruzione software. INTO (INTerrupt per Overflow) Generazione di un’interruzione software a seguito di overflow. IRET (Interrupt RETurn) Ritorno da routine di gestione di un’interruzione. NOP (No OPeration) Nessuna operazione. 42 Sergio PORCU 21
  • 22. Sistemi a Microprocessore Assembler 8086 Istruzioni varie PUSH Pone un dato a 16 bit nello stack, decrementando automaticamente di 2 il puntatore SP. POP Preleva un dato a 16 bit dallo stack, incrementando automaticamente di 2 il puntatore SP. XCHG (eXCHanGe) Scambio. Scambia il contenuto dei due operandi. XLAT (translation) Traslazione indice-valore. Sostituisce il contenuto di AL, visto come indice in una tabella il cui indirizzo iniziale si suppone posto in BX, con l'elemento della tabella di indirizzo BX+AL. Risultato in AL. 43 Istruzioni di confronto L'istruzione di confronto viene generalmente posta subito prima di un'istruzione di salto condizionato, in modo che questo venga effettuato in base al risultato del confronto stesso. In questo caso, alcune tra le istruzioni di salto viste in precedenza possono assumere un significato logico simile a quello usato nei linguaggi evoluti. La forma sintattica di un’istruzione di confronto è: CMP op1, op2 ove op1 e op2 devono avere la medesima dimensione e dove op1 non può mai essere una costante. 44 Sergio PORCU 22
  • 23. Sistemi a Microprocessore Assembler 8086 Istruzioni di confronto JA indirizzo di riferimento: • salta se op1>op2 • op1 e op2 interi senza segno JAE indirizzo di riferimento • salta se op1>=op2 • op1 e op2 interi senza segno JB indirizzo di riferimento • salta se op1 < op2 • op1 e op2 interi senza segno 45 Istruzioni di confronto JBE indirizzo di riferimento • salta se op1 <= op2 • op1 e op2 interi senza segno JE indirizzo di riferimento • salta se op1 = op2 JG indirizzo di riferimento • salta se op1 > op2 • op1 e op2 interi con segno 46 Sergio PORCU 23
  • 24. Sistemi a Microprocessore Assembler 8086 Istruzioni di confronto JGE indirizzo di riferimento • salta se op1 >= op2 • op1 e op2 interi con segno JL indirizzo di riferimento • salta se op1 < op2 • op1 e op2 interi con segno JLE indirizzo di riferimento • salta se op1 <= op2 • op1 e op2 interi con segno 47 Istruzioni di confronto JNA indirizzo di riferimento • salta se op1 <= op2 • op1 e op2 interi senza segno JNAE indirizzo di riferimento • salta se op1 < op2 • op1 e op2 interi senza segno JNB indirizzo di riferimento • salta se op1 >= op2 • op1 e op2 interi senza segno 48 Sergio PORCU 24
  • 25. Sistemi a Microprocessore Assembler 8086 Istruzioni di confronto JNBE indirizzo di riferimento • salta se op1 > op2 • op1 e op2 interi senza segno JNE indirizzo di riferimento • salta se op1 <> op2 JNG indirizzo di riferimento • salta se op1 <= op2 • op1 e op2 interi con segno 49 Istruzioni di confronto JNGE indirizzo di riferimento • salta se op1 < op2 • op1 e op2 interi con segno JNL indirizzo di riferimento • salta se op1 >= op2 • op1 e op2 interi con segno JNLE indirizzo di riferimento • salta se op1 > op2 • op1 e op2 interi con segno 50 Sergio PORCU 25
  • 26. Sistemi a Microprocessore Assembler 8086 Istruzioni di confronto JNZ indirizzo di riferimento • salta se op1 <> op2 JZ indirizzo di riferimento • salta se op1 = op2 51 Sergio PORCU 26