assembler8086-8088

2
  . Trasferimento DATI Operazioni sulle STRINGHE MOV dest, sorg Muove un byte o una word REP Ripete PUSH sorgente Inserisce una word nello stack REPE Ripete finché uguale POP destinazione Estrae una word dallo stack REPZ Ripete finché zero XCHG dest, sorg Scambia un byte o una word REPNE Ripete finché non uguale XLAT tabella-sorgente Traduce un byte REPNZ Ripete finché diverso da 0 IN accum, porta Input di un byte o una word MOVS strg-dest, strg-sorg Muove una stringa (byte o word) OUT  porta, accum Output di un by te o una word MOVSB Muove una stringa (byte) LEA reg16, mem16 Carica un indirizzo effettivo (EA) MOVSW Muove una stringa (word) LDS reg16, mem32 Carica un indirizzo completo in DS:reg16 CMPS strg-dest, strg-sorg Confronta stringhe (byte o word) LES reg16, mem32 Carica un indirizzo completo in ES:reg16 CMPSB Confronta una stringa (byte) LAHF Carica AH con il registro flag (0-7) CMPSW Confronta una stringa (word) SAHF Carica il registro flag (0-7) con AH SCAS strg-dest, strg-sorg Scandisce stringhe (byte o word) PUSHF Push del registro flag nello stack SCASB Scandisce una stringa (byte) POPF Pop del registro flag dallo stack SCASW Scandisce una stringa (word) Istruzioni ARITMETI CHE LODS strg-dest, strg-sorg Carica stringhe (byte o word) ADD dest, sorg Somma byte o word LODSB Carica stringa (byte) ADC dest, sorg Somma byte o word con riporto (carry) LODSW Carica una stringa (word) INC destinazione Incrementa byte o word di 1 STOS strg-dest, strg-sorg Memorizza stringhe (byte o word) AAA ASCII ad just per addizione STOSB Memorizza stringa (byte) DAA Decimal adjust per addizione STOSW Memorizza stringa (word) SUB dest, sorg Sottrae byte o word SBB dest, sorg Sottrae byte o word con riporto (borrow) DEC destinazione Decrementa byte o word di 1 NEG destinazione Cambia segno a byte o word CMP dest, sorg Confronta byte o word AAS ASCII adjust per sottrazione DAS Decimal adjust per sottrazione MUL sorgente Moltiplica byte o word senza segno IMUL sorgente Moltiplica byte o word con segno AAM ASCII adjust per moltiplicazione DIV sorgente Divide byte o word senza segno IDIV sorgente Divide byte o word con segno AAD ASCII ad just per divisione CBW Converte byte in word CWD Converte word in doubleword Istruzioni LOGICHE AND dest, sorg And di byte o word OR dest, sorg Or di byte o word XOR dest, sorg Xor di byte o word NOT destinazione Not di byte o word Salti Condizionati TEST dest, sorg Test di byte o word JA CF = 0 e ZF = 0 SAL dest, cont Shift aritmetico di byte o word a sinistra JAE CF = 0 SAR dest, cont Shift aritmetico di byte o word a destra JB CF = 1 SHL dest, cont Shift logico di byte o word a sinistra JBE CF = 1 o ZF = 1 SHR dest, cont Shift logico di byte o word a destra JC CF = 1 ROL dest, cont Ruota byte o word a sinistra JE ZF = 1 ROR dest, cont Ruota byte o word a destra JG ZF = 0 e SF = OF RCL dest, cont Ruota byte o word a sinistra con carry JGE SF = OF RCR dest, cont Ruota byte o word a sinistra con carry JL SF  OF Trasferimento di CONTROLLO JLE ZF = 1 o SF  OF CALL target Chiama un sottoprogramma JNA CF = 1 o ZF = 1 RET [pop-value] Ritorna da un sottoprogramma JNAE CF = 1 JMP target Salta in modo incondizionato JNB CF = 0 Jxxx short-label Salta sotto condizione JNBE CF = 0 e ZF = 0 JCXZ short-label Salta se il registro CX = 0 JNC CF = 0 LOOP short-label Cicla JNE ZF = 0 LOOPE short-label Cicla se uguale JNG ZF = 1 o SF  OF LOOPNE short-label Cicla se non uguale JNGE SF  OF LOOPZ short-label Cicla se zero JNL SF = OF LOOPNZ short-label Cicla se diversa da zero JNLE ZF = 0 e SF = OF INT tipo-di-interrupt Chiama una routine di servizio degli interrupt JNO OF = 0 INTO Chiama la routine dell’int 4 se overflow JNP PF = 0 IRET Ritorna da una routine di servizio degli int JNS SF = 0 Controllo del processore (FLAG) JNZ ZF = 0 STC Pone a 1 il flag di riporto (CF) JO OF = 1 CLC Azzera il flag di riporto (CF) JP PF = 1 CMC Complementa il flag di riporto (CF) JPE PF = 1 STD Pone a 1 il flag di direzione (DF) JPO PF = 0 CLD Azzera il flag di direzione (DF) JS SF = 0 STI Pone a 1 il flag di interrupt enabled (IF) JZ ZF = 1 CLI Azzera il flag di interrupt enabled (IF) HLT Aspetta un reset o un interrput WAIT Aspetta un segnale esterno su linea TEST ESC Invia una istruzione ad un proc. esterno LOCK Blocca il bus durante l’esecuzione dell’istruz associata NOP  Nessuna operazione

