Agregar un contador en lenguaje ensamblador

#1
Hola buenas noches...
Quisiera hacer una pregunta a ver si alguien puede orientarme en lenguaje ensamblador.
Tengo este código que es sobre validar una cadena de caracteres y lo único que me falta es agregarle un pequeño contador para que este se cicle 3 veces en caso de que la respuesta no sea correcta a la ya establecida y también debo agregar macros
¿Alguien puede orientarme?

.dosseg
.model small
.stack 64
.data
;Simples mensajes
msj2 db 0ah,0dh, 'Bienvenido, por favor ingrese su password: ', '$'
msj3 db 0ah,0dh, 'Su password es correcto ', '$'
msj4 db 0ah,0dh, 'Su password es incorrecto, por favor intentelo nuevamente ', '$'
vec db ('isael'), '$' ;Vector 1
vec2 db 7 dup(' '), '$' ;Vector 2
.code
inicio:
mov ax,@data
mov ds,ax
mov ah,09
mov dx,offset msj1 ;Imprimimos el msj1
int 21h
lea si,vec ;Cargamos en el registro si al primer vector

lea si,vec2 ; Se carga en SI el vector2

pedir2: ;
mov ah,01h
int 21h
mov [si],al
inc si
cmp al,0dh
ja pedir2
jb pedir2

mov cx,7 ;Determinamos la cantidad de datos a leer/comparar
mov AX,DS ;mueve el segmento datos a AX
mov ES,AX ;Mueve los datos al segmento extra

compara:
lea si,vec ;cargamos en si la cadena que contiene vec
lea di,vec2 ;cargamos en di la cadena que contiene vec2
repe cmpsb ;compara las dos cadenas
Jne diferente ;si no fueron igual
je iguales ;Si fueron iguales
iguales:
mov dx,offset msj3 ;Imprime que son iguales y finaliza el programa.
int 21h

diferente:
mov dx,offset msj4 ; Imprime que son diferentes y finaliza el programa.
int 21h
mov ah,04ch
int 21h
end
 
#3
Si me explicas a detalle cómo funciona el código que posteas te ayudo con todo gusto,
El programa se trata de comparar cadena de caracteres, es similar a una contraseña de cajera, se valida la palabra insertada con la que ya esta establecida, hace todo el proceso pero si es diferente debe pedir la contraseña nuevamente y este proceso debe repetirse, pero eso es lo que no entiendo, no se como agregar dicho contador o repetición por si no es correcto
 

Zephyros

Bovino de la familia
#4
Me has dicho lo que hace el programa, no cómo lo hace. Hay una gran diferencia entre ambos.

Cuando uno crea un programa, tiene la capacidad de modificarlo a placer, porque entiende perfectamente cómo funciona el mismo.
En cambio, cuando uno intenta explicar el código de alguien más no siempre está en la posibildiad de hacerlo porque la lógica del programador y el porqué lo hace de esa manera. Cada programador tiene una lógica distinta y una manera personal de crear código, de ahí se deriva mi solicitud.

No me queda claro cómo funciona el programa y aunque te dijera que pongas un contador, desconozco el mejor lugar en el código para hacerlo, ya que desconozco la lógica del programa.

Vamos, a fin de cuentas, lo que necesitas es un contador (acumulador, si lo quieres llamar así), que vaya llevando el control de una variable (que según entiendo representará el número de intentos de ingresar una contraseña) y repetira un bloque de código/programa si la contraseña es incorrecta. La clave de todo es el bloque de ingreso de datos y comparación, esa es la parte que debes "agrupar" en un bloque y repetirlo N veces si la contraseña ingresada es incorrecta.

Una macro (en ASM) es una analogía de una función (por ejemplo en C/C++), donde separas/divides el código en operaciones simples que aceptarán datos sencillos y repetibles durante la vida del programa y regresarán datos simples y repetibles en el mismo lapso. Por ejemplo en este caso, la macro sería la parte de captura y comparación de la contraseña, y dependiendo del resultado de dicha comparación devolverá FALSO o VERDADERO, algo que el programa debe ser capaz de aceptar y procesar para seguir el flujo del mismo, acorde a ello.
 
#5
Me has dicho lo que hace el programa, no cómo lo hace. Hay una gran diferencia entre ambos.

Cuando uno crea un programa, tiene la capacidad de modificarlo a placer, porque entiende perfectamente cómo funciona el mismo.
En cambio, cuando uno intenta explicar el código de alguien más no siempre está en la posibildiad de hacerlo porque la lógica del programador y el porqué lo hace de esa manera. Cada programador tiene una lógica distinta y una manera personal de crear código, de ahí se deriva mi solicitud.

No me queda claro cómo funciona el programa y aunque te dijera que pongas un contador, desconozco el mejor lugar en el código para hacerlo, ya que desconozco la lógica del programa.

Vamos, a fin de cuentas, lo que necesitas es un contador (acumulador, si lo quieres llamar así), que vaya llevando el control de una variable (que según entiendo representará el número de intentos de ingresar una contraseña) y repetira un bloque de código/programa si la contraseña es incorrecta. La clave de todo es el bloque de ingreso de datos y comparación, esa es la parte que debes "agrupar" en un bloque y repetirlo N veces si la contraseña ingresada es incorrecta.

Una macro (en ASM) es una analogía de una función (por ejemplo en C/C++), donde separas/divides el código en operaciones simples que aceptarán datos sencillos y repetibles durante la vida del programa y regresarán datos simples y repetibles en el mismo lapso. Por ejemplo en este caso, la macro sería la parte de captura y comparación de la contraseña, y dependiendo del resultado de dicha comparación devolverá FALSO o VERDADERO, algo que el programa debe ser capaz de aceptar y procesar para seguir el flujo del mismo, acorde a ello.
 
#6
Si amigo ya entendí tu punto, de hecho muchas gracias por tu interés gracias a dios ya pude terminarlo, que era lo importante. Se te agradece tu apoyo.
 

Moonstar

Bovino adicto
#7
jaja declaras una variable tipo entero, luego la asignas un valor de 3, despues mas abajo despues de la captura y comparacion haces un decremento despues un salto condicional donde el valor de la variable es igual a cero, al ser correcto asignas el valor de 1 para que no vaya hacia atras. Facil no?
 
Arriba