Controlar el flujo del programa es algo muy importante, aquí es donde su programa puede tomar decisiones de acuerdo con ciertas condiciones.
Salto incondicional (JMP):
La instrucción básica que transfiere el control a otro punto del programa. La sintaxis básica es :
JMP etiqueta
JMP et1 ;Indica a donde saltara et1
.
.
.
et1: ;realiza lo que se encuentra en ella et1
MOV AX, 1
Programa 1: Salto incondicional
Código:
org 100h
mov ax, 5 ; se asigna 5 en ax.
mov bx, 2 ; se asigna 2 en 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 ; return to operating system.
Resultado:
Salto condicional (CMP):
Hay instrucciones que realizan saltos condicionales (salta solo cuando alguna condiciones están en acción)
Programa 2: Salto condicional, Compara un número
Código:
include "emu8086.inc"
org 100h
mov al, 25 ; establece al a 25. modificar a 10 para probar el igual
mov bl, 10 ; establece bl a 10.
cmp al, bl ; compara al - bl.
je equal ; salta si al = bl (zf = 1).
putc 'n' ; si llega aqui, entonces al <> bl,
print 'No es igual'
jmp stop ; imprime 'n', y salta a stop.
equal: ; si llega aqui,
putc 'y' ; entonces al = bl, imprime 'y'.
print 'Es igual'
stop:
ret ; llega aqui no importa que.
Resultado:
Se asigna valores a los registros, compara "al" y "bl".
Al ser diferente imprime n "No es igual".
En caso de comparar valores iguales imprime lo siguiente:
Instrucción LOOP:
Programa 3: LOOP Imprime 5 veces 1233333233333233333233333233333, se usa push para decrementar
Código:
org 100h
mov bx, 0 ; contador de pasos total.
mov cx, 5
k1:
;add bx, 1
mov al,' ' ;guardamos un espacio en al
mov ah, 0eh
int 10h
mov al, '1' ; al=1
mov ah, 0eh ;invoca el servicio de impresion video
int 10h ;imprimimos
push cx ;resta 1 a cx: cx=cx-1 para loop1
mov cx, 5 ;cx a 5 para loop 2
k2:
;add bx, 1
mov al, '2' ;al=2
mov ah, 0eh ;impresion de video
int 10h ;imprime
push cx ;decrementa -1 loop2
mov cx, 5 ;cx=5 loop3
k3: add bx, 1 ;
mov al, '3' ;al=3
mov ah, 0eh ;impresion video
int 10h ;imprimimos
loop k3 ; internal in internal loop.
pop cx ;resta 1 a cx loop3
loop k2 ; internal loop. bucle interno
pop cx ;resta 1 a cx loop2
loop k1 ; external loop. bucle externo
ret ;retornamos control al ordenador
Resultado:
Instrucciones de salto que prueban una sola bandera.
Saltar instrucciones para números firmados.
Saltar instrucciones para números sin firmar.
Bucle
Referencia:
https://www.youtube.com/watch?v=Ng4YEb2Jtcg
http://jbwyatt.com/253/emu/asm_tutorial_07.html
https://www.youtube.com/watch?v=llCG44dzPQM