LE ISTRUZIONI ASSEMBLY

Le istruzioni assembly x86 sono caratterizzate dalle seguenti caratteristiche:

  •  Nome simbolico: è una parola chiave riconosciuta dall’assemblatore che individua il tipo di istruzione ed è seguita da nessuno, uno o due operandi.
  •  Modalità di indirizzamento: la sintassi indicata per i vari metodi di indirizzamento è la seguente:
    – immediato a 8/16/32 bit;
    – registro a 8/16/32 bit;
    – memoria a 8/16/32 bit.
  • Flag alterati: flag alterati dalle istruzioni.

L’assegnazione con MOV

MOV destinazione,sorgente

L’istruzione MOV possiede due operandi: l’operando di destra viene copiato in quello di sinistra.
L’operando sorgente può essere un valore immediato, un registro o una cella di memoria a cui accedere in modo diretto, indiretto o indicizzato.
L’operando destinazione può essere un registro, una cella di memoria a cui accedere in modo diretto, indiretto o indicizzato ma non un valore immediato. I due operandi devono avere le
stesse dimensioni.

Modalità di indirizzamento:

MOV memoria,registro

MOV registro,memoria

MOV registro,immediato

MOV memoria,immediato

MOV registro,registro

Le variabili in assembly

Le variabili sono i simboli con cui il programmatore fa riferimento ai dati. Gli attributi di una variabilesono:

  • l’indirizzo
  • il tipo
  • la visibilità

Per dichiarare una variabile esistono alcuni tipi primitivi che corrispondono sostanzialmente a quelli offerti direttamente dall’architettura (byte, word, double word). I tipi predefiniti in TASM sono: Byte, Word, DWord.

La sintassi per la dichiarazione di una variabile è la seguente

variabile DB | DW | DDW valore iniziale

dove variabile può essere un nome qualunque lungo al massimo 8 caratteri

esempi:

.DATA
var1  DB 00h
var2 DW ?

LE ISTRUZIONI ARITMETICHE

Istruzione INC
L’istruzione INC incrementa l’operando di 1. L’operando può essere un registro, una cella di memoria indirizzata in modo diretto, indiretto o indicizzato. Negli ultimi due casi è necessario specifi care la dimensione dell’operando che non può essere dedotta dall’istruzione.
Sintassi:
INC operando
Flag alterati:
ZF, SF, OF, PF
Istruzione DEC
L’istruzione DEC funziona in modo inverso all’istruzione INC decrementa di un l’operando
L’addizione ADD
L’istruzione ADD permette di sommare il primo operando con il secondo operando, quindi colloca il risultato nel primo operando. Il precedente contenuto del primo operando viene in questo modo sostituito dalla sua somma con il secondo operando (accumulo) mentre il secondo operando rimane inalterato. Il primo operando può essere un registro, una cella di memoria indirizzata in modo diretto, indiretto o indicizzato; il secondo operando può consistere in un registro, una cella di memoria indirizzata in modo diretto, indiretto o indicizzato o un dato immediato. Anche in questo caso i due operandi devono avere le stesse dimensioni, che possono essere Byte, Word o DWord.
Sintassi:
ADD operando1,operando2

ADD registro,registro

ADD registro,memoria

ADD memoria,registro

ADD registro,immediato

ADD memoria,immediato

Flag alterati:

ZF, CF, SF, OF, PF

Esiste un’istruzione che effettua la somma tra due operandi tenendo conto anche del riporto precedente presente nel Carry fl ag: si tratta di ADC

La sottrazione SUB

L’istruzione SUB effettua una sottrazione tra il secondo e il primo operando copiando il risultato nel primo operando. Il precedente contenuto del primo operando viene quindi sostituito dalla sua sottrazione con il secondo operando mentre il secondo operando rimane inalterato. Il primo operando può essere un registro, una cella di memoria indirizzata in modo diretto, indiretto o indicizzato; il secondo operando può consistere in un registro, una cella di memoria indirizzata in modo direttoindiretto o indicizzato o un dato immediato. I due operandi devono avere le stesse dimensioni, che  possono essere Byte, Word o DWord.

Sintassi:
SUB operando1,operando2

Modalità di indirizzamento:

SUB registro,registro

SUB registro,memoria

SUB registro,immediato

SUB memoria,registro

SUB memoria,immediato

Flag alterati

ZF, CF, SF, OF, PF

La divisione  DIV

L’istruzione DIV effettua una divisione ponendo a denominatore l’operando indicato.

Se l’operando è a 8 bit effettua la divisione tra AX e l’operando.

  • il quoziente viene collocato nel registro AL
  • il resto nel registro AH.

Se l’operando è a 16 bit effettua la divisione tra il numero a 32 bit formato dalla coppia di registri DX:AX e l’operando

  •  il quoziente viene collocato nel registro AX
  • il resto nel registro DX.

I flag CF e OF sono settati se il valore occupa la parte alta del risultato.

Nella versione IDIV viene applicata la regola del segno, cioè se i segni degli operandi sono concordi il risultato è positivo mentre se sono discordi è negativo

Sintassi:

DIV operando

Modalità di indirizzamento:

DIV registro

DIV memoria

Flag alterati:

CF, OF

La moltiplicazione  MUL

L’istruzione MUL effettua una moltiplicazione con  l’operando 

  • Se l’operando è a 8 bit viene moltiplicato il registro AL per l’operando  il prodotto viene collocato nel registro AX. 
  • Se l’operando è a 16 bit viene moltiplicato il registro AX per l’operando e il prodotto viene collocato nella coppia di registri DX:AX, dove DX rappresenta i 16 bit più significativi e AX i 16 bit meno significativi del prodotto (32 bit).
  • i flag CF e OF sono settati se il valore occupa la parte alta del risultato.

Nella versione IMUL viene applicata la regola del segno, cioè se i segni degli operandi sono concordi il risultato è positivo mentre se sono discordi è negativo.

MUL operando

Flag alterati:

CF, OF

Modalità di indirizzamento:

MUL registro

MUL memoria

Lo scambio  XCHG

L’istruzione XCHG (Exchange) possiede due operandi il cui contenuto viene scambiato in un’unica operazione. Per effettuare lo scambio viene usato un registro interno invisibile al programmatore. Gli operandi possono essere rappresentati da un registro, da una cella di memoria con indirizzamento direttoindiretto o indicizzato ma non da un valore immediato.

Sintassi:

XCHG operando1,operando2

Modalità di indirizzamento:

XCHG registro,registro

XCHG registro,memoria

XCHG memoria,registro

Flag alterati:

nessuno

Leave a Reply


Latest Posts

AAA