lunes, 11 de septiembre de 2017

POGRAMA CON 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,'Letrero cinco veces',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 100H
        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,003H ; Numero de veces que se repite el ciclo, al poner el ciclo por ejemplo si quieres 4 pon la mitad que seria 2.
        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
;===========================================================================



*************************************************
PROGRAMA ORIGINAL
************************************
.model small
.stack 64
.data           ;En.data se declaran variables y cadenas a usar en el programa
 mensaje    db 0Ah, 0dh,"Letrero cinco veces ", "$" ;Declaramos una cadena.
.code
inicio:
    mov cx, 0005 ;numero de veces a repetir el ciclo
ciclo:
    mov ax,@data
    mov ds,ax
    mov dx,offset mensaje ;lee la cadena desde nuestro segmento de datos
    mov ah, 09h
  int 21h
  loop ciclo ;Se repite desde nuestra etiqueta ciclo.

  mov ah,04ch ;Al terminar finaliza el programa.
  int 21h
  end inicio

No hay comentarios:

Publicar un comentario