description

i comandi di assembler

Transcript of assembler8086-8088

  • Linguaggio ASSEMBLER per 8086/8088 Riassunto v 0.2

    Autore: Fabrizio Medici

    Trasferimento DATI Operazioni sulle STRINGHE MOV dest, sorg Muove un byte o una word REP Ripete PUSH sorgente Inserisce una word nello stack REPE Ripete finch uguale POP destinazione Estrae una word dallo stack REPZ Ripete finch zero XCHG dest, sorg Scambia un byte o una word REPNE Ripete finch non uguale XLAT tabella-sorgente Traduce un byte REPNZ Ripete finch diverso da 0 IN accum, porta Input di un byte o una word MOVS strg-dest, strg-sorg Muove una stringa (byte o word) OUT porta, accum Output di un byte o una word MOVSB Muove una stringa (byte) LEA reg16, mem16 Carica un indirizzo effettivo (EA) MOVSW Muove una stringa (word) LDS reg16, mem32 Carica un indirizzo completo in DS:reg16 CMPS strg-dest, strg-sorg Confronta stringhe (byte o word) LES reg16, mem32 Carica un indirizzo completo in ES:reg16 CMPSB Confronta una stringa (byte) LAHF Carica AH con il registro flag (0-7) CMPSW Confronta una stringa (word) SAHF Carica il registro flag (0-7) con AH SCAS strg-dest, strg-sorg Scandisce stringhe (byte o word) PUSHF Push del registro flag nello stack SCASB Scandisce una stringa (byte) POPF Pop del registro flag dallo stack SCASW Scandisce una stringa (word) Istruzioni ARITMETICHE LODS strg-dest, strg-sorg Carica stringhe (byte o word) ADD dest, sorg Somma byte o word LODSB Carica stringa (byte) ADC dest, sorg Somma byte o word con riporto (carry) LODSW Carica una stringa (word) INC destinazione Incrementa byte o word di 1 STOS strg-dest, strg-sorg Memorizza stringhe (byte o word) AAA ASCII ad just per addizione STOSB Memorizza stringa (byte) DAA Decimal adjust per addizione STOSW Memorizza stringa (word) SUB dest, sorg Sottrae byte o word SBB dest, sorg Sottrae byte o word con riporto (borrow) DEC destinazione Decrementa byte o word di 1 NEG destinazione Cambia segno a byte o word CMP dest, sorg Confronta byte o word AAS ASCII adjust per sottrazione DAS Decimal adjust per sottrazione MUL sorgente Moltiplica byte o word senza segno IMUL sorgente Moltiplica byte o word con segno AAM ASCII adjust per moltiplicazione DIV sorgente Divide byte o word senza segno IDIV sorgente Divide byte o word con segno AAD ASCII ad just per divisione CBW Converte byte in word CWD Converte word in doubleword Istruzioni LOGICHE AND dest, sorg And di byte o word OR dest, sorg Or di byte o word XOR dest, sorg Xor di byte o word NOT destinazione Not di byte o word Salti Condizionati TEST dest, sorg Test di byte o word JA CF = 0 e ZF = 0 SAL dest, cont Shift aritmetico di byte o word a sinistra JAE CF = 0 SAR dest, cont Shift aritmetico di byte o word a destra JB CF = 1 SHL dest, cont Shift logico di byte o word a sinistra JBE CF = 1 o ZF = 1 SHR dest, cont Shift logico di byte o word a destra JC CF = 1 ROL dest, cont Ruota byte o word a sinistra JE ZF = 1 ROR dest, cont Ruota byte o word a destra JG ZF = 0 e SF = OF RCL dest, cont Ruota byte o word a sinistra con carry JGE SF = OF RCR dest, cont Ruota byte o word a sinistra con carry JL SF OF Trasferimento di CONTROLLO JLE ZF = 1 o SF OF CALL target Chiama un sottoprogramma JNA CF = 1 o ZF = 1 RET [pop-value] Ritorna da un sottoprogramma JNAE CF = 1 JMP target Salta in modo incondizionato JNB CF = 0 Jxxx short-label Salta sotto condizione JNBE CF = 0 e ZF = 0 JCXZ short-label Salta se il registro CX = 0 JNC CF = 0 LOOP short-label Cicla JNE ZF = 0 LOOPE short-label Cicla se uguale JNG ZF = 1 o SF OF LOOPNE short-label Cicla se non uguale JNGE SF OF LOOPZ short-label Cicla se zero JNL SF = OF LOOPNZ short-label Cicla se diversa da zero JNLE ZF = 0 e SF = OF INT tipo-di-interrupt Chiama una routine di servizio degli interrupt JNO OF = 0 INTO Chiama la routine dellint 4 se overflow JNP PF = 0 IRET Ritorna da una routine di servizio degli int JNS SF = 0 Controllo del processore (FLAG) JNZ ZF = 0 STC Pone a 1 il flag di riporto (CF) JO OF = 1 CLC Azzera il flag di riporto (CF) JP PF = 1 CMC Complementa il flag di riporto (CF) JPE PF = 1 STD Pone a 1 il flag di direzione (DF) JPO PF = 0 CLD Azzera il flag di direzione (DF) JS SF = 0 STI Pone a 1 il flag di interrupt enabled (IF) JZ ZF = 1 CLI Azzera il flag di interrupt enabled (IF) HLT Aspetta un reset o un interrput WAIT Aspetta un segnale esterno su linea TEST ESC Invia una istruzione ad un proc. esterno LOCK Blocca il bus durante lesecuzione dellistruz associata NOP Nessuna operazione

  • Linguaggio ASSEMBLER per 8086/8088 Riassunto v 0.2

    Autore: Fabrizio Medici

    Direttive pi utlizzate nome SEGMENT [allineamento] [combinazione] [classe] nome ENDS

    Nome: nome simbolico. Allineamento: BYTE, WORD, PARA. Combinazione: controlla le modalit di collegamento di segmenti con stesso nome ma in moduli diversi, PUBLIC, STACK. Classe: linker.

    ASSUME segReg:nome [,segReg:nome ] ASSUME segReg:NOTHING ASSUME NOTHING

    Indica a quale segmento un registro sta puntando. NOTHING cancella lassociazione tra registri e segmenti.

    nome PROC [distanza] nome ENDP

    Definisce linizio di un sottoprogramma. NEA: allinterno del segmento. FAR: anche da altri segmenti.

    DB DW DD Data Byte (8bit) Word (16bit) Double (32bit). Ricordarsi luso di dup() nome EQU espressione Permette di assegnare un nome simbolico ad una costante. L= rassegna. END [startAddress] Indica la fine del programma sorgente. PUBLIC symbol [, symbol ] Rende visibili e accessibili da altri moduli uno o + simboli. EXTERN nome [:tipo] [, nome [:tipo] ] Uno o + simboli sono definiti in un altro modulo nome GROUP nome1 [, nome2 ] Permette di riunire insieme dei segmenti in un unico segmento, accessibile mediante lo stesso registro

    segmento. Operatori pi utilizzati segName : espressione Permette di utilizzare un segmento diverso da quello di default SEG espressione Fornisce lindirizzo del segmento di una espressione OFFSET espress Fornisce loffset di una espressione allinterno di un segmento tipo PTR espress Modifica il tipo di una espressione SHORT espress Predispone per un salto entro 128 +128 byte I Registri AX = [AH:AL] Accumulator AX: Word multiply, word divide, word I/O, AL: Byte multiply, byte divide, byte I/O, translate, decimal arithmetic BX = [BH:BL] Base Translate CX = [CH:CL] Count CX: String operation, loops, CL: variable shift and rotate DX = [DH:DL] Data DX: Word multiply, word divide, indirect I/O FLAG SP Stack Pointer Stack operations OF Overflow BP Base Pointer DF Direction SI Source Index String operations IF Interrupt-enabled DI Destination Index String operations TF Trap CS Code Segment SF Sign DS Data Segment ZF Zero SS Stack Segment AF Auxiliary ES Extra Segment PF Partity IP Insctruction Pointer CF Carry Modalit di calcolo dellindirizzo logico Tipo di riferimento

    alla memoria Segmento di default

    Altri segmenti utlizzabili

    OFFSET

    Fetch dellistruz. CS Nessuno IP Operaz.sullo stack SS Nessuno SP

    Variabile DS CS, ES, SS Indirizzo effettivo Stringa sorg DS CS, ES, SS SI Stringa dest ES Nessuno DI

    BP come reg base SS CD, DS, ES Indirizzo effettivo