dal 2015 - visita n. 1480
IstruzioniJMP
IstruzioniJMP

 

Istruzioni di salto


L'ordine con cui le istruzioni di un programma vengono eseguite viene chiamato "flusso". Ogni programma deve poter modificare il flusso delle sue istruzioni in base agli input che riceve ed ai risultati in corso di elaborazione. Nel linguaggio macchina sono presenti istruzioni che permettono di cambiare l'ordine con cui il programma viene eseguito.
Queste istruzioni dette di salto vengono chiamate in Inglese jump oppure branch. Nelle CPU x86 i salti possono essere incondizionati, condizionati, ripetitivi.
Un salto rompe la continuità del flusso delle istruzioni e fa in modo che la prossima istruzione eseguita non sia quella che segue nella memoria, ma un'altra. Il flusso del programma salta quindi ad un'istruzione diversa da quella "naturale".

Come si usano
Tutte le istruzioni di salto hanno una sintassi comune, ed il risultato della loro esecuzione consiste nel saltare, se la condizione è vera, ad un punto del programma specificato da una "etichetta".

            JMP  etichetta
            ....
            ....
etichetta:  MOV  AX,CX

Salti incondizionati

Un salto è incondizionato quando viene eseguito sempre e comunque.
I processori x86 chiamano questa istruzione JMP, ma effettivamente bisognerebbe parlare di istruzioni JMP.
Proprio così, le istruzioni JMP e non l'istruzione JMP, perchè dietro l'espressione mnemonica JMP, usata dall'assembler, si celano in effetti ben tre tipi di JMP che chiameremo: short, long, far.

I primi due tipi (short e long) agiscono in intorni di memoria limitati, e per questo sono detti anche NEAR. Il tipo short agisce in un intorno di +/- 128 byte, ossia è in grado di raggiungere locazioni di memoria che distano non più di 128 byte dall'istruzione stessa. Il tipo long agisce all'interno di un segmento (64 Kb), ossia è in grado di raggiungere qualsiasi locazione di memoria purchè all'interno dello stesso segmento di appartenenza.

I due tipi NEAR sono anche chiamati relativi perchè calcolano la distanza della locazione da raggiungere con riferimento a se stessi; pertanto sono anche autorilocabili.

L'ultimo tipo (far) è in grado di raggiungere qualunque locazione di memoria all'interno del MegaByte indirizzabile da un 8086. E' anche chiamato assoluto perchè utilizza, all'interno del suo codice, l'indirizzo completo della locazione da raggiungere; pertanto non è una istruzione autorilocabile.
La tabella seguente riassume ed esemplifica alcune delle caratteristiche principali delle istruzioni JMP.

MNEMOTIPOOPCODEBYTEESEMPICODIFICACOMMENTI
JMPshortEB ..23000 JMP 3020EB 1ESalto Relativo in avanti
    3000 JMP 2FE0EB DESalto Relativo all'indietro
JMPlongE9 .. ..33000 JMP 4000E9 FD 0FSalto Relativo in avanti
    3000 JMP 2000E9 FD EFSalto Relativo all'indietro
JMPfarEA .. .. .. ..53000 JMP F030:105BEA 5B 10 30 F0Salto Assoluto



Salti condizionati

Oltre a saltare, un programma deve anche essere in grado di fare confronti fra numeri e di eseguire parti di codice diverse in base ai risultati dei confronti. Perché un programma "prenda decisioni" si devono introdurre delle jump che saltano a punti diversi in base al risultato delle operazioni precedenti, ossia le jump "condizionate. Le jump condizionate saltano all'indirizzo indicato nell'istruzione solo se è vera una certa condizione, altrimenti il programma prosegue come se l'istruzione di salto non esistesse.


Salti ripetitivi

Sono casi particolari dei salti condizionati. Vengono ripetuti ciclicamente finchè una determinata condizione non si avvera.

La tabella seguente raggruppa le principali istruzioni di salto, salto condizionato e salto ripetuto. Le fasce di colore caratterizzano gruppi di istruzioni accomunate da una qualche caratteristica, che, in generale, riguarda la tipologia della condizione di salto.

JMPSalta in ogni caso. (Per il codice, vedi tabella precedente.)**
JOSalta se il flag O è attivo. Overflow.70
JNOSalta se il flag O è nullo. Niente Overflow.71
JC
JB - JNAE
Salta se il flag C è attivo. Dopo una CMP se il primo operando è inferiore al secondo operando.72
JNC
JAE - JNB
Salta se il flag C è nullo. Dopo una CMP se il primo operando è superiore o uguale al secondo operando.73
JZ - JE Salta se il flag Z è attivo. Dopo una CMP quando il primo operando è uguale al secondo operando.74
JNZ - JNE Salta se il flag Z è nullo. Dopo una CMP quando il primo operando è diverso dal secondo operando.75
JSSalta se il flag S è attivo. Numero con bit di Segno (Signed).78
JNSSalta se il flag S è nullo. Numero senza bit di Segno (Not Signed).79
JP - JPESalta se il flag P è attivo. Parità Pari (Even).7A
JNP - JPOSalta se il flag P è nullo. Parità Dispari (Odd).7B
JBE - JNASalta se almeno uno dei flag C e Z è attivo.
Dopo una CMP quando il primo operando è inferiore o uguale al secondo operando.
76
JA - JNBESalta se i flag C e Z sono entrambi nulli.
Dopo una CMP quando il primo operando è superiore al secondo operando.
77
JL - JNGESalta se i flag S e O sono diversi tra loro.
Dopo una CMP quando il primo operando è minore del secondo operando.
7C
JGE - JNLSalta se i flag S e O sono uguali tra loro.
Dopo una CMP quando il primo operando è maggiore o uguale al secondo operando.
7D
JLE - JNGSalta se i flag S e O sono diversi tra loro e il flag Z è attivo.
Dopo una CMP quando il primo operando è minore o uguale al secondo operando.
7E
JG - JNLESalta se i flag S e O sono uguali tra loro e il flag Z è nullo.
Dopo una CMP quando il primo operando è maggiore del secondo operando.
7F
JCXZSalta se il registro CX=0.E3
LOOPSalta ripetutamente, decrementando CX, finchè CX=0.
Prima di eseguire l'istruzione, CX deve contenere un opportuno valore iniziale.
E2
LOOPZ
LOOPE
Salta ripetutamente finchè non divenga attivo il flag Z.E1
LOOPNZ
LOOPNE
Salta ripetutamente finchè non divenga nullo il flag Z.E0


















Menù
Introduzione
I registri del Pentium
Il modello della memoria
Interazione CPU-RAM
I Servizi Linux - Int 80h
I File in Linux
Schema programma NASM
Esempi Write/Read
Esercizi
lods-stos-movs
gcc + nasm
Gestione Command Line
Stack
Stack-Esercizi
Libreria Funzioni Base
Esercizi con la Libreria
Libreria Macro Base
Test 5 esercizi


Sistemi di numerazione
Elementi Bistabili
Strutture di Controllo
Istruzioni JMP
Hello World
I/O di Testo
Command Line
Colori e Macro
Introduzione I/O
Porta Parallela


AppuntiAsm-386.html
Linux ELF Howto
Linux Assembly Howto
Il linguaggio PC Assembly
Assembly di Paul A.Carter
Assembly di Claudio Daffra



A letto il mio vero amore è sempre stato il sonno che mi salvava permettendomi di sognare.
Luigi Pirandello

Valid CSS!
pagina generata in 0.001 secondi