07/Marzo/19 Saltos condicionales
http://jbwyatt.com/253/emu/asm_tutorial_07.html
Brincos condicionales.
Saltar instrucciones para números firmados.
Instrucciones de salto para números sin firmar.
Bucle
Ejemplo salto condicional.
org 100h
mov ax, 5 ; set ax to 5.
mov bx, 2 ; set bx to 2.
jmp calc ; go to 'calc'.
back: jmp stop ; go to 'stop'.
calc:
add ax, bx ; add bx to ax.
jmp back ; go 'back'.
stop:
ret ; return to operating system.
Programa 1: Salto incondicional
Código:
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:
Resultado:
Se asigna valores a los registros, compara "al" y "bl".
Instrucción LOOP:
Programa 3: LOOP Imprime 5 veces 1233333233333233333233333233333, se usa push para decrementar
Código:
Resultado:
Código:
Resultado:
Brincos condicionales.
Saltar instrucciones para números firmados.
Instrucciones de salto para números sin firmar.
Bucle
Ejemplo salto condicional.
org 100h
mov ax, 5 ; set ax to 5.
mov bx, 2 ; set bx to 2.
jmp calc ; go to 'calc'.
back: jmp stop ; go to 'stop'.
calc:
add ax, bx ; add bx to ax.
jmp back ; go 'back'.
stop:
ret ; return to operating system.
Salto incondicional (JMP):
La instrucción básica que transfiere el control a otro punto del programa. La sintaxis básica es :
JMP etiqueta
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:
Saltos condicionales en Ensamblador (CMP JC JZ JNZ)
Comparar números
include 'emu8086.inc'
.model small
.stack
.data
num1 db 8 ;numero a comparar - cambia e intenta
num2 db 8 ;numero a comparar - cambia e intenta
msg1 db 'Numeros iguales','$'
msg2 db 'Numero 1 mayor','$'
msg3 db 'Numero 2 mayor','$'
.code
main:
mov ax, @data
mov ds,ax
mov al,num1
cmp al,num2
jc Mayor2 ;Brinca si es mayor el numero 2
jz igual ;Salta si es igual
jnz Mayor1 ;Brinca si es mayor el numero 1
.exit
igual:
mov ah,09h
lea dx ,msg1
int 21h
;printn 'Los numeros son iguales'
.exit
Mayor1:
mov ah,09h
lea dx, msg2
int 21h
;printn 'El numero 1 es mayor'
.exit
Mayor2:
mov ah,09h
lea dx, msg3
int 21h
;print 'El numero 2 es mayor'
.exit
end
Resultado:
Comentarios
Publicar un comentario