2.6.3 Instrucciones De Saltos

 

Empecemos por el salto sin condiciones, con el que podremos cambiar el control a cualquier punto del programa.

Sería como el “Goto” del Basic, símplemente transferir el control a otro punto del programa. La orden es

JMP ( de Jump, salto )

Si record is a estas alturas los registros CS:IP, se podra ver que‚ es lo que hace realmente la instrucción, y no es mas que incrementar o decrementar IP para llegar a la zona del programa a la que queremos transferir el control ( IP es el Offset que indica la zona de memoria que contiene la siguiente instrucción a ejecutar, y CS el segmento )

El formato mas sencillo para el salto sería JMP 03424h, lo que saltaría a esa zona.

Pero es digamos que “algo pesado” calcular en que‚ dirección va a estar esa instrucción, con lo que utilizaremos etiquetas. Aquí hay un ejemplo, en el que de paso se repasa un poco:

MOV AX,0CC34h

MOV CL,22h

JMP PALANTE

VUELVE: CMP BX,AX

JMP FIN

PALANTE: MOV BX,AX

JMP VUELVE

FIN: XOR CX,CX

Ahora voy a comentar un poco el programa. Tras la primera instrucción, AX vale 0CC34h, y tras la segunda, CL vale 22h. Despues se realiza un salto a la instrucción etiquetada con “PALANTE”.

La etiqueta ha de estar continuada por dos puntos ‘:’, y puede ser llamada desde cualquier lugar del programa. Tambi‚n podremos hacer un MOV AX,[PALANTE], como hacíamos antes con un MOV AX,[BX], pero asignando a AX el valor que haya en la dirección en la que esta “PALANTE”.

El caso, que tras el salto a “PALANTE”, se copia el valor del registro BX en AX, y se vuelve a “VUELVE”. Se realiza una comparación entre AX y BX, que pondr el flag de cero a 1 ( recordemos la anterior lección ), se saltar a “FIN”, donde tan sólo se realizar la orden Xor CX,CX cuyo resultado, por cierto, es poner CX a cero tenga el valor que tenga ( y esto se utilizar bastante programando, por eso me ha dado por incluir la orden ).