En el lenguaje ensamblador x86 , la instrucción realiza un salto incondicional. Dicha instrucción transfiere el flujo de ejecución cambiando el registro de puntero de instrucción . Hay varios códigos de operación diferentes que realizan un salto; dependiendo de si el procesador está en modo real o en modo protegido , y se utiliza una instrucción de anulación, las instrucciones pueden tomar punteros de 16 bits , 32 bits o segmento: desplazamiento . [1]JMP
Hay muchas formas diferentes de saltos: saltos relativos, condicionales , absolutos e indirectos de registro .
Los siguientes ejemplos ilustran:
- un salto relativo con un puntero de 16 bits;
- un salto de longitud (entre segmentos), un salto relativo con un puntero de 32 bits;
- y un salto absoluto indirecto de registro utilizando el registro EAX .
(Tenga en cuenta que aunque el primer y segundo saltos son relativos, comúnmente se muestra la dirección de destino en lugar del desplazamiento relativo codificado en el código de operación).
Ejemplo uno: Cargue IP con el nuevo valor 0x89AB
, luego cargue CS con 0xACDC
e IP con 0x5578
.
JMP 0x89AB JMP 0xACDC : 0x5578
Ejemplo dos: Cargue EIP con el valor 0x56789AB1
, solo en modo protegido o modo irreal .
JMP 0x56789AB1
Ejemplo tres: Salte al valor almacenado en el registro EAX, solo en modo protegido.
JMP EAX
Referencias
- ^ "Manual del desarrollador de software de arquitectura Intel, volumen 2: manual de referencia del conjunto de instrucciones (6,5 MB)" (PDF) . Archivado desde el original (PDF) el 19 de febrero de 2009 . Consultado el 3 de noviembre de 2009 .