Sei sulla pagina 1di 2

Linguaggio ASSEMBLER per 8086/8088 – Riassunto v 0.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 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 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

A tore: Fabrizio Medici

Linguaggio ASSEMBLER per 8086/8088 – Riassunto v 0.2

Direttive più utlizzate nome SEGMENT [allineamento] [combinazione] [‘classe’] nome ENDS Nome: nome simbolico.
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 l’associazione tra registri e segmenti.
nome PROC [distanza]
nome ENDP
Definisce l’inizio di un sottoprogramma.
NEA: all’interno del segmento. FAR: anche da altri segmenti.
DB
DW DD
Data Byte (8bit) Word (16bit) Double (32bit). Ricordarsi l’uso 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 l’indirizzo del segmento di una espressione
OFFSET espress
Fornisce l’offset di una espressione all’interno 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 dell’indirizzo logico
Tipo di riferimento
alla memoria
Segmento
Altri segmenti
OFFSET
di default
utlizzabili
Fetch dell’istruz.
Operaz.sullo stack
Variabile
Stringa sorg
Stringa dest
BP come reg base
CS
Nessuno
Nessuno
CS, ES, SS
CS, ES, SS
Nessuno
CD, DS, ES
IP
SS
SP
DS
Indirizzo effettivo
DS
SI
ES
DI
SS
Indirizzo effettivo

A tore: Fabrizio Medici