jueves, 7 de marzo de 2019

Unidad 2 :Ciclos condicionales

Algunos de los programas que ya hemos visto a lo largo del curso han sido de forma lineas. Tienen una secuencia de linea a linea sin hacer algún salto significativo a alguna parte del código.
Muchas de las veces los programas no son tan sencillos como esta forma lineal de programar, es por eso que se implementan los ciclos y saltos a ciertas partes de un programa.
Este tipo de requisitos implica la transferencia de control a la dirección en donde se encuentre la instrucción que no va de inmediato de la que se este ejecutando. Este tipo de transferencia de control puede ser hacia adelante, para ejecutar pasos nuevos, o hacia atrás, para repetir algún paso.


Etiquetas de instrucciones
Las instrucciones JMP,Jnnn y LOOP requieren de un operador que se refiere a la etiqueta de una instrucciones.


Salto incondicional (JMP)
Una instrucción usada mas comúnmente para la transferencia de control es la instrucción de JMP. Un salto es incondicional, ya que la operación transfiere el control bajo cualquier circunstancia.
Una operación JMP dentro del mismo segmento puede ser corta o cercana. En su primer paso por un programa fuente, el ensamblador genera la longitud de cada una de las instrucciones. Sin embargo, una instrucción JMP puede ser de dos o tres bytes de longitud. Este tipo de operaciones al ir a una etiqueta dentro de -128 a +127 bytes , se considera un salto corto.


;Ejemplo del uso de un salto condiconal
JMP A90 ;Indicamos a donde saltara desde esta linea
. . .
A90: MOV AH, 00 ;al encontrar la etiqueta, realizara lo que se encuentra en ella


org    100h

mov    ax, 5          ; asigna un 5 a ax. 
mov    bx, 2          ; asigna un 2 a bx. 

jmp    calc            ; va a 'calc'. 

back:  jmp stop      ; va a 'stop'. 

calc:
add    ax, bx         ; suma bx y ax 
jmp    back           ; va a la etiqueta back

stop:

ret                   ; Detiene el sistema 


Instrucción LOOP 
Esta instrucción requiere de un valor inicial en el registro CX. En cada iteracion, LOOP de forma automática disminuye 1 de CX. Si el valor en el registro CX es cero, el control pasa a la instrucción siguiente; sino es así y CX no es igual a cero, el control pasa a la dirección del operando. La distancia debe ser un salto corto, desde -128 hasta +127 bytes. Para una operación que exceda este limite, el ensamblador envía un mensaje como "salto relativo fuera de rango".


Tabla de las instrucciones LOOP



;Ejemplo del uso de LOOP
.MODEL SMALL
.CODE
ORG 100H
MAIN PROC NEAR
MOV AX,01 ;Iniciación de AX,
MOV BX,01 ;BX y
MOV CX,01 ;CX a 01
MOV CX,10 ;Iniciar 
A20: ;Número de iteraciones 
ADD AX, 01 ;Sumar 01 a AX
ADD BX, AX ;Sumar AX a BX
SHL DX, 1 ;Multiplicar por dos a DX 
LOOP A20 ;Iterar si es diferente de cero
MOV AX, 4C00H ;Salida a DOS 
MAIN ENDP
END MAIN







Instrucciones de salto condicional
El ensamblador permite usar una variedad de instrucciones de salto condicional que transfiere el control dependiendo de las configuraciones en el registro de banderas. Por ejemplo, puede comparar dos campos y después saltar de acuerdo con los valores de las banderas que la comparación establece.

Finalmente, agregare un sitio de consulta en donde viene un gran catalogo de todas las instrucciones condicionales que podemos encontrar en ensamblador y una breve explicación de cada una de ellas y como se utilizan.
Ejemplo de algunas instrucciones condicionales:

  • JE. Salto si es equivalente a lo que se compara
  • JG. Salto si es mas grande a su comparación
  • JGE. Salto si es mas grande o igual a su compacidad.
  • JL. Salgo si es menor a lo que se compara.

Salto condicional con banderas

Tabla de saltos condicionales con parámetros dentro de la sintaxis

Para una mayor explicación, visita la siguiente liga: Enlace de consulta

No hay comentarios.:

Publicar un comentario