explicacion_saltos

4
 Ar qu it ect ur a de Co mp ut ado res (3º. G.I.I.) 1 INSTRUCCIONES DE SALTO (  P 8086) Puede realizarse una primera clasificación de los saltos en función de la existencia de alguna con- dición para que se produzcan:  Salto incondicional.  Salto condicional. 1. SAL TO INCONDICIONAL . Siempre que se ejecuta la instrucción se produce el salto, sin depender de que se cumpla ninguna condición. Sólo existe una instrucción de salto incondicional:  J MP dest i no_s al t o Según dónde esté situado el destino, hay tres tipos de saltos:  Salto c ercano (near).  Salto lejano (far).  Salto corto (short). 1.1. SALTO CERCANO (NEAR). Es un salto dentro de un mismo segmento de código. Por tal razón, des t i no_salto sólo contie- ne el desplazamiento (16 bits) de la dirección de memoria en la que se encuentra la instrucción a la que se desea saltar. La ejecución del salto consiste en la sustitución del contenido del contador del programa (registro IP) por dest i no_salto: IP  dest i no_sal t o des t i no_salto puede especificarse de tres formas distintas:  Mediante una etiqueta.  Mediante una variable.  Mediante un registro. 1.1.1. Mediante una etiqueta. Una etiqueta es un valor inmediato (es la dirección de memoria de la instrucción destino del salto). Debe ser una etiqueta de tipo near  (se escribe seguida del carácter “:”, recoge sólo el desplaza- miento de la dirección de memoria, y debe estar situada en el mismo segmento de código que la instrucción de salto).  JMP sal to ;... s al t o: ; Desti no del sal t o ;...

description

informatica

Transcript of explicacion_saltos

7/17/2019 explicacion_saltos

http://slidepdf.com/reader/full/explicacionsaltos 1/4

 Arqu itectura de Computadores (3º. G.I.I.)

1

INSTRUCCIONES DE SALTO

P 8086)

Puede realizarse una primera clasificación de los saltos en función de la existencia de alguna con-dición para que se produzcan:

•  Salto incondicional.

•  Salto condicional.

1. SALTO INCONDICIONAL.

Siempre que se ejecuta la instrucción se produce el salto, sin depender de que se cumpla ningunacondición.

Sólo existe una instrucción de salto incondicional: J MP dest i no_sal t o

Según dónde esté situado el destino, hay tres tipos de saltos:

•  Salto cercano (near).

•  Salto lejano (far).

•  Salto corto (short).

1.1. SALTO CERCANO (NEAR).

Es un salto dentro de un mismo segmento de código. Por tal razón, dest i no_sal t o sólo contie-

ne el desplazamiento (16 bits) de la dirección de memoria en la que se encuentra la instrucción ala que se desea saltar. La ejecución del salto consiste en la sustitución del contenido del contador

del programa (registro IP) por dest i no_sal t o:

IP ← dest i no_sal t o 

dest i no_sal t o puede especificarse de tres formas distintas:

•  Mediante una etiqueta.

•  Mediante una variable.

•  Mediante un registro.

1.1.1. Mediante una etiqueta.

Una etiqueta es un valor inmediato (es la dirección de memoria de la instrucción destino del salto).Debe ser una etiqueta de tipo near   (se escribe seguida del carácter “:”, recoge sólo el desplaza-miento de la dirección de memoria, y debe estar situada en el mismo segmento de código que lainstrucción de salto).

 J MP sal t o; . . .

sal t o: ; Desti no del sal t o

; . . .

7/17/2019 explicacion_saltos

http://slidepdf.com/reader/full/explicacionsaltos 2/4

 Arqu itectura de Computadores (3º. G.I.I.)

2

1.1.2. Mediante una variable.

Debe ser de tamaño word. Una variable es el desplazamiento de una dirección de memoria. Enesa dirección y la siguiente se halla el desplazamiento (16 bits) de la dirección de la instruccióndestino del salto.

; Segment o de dat os:t abl a_sal t o D W   dest i no1, dest i no2, dest i no3

; Segment o de códi go:; . . .

dest i no3: ; Dest i no del sal t o; . . . J MP t abl a_sal t o[ 4]; . . .

También pueden utilizarse variables individuales en lugar de vectores.

1.1.3. Mediante un registro.

Los registros del 8086 son de 16 bits, tamaño apropiado para contener el desplazamiento de ladirección de memoria de la instrucción destino del salto.

MOV BX, dest i no3 J MP BX; . . .

dest i no3: ; Dest i no del sal t o; . . .

1.2. SALTO LEJANO (FAR).

Se trata de un salto a una instrucción situada en otro segmento de código distinto. En este caso,

es necesario que dest i no_sal t o contenga tanto el segmento como el desplazamiento (32 bits)

de la dirección de memoria en la que se encuentra la instrucción a la que se desea saltar. La eje-cución del salto consiste en la sustitución del contenido de los registros de segmento de código(CS) y contador del programa (IP) por el segmento y desplazamiento contenidos en des-

t i no_sal t o, respectivamente:CS:IP← dest i no_sal t o 

dest i no_sal t o puede especificarse de dos formas distintas:

•  Mediante una etiqueta.

•  Mediante una variable.

