10
MICROPROCESADORES Alumna. Flor Taqui Wajuyat Taqui.sistemasytelematica@gm ail.com http:// direcciondeingeniria.blogspo t.pe/ SALTO CONDICIONAL Universidad Politécnica Amazónica

Salto condicional

Embed Size (px)

Citation preview

Page 1: Salto condicional

MICROPROCESADORES

Alumna. Flor Taqui WajuyatTaqui.sistemasytelematica@g

mail.comhttp://direcciondeingeniria.blogspot.

pe/

SALTO CONDICIONALUniversidad Politécnica

Amazónica

Page 2: Salto condicional

CONTENIDO:•Definición•Instrucciones de salto•Ejemplos

Page 3: 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.

Page 4: Salto condicional

INSTRUCCIONES DE SALTO

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 dirección de saltos se representa 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.

Page 5: Salto condicional

Saltos si la condición es una comparación no signada

• 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).

Page 6: Salto condicional

Saltos si la condición es una comparación signada

• 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).

Page 7: Salto condicional

Saltos si la condición es un estado de una bandera o el registro CX

• 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.

Page 8: Salto condicional

Hay más de 30 instrucciones de salto, vamos a nombrar las más usadas:

Instrucción Descripciónjmp etiqueta Salto incondicional directoje etiqueta Salto por igualjne etiqueta Salto por no igualjg etiqueta Salto por mayorjng etiqueta Salto por no mayorjge etiqueta Salto por mayor igualjnge etiqueta Salto por no mayor igualjl etiqueta Salto por menorjnl etiqueta Salto por no menorjle etiqueta Salto por menor igualjnle etiqueta Salto por no menor igualjs etiqueta Salto negativo

Page 9: Salto condicional

EJEMPLOSPrograma 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 .dataa: .long 4b: .long 5c: .long 2d: .long 7x: .long 0 .section .text.globl _start_start:

movl b, %eax # %eax=bsubl c, %eax # %eax=b-caddl a, %eax # %eax=(b-c)+amovl c, %ecx # %ecx=cimull d, %ecx # %ecx=c*dcltd # %edx=0idivl %ecx # %eax=((b-c)+a)/(c*d)

%edx=restomovl %eax, x # guarda el resultado en x

 movl $1, %eax # fin del programamovl $0, %ebxint $0x80

Page 10: Salto condicional

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 .dataa: .long 4b: .long 2c: .long 3mayor: .long 0 .section .text.globl _start_start:

movl a, %eaxmovl b, %ebxmovl c, %ecxcmpl %ebx, %eax # compara a con bjg amayorb # si a>b salta a amayorbcmpl %ecx, %ebx # compara b con cjl bmenorc # si b<c salta a mnenorcmovl %ebx, mayor # cuando b es el mayorjmp fin # salta a fin

bmenorc: movl %ecx, mayor # cuando c es el mayorjmp fin # salta a fin

amayorb: cmpl %ecx, %eax # compara a con cjl amenorc # si a<c salta a amenorcmovl %eax,mayor # cuando a es el mayorjmp fin # salta a fin

amenorc: movl %ecx, mayor # cuando c es el mayor fin: movl $1, %eax # fin del programa

movl $0, %ebxint $0x80