Ejercicio de bucle para imprimir un texto n veces.

; |//////////////////////////////////////////////////////////////|
; |//////////////////////////////////////////////////////////////|
; |Nombre del programador: Alan Valdez      |
; |Programa: ex_bucle.asm                             |
; |Mision: Imprimir x veces un texto              |
; |Fecha: 12 de septiembre del 2017               |
; |//////////////////////////////////////////////////////////////|
; |//////////////////////////////////////////////////////////////|
                                                               
; |//////////////////////////////////////////////////////////////|
; |//////////////////////////////////////////////////////////////|
; |                         CONSTANTES                  |
; |//////////////////////////////////////////////////////////////|
; |//////////////////////////////////////////////////////////////|
   CR          EQU 13 ;
   LF           EQU 10 ;
   BIOS       EQU 10H
   DOS        EQU 21H
   TEXT      EQU 3
   FIN          EQU 4C00H
; |//////////////////////////////////////////////////////////////|
; |//////////////////////////////////////////////////////////////|
; |                     SEGMENTO DE DATOS      |
; |//////////////////////////////////////////////////////////////|
; |//////////////////////////////////////////////////////////////|
   DATOSC SEGMENT
       FINISHED DB 10, 13, 'Bucle terminado', 10, 13 ; Mensaje a imprimir
   DATOSC ENDS
; |//////////////////////////////////////////////////////////////|
; |//////////////////////////////////////////////////////////////|
; |                     SEGMENTO DE PILA          |
; |//////////////////////////////////////////////////////////////|
; |//////////////////////////////////////////////////////////////|
   PILAC SEGMENT STACK  ;Se inicializa el segmento de pila
       DB 00000010u DUP('--LOOP---') ;Se inicializa la pila
   PILAC ENDS
; |//////////////////////////////////////////////////////////////|
; |//////////////////////////////////////////////////////////////|
; |                    SEGMENTO DE CODIGO    |
; |//////////////////////////////////////////////////////////////|
; |//////////////////////////////////////////////////////////////|
   CODIGOC SEGMENT     ;Se inicializa el segmento de codigo
     ex_bucle PROC FAR ; Inicio de procedimiento
       ASSUME CS:CODIGOC, DS:DATOSC, SS:PILAC ;Se asignan segmento.
         
           MOV AX,DATOSC ; Inicializar correctamente el
        MOV DS,AX ; registro de datos
        MOV CX,8 ; Bucle (8 caracteres)
        MOV BX,0 ; Se inicia contador
       
        BUCLE:
       
          PUSH CX ; Guardar CX (contador de bucle) en pila
          MOV DX,SI
          LOOP BUCLE ;Se regresa a BUCLE label
          POP CX ; Recuperar CX (contador de bucle)
          INC BX ;Ejecuta incrementador
          JE DispMsg
          CALL DispMsg
          JMP SkipMsg
          CALL SkipMsg
         
          DispMsg PROC
          MOV AH, 09H
          MOV DX, OFFSET FINISHED
          INT 21H
          DispMsg ENDP
       
          SkipMsg PROC
          MOV AL, 0h
          MOV AH, 4CH
          INT 21H
          SkipMsg ENDP
         
      ex_bucle ENDP
    CODIGOC ENDS      
    END ex_bucle

Comentarios

Entradas populares de este blog

1.8 - Desplegado de mensajes en el monitor

1.7 - Proceso de ensamblado y ligado

1.5 - Llamadas a servicios del sistema