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
; |//////////////////////////////////////////////////////////////|
; |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
Publicar un comentario