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