MICROPROCESADORES
Alumna. FlorTaquiWajuyat
Taqui.sistemasytelematica@gmail.com
http://direcciondeingeniria.blogspot.pe/
Universidad Politécnica Amazónica
CONTENIDO:
•Definición
•Instrucciones de salto
•Ejemplos
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.
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.
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).
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).
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.
Hay más de 30 instrucciones de salto, vamos a nombrar las más
usadas:
Instrucción Descripción
jmp etiqueta Salto incondicional directo
je etiqueta Salto por igual
jne etiqueta Salto por no igual
jg etiqueta Salto por mayor
jng etiqueta Salto por no mayor
jge etiqueta Salto por mayor igual
jnge etiqueta Salto por no mayor igual
jl etiqueta Salto por menor
jnl etiqueta Salto por no menor
jle etiqueta Salto por menor igual
jnle etiqueta Salto por no menor igual
js etiqueta Salto 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

Salto condicional

  • 1.
  • 2.
  • 3.
    DEFINICIÓN Los saltos condicionalespermiten 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.
  • 4.
    INSTRUCCIONES DE SALTO Lasinstrucciones 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.
  • 5.
    Saltos si lacondició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).
  • 6.
    Saltos si lacondició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).
  • 7.
    Saltos si lacondició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.
  • 8.
    Hay más de30 instrucciones de salto, vamos a nombrar las más usadas: Instrucción Descripción jmp etiqueta Salto incondicional directo je etiqueta Salto por igual jne etiqueta Salto por no igual jg etiqueta Salto por mayor jng etiqueta Salto por no mayor jge etiqueta Salto por mayor igual jnge etiqueta Salto por no mayor igual jl etiqueta Salto por menor jnl etiqueta Salto por no menor jle etiqueta Salto por menor igual jnle etiqueta Salto por no menor igual js etiqueta Salto negativo
  • 9.
    EJEMPLOS Programa que calculala 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
  • 10.
    Programa que dadostres 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