El día de hoy les traigo unos cuantos programas introductorios a saltos condicionales en Ensamblador, veamos cada uno:
Programa 1:
En el siguiente programa vemos el uso del salto mas sencillo en ensamblador, hablamos del JMP, el cual es el nemonico de JUMP en ingles, este salta hacia el bloque de código indicado.
Resultado:
Programa 2:
En el siguiente programa veremos el uso de loops, en este caso utilizamos el registro CX como contador y la instrucción PUSH para decrementarlo, siendo asi este programa deberá imprimir 5 veces la secuencia 1233333233333233333233333233333.
Resultado:
Programa 3:
En el siguiente programa tenemos lo que conocemos como el famoso if, en este caso lo manejaremos bajo el nemonico CMP el cual hace referencia a COMPARACIÓN y todas las condiciones serán manejadas bajo otros nemonicos, como: JE el cual define a JUMP IF IS EQUAL, que quiere decir que ejecutara las lineas del bloque si los valores son iguales. En este caso el programa deberá imprimir 'n' dado que los valores no son iguales. Te reto a intentar modificar el programa para que imprima 'y', solo es cambiar una linea de código.
Resultado:
Programa 4:
El siguiente programa es un ejemplo similar al anterior, en este caso debería imprimir "los registros contienen valores diferentes", te reto a modificarlo para que imprima el otro mensaje, solo es una linea de código la que tenemos que cambiar.
Resultado:
Programa 5:
El siguiente programa es exactamente igual a los anteriores, sin embargo en este caso incluimos mas nemonicos de comparación como: JZ (JUMP IF IT ZERO, Salta si la diferencia es cero) JNZ (JUMP IF IT'S NOT ZERO, Salta si la diferencia no es cero) y JC (JUMP IF CARRY, Salta si tenemos acarreo).
Resultado:
En este caso debería imprimir "Numero 2 Mayor", dado que 9 es mayor a 8, te reto a modificar el programa para que imprima los otros 2 mensajes.
Programa 1:
En el siguiente programa vemos el uso del salto mas sencillo en ensamblador, hablamos del JMP, el cual es el nemonico de JUMP en ingles, este salta hacia el bloque de código indicado.
org 100h mov ax,5 mov bx,2 jmp calc ;salta hacia el bloque calc back: jmp stop ;salta directamente a stop calc: add ax,bx jmp back ;salta hacia el bloque back stop: ;termina el programa ret ;http://jbwyatt.com/253/emu/asm_tutorial_07.html
Resultado:
Programa 2:
En el siguiente programa veremos el uso de loops, en este caso utilizamos el registro CX como contador y la instrucción PUSH para decrementarlo, siendo asi este programa deberá imprimir 5 veces la secuencia 1233333233333233333233333233333.
org 100h
mov cx, 5 ;establecemos que CX valdra 5 para el loop externo
k1:
mov al, ' ' ;guardamos un espacio en al
mov ah, 0eh ;invocamos el servicio de impresion de video
int 10h ;imprimimos
mov al, '1' ;guardamos un 1 en al
mov ah, 0eh ;invocamos el servicio de impresión de video
int 10h ;imprimimos
push cx ;restamos 1 a cx: cx=cx-1 para el loop 1
mov cx, 5 ;seteamos cx a 5 para el loop interno 2
k2:
mov al, '2' ;guardamos 2 en al
mov ah, 0eh ;invocamos al servicio de impresión de video
int 10h ;imprimimos
push cx ;restamos 1 a cx: cx=cx-1 para el loop 2
mov cx,5 ;seteamos cx a 5 para el loop 3
k3:
mov al, '3' ;guardamos 3 en al
mov ah, 0eh ;invocamos al servicio de impresión de video
int 10h ;imprimimos
loop k3 ;cerramos el loop 3
pop cx ;restamos 1 a cx: cx=cx-1 para el loop 3
loop k2 ;cerramos el loop2
pop cx ;restamos 1 a cx: cx=cx-1 para el loop 2
loop k1 ; cerramos el loop 1
ret ;retornamos control al ordenador
Resultado:
Programa 3:
En el siguiente programa tenemos lo que conocemos como el famoso if, en este caso lo manejaremos bajo el nemonico CMP el cual hace referencia a COMPARACIÓN y todas las condiciones serán manejadas bajo otros nemonicos, como: JE el cual define a JUMP IF IS EQUAL, que quiere decir que ejecutara las lineas del bloque si los valores son iguales. En este caso el programa deberá imprimir 'n' dado que los valores no son iguales. Te reto a intentar modificar el programa para que imprima 'y', solo es cambiar una linea de código.
include "emu8086.inc" org 100h mov al, 25 ; set al to 25. mov bl, 10 ; set bl to 10. cmp al, bl ; compare al - bl. je equal ; jump if al = bl (zf = 1). putc 'n' ; if it gets here, then al <> bl, jmp stop ; so print 'n', and jump to stop. equal: ; if gets here, putc 'y' ; then al = bl, so print 'y'. stop: ret ; gets here no matter what.
Resultado:
Programa 4:
El siguiente programa es un ejemplo similar al anterior, en este caso debería imprimir "los registros contienen valores diferentes", te reto a modificarlo para que imprima el otro mensaje, solo es una linea de código la que tenemos que cambiar.
include "emu8086.inc"
org 100h
mov al, 25 ; set al to 25.
mov bl, 10 ; set bl to 10.
cmp al, bl ; compare al - bl.
je equal ; jump if al = bl (zf = 1).
print "los registros contienen valores diferentes" ; if it gets here, then al <> bl,
jmp stop ; so print 'n', and jump to stop.
equal: ; if gets here,
print "los registros contienen valores iguales" ; then al = bl, so print 'y'.
stop:
ret ; gets here no matter what.
Resultado:
Programa 5:
El siguiente programa es exactamente igual a los anteriores, sin embargo en este caso incluimos mas nemonicos de comparación como: JZ (JUMP IF IT ZERO, Salta si la diferencia es cero) JNZ (JUMP IF IT'S NOT ZERO, Salta si la diferencia no es cero) y JC (JUMP IF CARRY, Salta si tenemos acarreo).
.model small
.stack
.data
include "emu8086.inc"
num1 db 8
num2 db 9
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 ;Salta si hay acarreo.
jz igual ;Salta si es igual o salta si es cero.
jnz mayor1 ;Salta si no es igual o salta si no es cero.
.exit
igual:
MOV AH,09H
LEA DX, MSG1
INT 21H
jmp mfinal
.EXIT
mayor1:
mov ah,09h
lea dx,msg2
int 21h
jmp mfinal
.exit
mayor2:
mov ah,09h
lea dx,msg3
int 21h
jmp mfinal
.exit
mfinal:
gotoxy 5,4
print "ejecucion terminada"
.exit
END
;https://www.youtube.com/watch?v=Ng4YEb2Jtcg
;http://moisesrbb.tripod.com/unidad5.htm#u517
;prox https://www.youtube.com/watch?v=CZyk7j3FVYw
;prox https://www.youtube.com/watch?v=llCG44dzPQM
Resultado:
En este caso debería imprimir "Numero 2 Mayor", dado que 9 es mayor a 8, te reto a modificar el programa para que imprima los otros 2 mensajes.
Comentarios
Publicar un comentario