En el caso del salto lejano no cabe la posibilidad de especificar el destino a través de un registro,puesto que no hay registros de 32 bits en el 8086.

1.2.1. Mediante una etiqueta.

Una etiqueta es un valor inmediato (es la dirección de memoria de la instrucción destino del salto).Debe ser una etiqueta de tipo far  (se escribe sin ir seguida del carácter “:”, recoge tanto el seg-

7/17/2019 explicacion_saltos

http://slidepdf.com/reader/full/explicacionsaltos 3/4

 Arqu itectura de Computadores (3º. G.I.I.)

3

mento como el desplazamiento de la dirección de memoria, y debe estar situada en otro segmentode código distinto del que contiene la instrucción de salto –si está situada en el mismo se produceun error–).

; Segment o de códi go 1:; . . .

 J MP sal t o; . . .

; Segment o de códi go 2:; . . .

sal t o ; Dest i no del sal t o; . . .

Observación:El ensamblador MASM produce un error cuando se crea una etiqueta que no termina en“:”. Una solución consiste en utilizar etiquetas definidas como near  (es decir, con “:”), que

además permiten saltar a ellas desde el mismo segmento de código (salto cercano o near),y redefinirlas como far  con PTR  en la misma instrucción del salto cuando se salte desde

otro segmento de código distinto (salto lejano o far):

; Segment o de códi go 1:; . . . J MP FAR PTR et i q_near; . . .

; Segment o de códi go 2:; . . .

et i q_near :  ; Dest i no del sal t o

; . . .

1.2.2. Mediante una variable.

Debe ser de tamaño double word. Una variable es el desplazamiento de una dirección de memo-ria. En esa dirección y las siguientes se hallan el segmento y el desplazamiento (32 bits) de ladirección de la instrucción a la que hay que saltar.

; Segment o de dat os:

t abl a_sal t o DD  dest i no1, dest i no2, dest i no3

; Segment o de códi go 1:; . . . J MP t abl a_sal t o[ 8]; . . . J MP t abl a_sal t o J MP t abl a_sal t o[ 0] ; Equi val ent e a l a ant er i or  ; . . .

; Segment o de códi go 2:; . . .

dest i no1:  ; Dest i no de sal t o

; . . .dest i no3:  ; Dest i no de sal t o

; . . .

7/17/2019 explicacion_saltos

http://slidepdf.com/reader/full/explicacionsaltos 4/4

 Arqu itectura de Computadores (3º. G.I.I.)

4

También pueden utilizarse variables individuales en lugar de vectores.

1.3. SALTO CORTO (SHORT).

Es un salto entre dos instrucciones situadas en el mismo segmento de código y que no debendistar entre sí más de –128/+127 bytes. En este tipo de salto, dest i no_sal t o  no contiene la

dirección de destino, sino la longitud en bytes del salto. Se trata de un número entero con signo de1 byte, razón por la que abarca un rango de valores comprendidos entre –128 y +127. La ejecu-ción del salto consiste en la suma al contador del programa (registro IP) de la longitud del salto,

contenida en dest i no_sal t o:

IP ← IP + dest i no_sal t o (–128/+127 bytes)

El programador no tiene que preocuparse por este tipo de salto (incondicional corto): es el ensam-blador el que empleará un salto corto (short) en lugar de cercano (near) cuando la longitud delsalto lo permita.

2. SALTO CONDICIONAL.

La instrucción de salto incorpora implícitamente una condición. Si se cumple, se produce el salto;en caso contrario, el programa continúa con la instrucción que sigue a la de salto. El cumplimientode la condición se comprueba mediante el estado de los flags, por lo que las instrucciones de saltocondicional deben ir precedidas de alguna instrucción aritmética o lógica que actualice el valor delos flags.

Existen múltiples instrucciones de salto condicional, en función de la condición que debe cumplirsepara que se produzca el salto (pág. 203 de los apuntes del 8086):

 J xx dest i no_sal t o  (xx → condición)

Muy importante: todos los saltos condicionales son cortos (short).

•  Son, por tanto, saltos entre instrucciones situadas en el mismo segmento de código y queno disten entre sí más de –128/+127 bytes.

•  Al igual que en los saltos incondicionales cortos (short), dest i no_sal t o no contiene la

dirección de destino, sino la longitud en bytes del salto (es un número entero con signo de1 byte, con un rango de –128/+127). La ejecución del salto consiste en la suma al contadordel programa (registro IP) de la longitud del salto, contenida en dest i no_sal t o:

IP ← IP + dest i no_sal t o (–128/+127 bytes)

  dest i no_sal t o es siempre una etiqueta de tipo near  (seguida del carácter “:”).•  El hecho de que todos los saltos condicionales sean cortos (short) supone una limitación

muy importante, ya que el destino del salto sólo puede situarse unas pocas instruccionespor delante o por detrás de la de salto (no –128/+127 instrucciones, sino menos, porque lamayoría de las instrucciones del 8086 ocupan más de 1 byte, y no todas ocupan lo mismo).Si se desea saltar condicionalmente a mayor distancia habrá que hacer una etapa inter-media: salto condicional a una instrucción próxima, y salto incondicional desde ésta hastael destino deseado.