lunes, 11 de septiembre de 2017

EJEMPLO DE BUCLE



;===========================================================================
;===========================================================================
; PROGRAMA : nom_5
; FUNCION : Escribir el nombre el numero de veces que se pida.
;===========================================================================

;===========================================================================
; DECLARACION DE CONSTANTES
;===========================================================================
CR          EQU 13 ; Constante CR (Retorno de carro)
LF          EQU 10 ; Constante LF (Salto de l?nea)
IMPRIMIR    EQU 9
FIN         EQU 4C00H
DOS         EQU 21H

;===========================================================================
; DECLARACION DEL SEGMENTO DE DATOS
;===========================================================================
DATOS SEGMENT ; Inicio del segmento de datos
    LINEA1 DB CR,LF,'Yolanda Rodrigueez',CR,LF,'$'
DATOS ENDS ; Fin del segmento de datos

;===========================================================================
; DECLARACION DEL SEGMENTO DE PILA
;===========================================================================
PILA SEGMENT STACK ; Inicio del segmento de pila
    DB 64 DUP('PILA') ; Inicializaci?n de la pila
PILA ENDS ; Fin del segmento de pila

;===========================================================================
; DECLARACION DEL SEGMENTO DE CODIGO
;===========================================================================
CODIGO SEGMENT ; Inicio del segmento de codigo
    nom_5 PROC NEAR ; Inicio procedimiento nom_5
        ASSUME CS:CODIGO,DS:DATOS,SS:PILA; Asignar segmentos
           ORG 110B
        MOV AX,DATOS ; AX=Direcci?n del segmento de datos
        MOV DS,AX ; DS=AX. Indicar el segmento de datos
        LEA DX,LINEA1 ; DS:DX = direccion de LINEA1
        MOV CX,011B ;Us? tabla de conversi?n de hexadecimal a binario (6 corresponde a 011 agreg?ndole la B).
        XOR DX,DX
       CICLO:
            CALL ESCRIBE
            INT DOS
       LOOP CICLO
       CALL SALIR
    nom_5 ENDP ; Fin del procedimiento nom_5
;-----------------------------------------------------------------------
;---Imprime en pantalla.
;---Entrada: DX palabra con el valor a mostrar.
;---Llama: ESCRIBE
;----------------------------------------------------------------------
ESCRIBE PROC NEAR ; Inicio procedimiento ESCRIBE
    MOV AH,9 ; Funci?n DOS para escribir texto en pantalla
    INT DOS ; Llamar a la interrupci?n del DOS
    RET ; Volver o retornar
ESCRIBE ENDP ; Fin del procedimiento ESCRIBE

SALIR PROC NEAR
    MOV AX, FIN
    INT DOS
    RET
SALIR ENDP
;-----------------------------------------------------------------------
CODIGO ENDS ; Fin del segmento codigo

;===========================================================================
END nom_5 ; Empezar a ejecutar el procedimiento nom_5
;===========================================================================


No hay comentarios:

Publicar un comentario