jueves, 10 de noviembre de 2016

SALTO CONDICIONAL

DEFINICIÓN

Los saltos condicionales permiten pasar de una etapa a otra sin ser éstas consecutivas, sin activar las etapas intermedias. Estos saltos pueden darse en sentido evolución del Grafcet como en sentido inverso a la evolución del Grafcet.

Para explicar con ecuaciones estos saltos condicionales utilizaremos el siguiente ejemplo:


En este ejemplo partimos de la etapa E1 y para activar justo a continuación la etapa E7, activaremos la condición de transición Fx y mantendremos desactivado la condición de transición F1.

Las ecuaciones que obtenemos con este ejemplo son las siguientes:

INSTRUCCIONES DE SALTO

Una instrucción de salto produce un cambio en la ejecución del programa pasando a una nueva posición, no secuencial. La dirección del salto se representa con una etiqueta.

CMP: Esta instrucción es considerada como una instrucción Aritmética, ya que sustrae el operando fuente del operando destino, solo que el resultado no se almacena en el operando destino, el resultado se utiliza solo para activar las banderas.

Comparaciones de números sin signo:
  • JA o JNBE: Salta si está por arriba de, o lo mismo si no está por debajo o igual de.
  • JAE o JNB: Salta si está por arriba o es igual, o lo mismo si no está por debajo de. (CF=0).
  • JB o JNAE: Salta si está por debajo de, o salta si no está por arriba ni es igual. (CF=1).
  • JBE o JNA: Salta si está por debajo de o es igual, o salta si no está por arriba de. (CF=1 or ZF=1).
Comparaciones para enteros con signo:
  • JG o JNLE: Salta si es mayor, lo mismo, salta si no es menor ni igual. (ZF=0 or OF=SF).
  • JGE o JNL: Salta si es mayor o igual, lo mismo, salta si no es menor. (SF=OF).
  • JL o JNGE: Salta si es menor, lo mismo, salta si no es mayor ni igual. (SF<>OF).
  • JLE o JNG: Salta si es menor o igual, lo mismo, salta si no es mayor. (ZF=1 or SF<>OF).
Verificando el estado de las banderas:
  • JC: Salta si la bandera del carry es 1 (CF=1).
  • JNC: Salta si la bandera del carry es 0 (CF=0).
  • JO: Salta si la bandera del overflow es 1 (OF=1).
  • JNO: Salta si la bandera del overflow es 0 (OF=0).
  • JNP o JPO: Salta si no hay paridad (PF=0). Esto significa paridad par.
  • JP o JPE Salta si hay paridad (PF=1). Esto significa paridad impar.
  • JS: Salta si la bandera del signo es 1 (SF=1).
  • JCXZ: Salta si el contenido de CX es 0.
Hay más de 30 instrucciones de salto, vamos a nombrar las más usadas:

InstrucciónDescripción
jmp etiquetaSalto incondicional directo
je etiquetaSalto por igual
jne etiquetaSalto por no igual
jg etiquetaSalto por mayor
jng etiquetaSalto por no mayor
jge etiquetaSalto por mayor igual
jnge etiquetaSalto por no mayor igual
jl etiquetaSalto por menor
jnl etiquetaSalto por no menor
jle etiquetaSalto por menor igual
jnle etiquetaSalto por no menor igual
js etiquetaSalto negativo

EJEMPLOS

Programa que calcula la expresión x=(a+(b-c))/(c*d) dados los valores a=4, b=5, c=2, d=7 declarados en la sección de datos.

# Programa que calcula x=(a+(b-c))/(c*d)
.section .data
a:.long 4
b:.long 5
c:.long 2
d:.long 7
x:.long 0
.section .text
.globl _start
_start:
movl b, %eax# %eax=b
subl c, %eax# %eax=b-c
addl a, %eax# %eax=(b-c)+a
movl c, %ecx# %ecx=c
imull d, %ecx# %ecx=c*d
cltd# %edx=0
idivl %ecx# %eax=((b-c)+a)/(c*d) %edx=resto
movl %eax, x# guarda el resultado en x
movl $1, %eax# fin del programa
movl $0, %ebx
int $0x80

Programa que dados tres valores enteros declarados en la sección de datos, determina el mayor y lo guarda en una variable denominada mayor.

# Programa que revisa tres numeros y escoge el mayor
.section .data
a:.long 4
b:.long 2
c:.long 3
mayor:.long 0
.section .text
.globl _start
_start:
movl a, %eax
movl b, %ebx
movl c, %ecx
cmpl %ebx, %eax# compara a con b
jg amayorb# si a>b salta a amayorb
cmpl %ecx, %ebx# compara b con c
jl bmenorc# si b<c salta a mnenorc
movl %ebx, mayor# cuando b es el mayor
jmp fin# salta a fin
bmenorc:movl %ecx, mayor# cuando c es el mayor
jmp fin# salta a fin
amayorb:cmpl %ecx, %eax# compara a con c
jl amenorc# si a<c salta a amenorc
movl %eax,mayor# cuando a es el mayor
jmp fin# salta a fin
amenorc:movl %ecx, mayor# cuando c es el mayor
fin:movl $1, %eax# fin del programa
movl $0, %ebx
int $0x80

RESUMEN

Las instrucciones de salto condicional hacen que el control de flujo del programa salte a la instrucción cuya dirección está especificada por su operando si se cumple una condición dada. La direccion de saltos se reperesenta con una etiqueta:

Las instrucciones de salto se clasifican en tres grupos: 
  • Saltos si la condición es una comparación no signada
  • Saltos si la condición es una comparación signada
  • Saltos si la condición es un estado de una bandera o el registro CX.

SUMMARY

The conditional jump instructions cause the program flow control to skip to the instruction whose address is specified by its operand if a given condition is met. The direction of jumps is reflected with a label:

The jump instructions are classified into three groups:
  • Jumps if the condition is an unnamed comparison
  • Jumps if the condition is a signed comparison
  • Jumps if the condition is a state of a flag or the CX record.
RECOMENDACIONES
  • Se necesita predecir dirección y objetivo de salto. 
  • La dirección real solo se conoce después de ejecutar la instrucción. 
  • Una predicción incorrecta origina un vaciado total del cauce.
CONCLUSIONES

  • Los saltos condicionales son similares a JMP, en la sintaxis pero la diferencia es en el nombre.
  • Los saltos condicionales permiten pasar de una etapa a otra sin ser éstas consecutivas, sin activar las etapas intermedias. Estos saltos pueden darse en sentido evolución del Grafcet como en sentido inverso a la evolución del Grafcet.
  • Las instrucciones son las siguientes JE o JZ. 
  • El objetivo es saltar si la última comparación realizada da igual. 
APRECIACIÓN PERSONAL

Para este tema "SALTO CONDICIONAL" me fue fácil ya que conté con el material adecuado y además me ayudo mucho la Internet, espero que les sea útil y les sirva esta investigación.

GLOSARIO DE TÉRMINOS

CMP: Esta instrucción es considerada como una instrucción Aritmética.
GRAFCET: es un diagrama funcional que describe los procesos a automatizar.

BIBLIOGRÁFIA
  • http://www.sc.ehu.es/sbweb/webcentro/automatica/WebCS1/salto_condicional.htm
  • http://learnassembler.com/salto.html
  • http://lenguajeensamblador2013.blogspot.pe/2013/08/guia-nro-4-saltos-condicionales-y-bucles.html
Video relacionado al tema



Descargar el documento en PDF

Diapositiva "Salto Condicional"