Duda en lenguaje de ensamblador

Tengo este codigo en lenguaje de ensamblador pero quiero es que el mensaje (ingrese un numero) se repita si no que solo salga una ves por numero y tambien como hago que me iguale a cero ya que me piden que el numero ingresado se verifique si es par o impar igual a cero.

Gracias:

Name "NPI"
org 100h
Jmp inicio:
Msj db 'Ingrese un numero: ','$'
N1 db ' Es un Numero Par', 0ah, 0dh, '$'
n2 db ' Es un Numero Impar', 0ah, 0dh, '$'
¿n3 db?

;direccion de datos.
Inicio proc far
mov ax, @data
mov ds,ax

; solicitar numeros al usuario.

mov ah,09h ; peticion
lea dx,msj ; carga la direccion.
int 21h; llamada al dos

leer:

mov ah, 0 
int 16h 
mov n3[0], al 
sub al, 30h

and al, 0001b 
cmp al, 0h 
je par 
jne impar 
par: 
mov dl, n3[0] 
mov ah, 2 
int 21h 
lea dx, n1 
mov ah, 9 
int 21h 
jmp inicio 
impar: 
mov dl, n3[0] 
mov ah, 2 
int 21h 
lea dx, n2 
mov ah, 9 
int 21h 
Jmp inicio:

Ret

1 Respuesta

Respuesta

No tengo demasiada idea de lenguajes Ensamblador y hay instrucciones ahí que no conozco pero puedo intentar darte algunas ideas para resolver lo que necesitas:

  1. Para tu primer apartado, que entiendo que es que introduces números y estos se van a ir imprimiendo, puedes utilizar una pila (Stack) para ir metiendo los números y después ir haciendo operaciones POP para ir sacándolos. Si puedes reservar varias posiciones de memoria podrías utilizar algo similar a los Arrays (Arreglos) para almacenar los números y después recorrerlo con un bucle.
  2. Para tu segundo problema, algo que podrías hacer es crear una subrutina para comprobar el tema de si es par o impar, ya que comprobar si el número es igual a cero es trivial. Esto lo puedes hacer creando un bucle en el que le vas restando 2 al número en cuestión hasta que llegues a 0 o a 1, si has llegado a 0 significa que el número es par ya que es múltiplo de 2, si has llegado a 1 significa que es impar.

En un lenguaje de programación de más alto nivel (en este caso C, C++ que es una de las etiquetas que has puesto) sería algo como:

/*
* Esta función iría después de comprobar si el número es 0 o no claro.
* Si pasas un 0 a esta función te va a decir que es Par
*/
bool EsPar(int numero) {
   int aux = numero;
   while(true) {
      if (aux == 1) {
         return false;
      } else if (aux == 0) {
         return true;
      }
      aux -= 2;
   }
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas