Mostrando entradas con la etiqueta Ciclos condicionales. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ciclos condicionales. Mostrar todas las entradas

jueves, 14 de marzo de 2019

2. Arreglos

Instrucción CMP, JE, JNE, LOOP


En esta ocasión introducimos un programa que incluye saltos, ciclos, este programa permite comparar una dos palabras y si estas coinciden.


Código:

org 100h          ;directiva

include 'emu8086.inc' 

mov si, 0    ;ponemos si en 0(asigna),el registro 'si' para poder utilizar cmp

comienzo:

mov al, msg2[0]   ;copiar la primera letra de la palabra A al, del
cmp msg[si],"$"   ;si es el fin de la cadena mandar a final,compara msg con msg2
 je final      ; brinca si es igual 
                  ;continuar
cmp msg[si], al   ;comparar si encuentra la primera letra de la cadena en msg2
 jne seguir    ;brinca si es diferente

mov di, 1         ;poner en 1 = di 

comprobar:

 mov al, msg[di]       ;compara en la [?] posicion (di, inc di)msg
 mov bx, di             ;  bx = di
 cmp msg2[si+bx], al     ;posicion de la letra coincidente di(si+bx),comparar con(al) la cadena msg
 jne seguir             ;si no coincide mandar a seguir 
 
 inc di                 ;incrementar di para seguir recorriendo cadena
 cmp msg[di],"$"       ;si es el fin de la cadena y el programa llego

 jz resultado           ;aca quiere decir que la cadena es parte de la palabra


loop comprobar         ;bucle para recorrer cadena

seguir: 
      mov di, 1
 inc si       ;para seguir recorriendo la palabra
loop comienzo   ;bucle principal para recorrer palabra

resultado:

    printn 'multi Coincide con multiplicacion'             
  jmp fin

final:

  print 'No coindice '
fin:

 mov ax, 4c00h 
 ret

msg db "mult$"      ;subcadena a comparar
msg2 db "multiplicacion$" ;cadena
msg5 db "fin$"


Resultado:








miércoles, 13 de marzo de 2019

2. Instrucción LOOP, LOOPNE, JCXZ

Ejemplo con LOOP


Programa 1:


Código: 


org 100h 

include 'emu8086.inc'
mov cx,50 ;cx controla el numero de iteraciones

comienzo:
    printn 'letrero'
    inc cx      ;
LOOP comienzo ;   

ret


Resultado:




Programa 2:

Código: 


org 100h 

include 'emu8086.inc'

.data

msj1 db 10,13, 'letrero $' 
.code 
    mov cx,50 

    comienzo:

    lea dx, msj1
    mov ah, 09
    int 21h
   
    LOOP comienzo ;   

ret


Resultado:


Programa 3:

Código:  

.model tiny
name "bucle"
.data 
msj1 db 10,13,'Letrero $' 
.CODE

 inicio:
 mov cx,50
 comienzo: 
  MOV dx, OFFSET msj1
  MOV ah,09
  int 21h   
     
LOOP comienzo
ret


Resultado:




Programa 4:

Código: 

.model tiny
name "bucle"
.data 
msj1 db 10,13,'Letrero $' 
.CODE

 inicio:
 mov cx,50
 comienzo: 
 
  lea dx, msj1
  MOV ah,09   ;para imprimir
  int 21h   
     
LOOP comienzo
ret


Resultado:





Ejemplo con LOOPNE


Programa 5:

Código: 

.model tiny
name "bucle"
.data 
msj1 db 10,13,'Letrero $' 
.CODE

 inicio:
 mov cx,9
 comienzo: 
 
  lea dx, msj1
  MOV ah,09   ;para imprimir
  int 21h   
     
LOOPNE comienzo
ret ;retorna      
END


Resultado:





Ejemplo con JCXZ

La instrucción JCXZ es un tipo de salto condicional, este solo se hará si en nuestro registro cx tenemos un cero. Solo imprimirá una vez.

Programa 6:

Código: 

.model tiny
name "bucle"
.data 
msj1 db 10,13,'Letrero $' 
.CODE

 inicio:
 mov cx,4 ;0
 comienzo: 
 
  lea dx, msj1
  MOV ah,09   ;para imprimir
  int 21h   
     
JCXZ comienzo
ret ;retorna      
END



Resultado:



jueves, 7 de marzo de 2019

2. Comparaciones, saltos, ciclos condicionales, incrementos y decrementos

Sentencias condicionales 



Control de Bucles (instrucciones simples)



Éstas posibilitan el grupo de control más elemental de nuestros programas. Un bucle es
un bloque de código que se ejecuta varias veces. Hay 4 tipos de bucles básicos:

  • Bucles sin fin
  • Bucles por conteo
  • Bucles hasta
  • Bucles mientras


Las instrucciones de control de bucles son las siguientes:




La instrucción LOOP va acompañada de el registro CX como contador, que es para la iteración.

Instrucciones de prueba, Comparación y Saltos.


CMP y TEST son como el if compara y verifica.



Referencia:
http://moisesrbb.tripod.com/unidad5.htm#u511
https://drive.google.com/file/d/1GEXHus3zVUPLlDw4ASeUjRXcp53D_c31/view
http://jbwyatt.com/253/emu/asm_tutorial_07.html

domingo, 10 de febrero de 2019

1. Programa que repite mensajes

Programa que repite mensajes 


Código:


; You may customize this and other start-up templates; 
; The location of this template is c:\emu8086\inc\0_com_template.txt

org 100h
.model small
.stack 64

.data
mensaje db "Ingrese el numero de veces que se repetira el mensaje (1-9)",13,10,'$'

repetir db 13,10, "Repitiendo el ciclo $"

.code 

inicio proc far
      mov ax, @data
      mov ds, ax     
      mov ah, 09
      lea dx, mensaje
      int 21h
      mov ah, 01
      int 21h
      ;convertir a valor que se tecleo
      sub al, 30h
      mov cl,al

   ciclo:
    mov ah, 09
    lea dx, repetir
    int 21h 
    
   loop ciclo
                    
   mov ax,4c00h
   int 21h

inicio endp

ret


Resultado:








1. ABC Programa que utiliza el Registro cx (ciclos, registro contador)

Programa que utiliza el Registro cx (ciclos, registro contador)

Los registros que veremos son:
AX    Acumulador
BX    Registro base
CX    Registro contador
DX    Registro de datos

El registro AX se usa para almacenar resultados, lectura o escritura desde o hacia los puertos.
El registro BX sirve como apuntador base o indice.
El registro CX se utiliza en operaciones de iteración, como un contador que se va incrementado o decrementa de acuerdo con el tipo de instrucción dada. Mas comúnmente, utilizado en algún ciclo.
El registro DX se usa como puente para el acceso de datos.

Cada uno de estos registros sirven de diferente forma dentro de los programas. Anteriormente, habíamos utilizado el registro AX y BX para guardar datos numéricos en hexadecimal.


Programa 1 : cx contador


ABECEDARIO EN MAYÚSCULAS

Código:

; You may customize this and other start-up templates;

; The location of this template is c:\emu8086\inc\0_com_template.txt

org 100h   ;   espacio en memoria

   MOV DL, 'A' ;Se transfiere la letra A el registro de datos dl

   MOV CX, 26 ;se transfiere 26 al registro contador

   imprime: ; va a imprimir hasta acabar las 26 iteraciones
    MOV AH, 02 ; se transfiere 02 al acumulador de byte alto
    INT 21h ; dato ascii leido desde el teclado
    INC DL;siguiente caracter del alfabeto

   LOOP imprime ; continua

    ;MOV DL, "A"
    ;MOV CX, 10
    ;LOOP
    ;    MOV  ah,02
    ;    int 21h
    ;    inc dl
    ;loop loop2 imprime

    ret




Resultado:








Programa 2:

Abecedario en minúsculas

Código:


org 100h   ;   espacio en memoria


MOV DL, "a"
MOV CX, 10
loop2:

    MOV  ah,02
    int 21h
    inc dl

loop loop2 ;imprime

ret

Resultado:












3. Colores Modificado 9

Modificación del programa # 9 " Colores " Por mi compañero Ambrocio isaias Laureano CR EQU 13 ;Declaro retorno de carro LF...