2015-03-28 14 views
5

Ho letto che i salti brevi devono essere usati quando il salto relativo è inferiore a 124 nell'indirizzo, e i salti lunghi dovrebbero essere usati altrimenti.Differenza tra salto lungo e corto (x86)

Qual è la differenza in termini di operazioni eseguite nella CPU/prestazioni tra i due tipi di salti su x86?

+0

Di quale set di istruzioni stai parlando? –

+1

set di istruzioni x86 – nadavge

+0

E non è possibile trovare alcuna documentazione sulle singole istruzioni per questa CPU estremamente * ben documentata? – usr2564301

risposta

6

Esistono in realtà tre tipi di istruzioni JMP; corto, vicino e lontano (lungo).

A breve JMP è il relativo JMP a cui si fa riferimento. È codificato come due byte; l'attuale JMP e il numero di byte +/- relativo all'IP corrente.

Un salto vicino consente di saltare all'interno del "segmento" corrente (utilizzando i termini della modalità reale) o all'interno dell'area di memoria attualmente selezionata nel selettore CS.

A Long o Far JMP include inoltre un selettore (o un segmento in modalità reale)

È possibile cercare i tempi per voi stessi. La più grande differenza relativa al tempo è dovuta al diverso numero di byte che devono essere letti per eseguire lo JMP.

+0

Che cos'è questo selettore e come viene in pratica questo selettore? Per quanto ne so nel salto in lungo, fornisco semplicemente un indirizzo – nadavge

+0

L'indirizzo è composto da un selettore e da un offset. Come in CS: 1234. CS è usato per definire un selettore fuori dal GDT o dal LDT quando è in modalità protetta. Normalmente sarebbe qualcosa di piuttosto piccolo, specialmente se confrontato con la memoria segmentata in modalità reale, dal momento che sta semplicemente selezionando una voce dalla tabella piuttosto che definire un effettivo indirizzo di memoria. L'indirizzo di memoria è definito nel GDT/LDT. –

+0

Dovrei aggiungere, sembra effettivamente lo stesso sia che tu sia in modalità reale o protetta ... sono i valori effettivi che sono diversi sotto il cofano e il lavoro svolto in anticipo per configurare il GDT (che non è necessario in modalità reale dato che usi la memoria segmentata) –