Programación lenguaje ensamblador

votos
0

Estoy tratando de escribir un programa que introduce un número positivo menor que 10 y da salida a la suma de los primeros números. Por ejemplo 5 sería 5 + 4 + 3 + 2 + 1. Los comandos son parada, carga, tienda, Añadir, suma, multiplicación, división, entrada, salida, Rama, Rama si es 0, y la rama si no 0. ¿Puede alguien ayudarme aquí. Estoy un poco atascado. bien lo que he escrito es:

      IN    n
      LD    n
      ADD   sum
      STO   sum
      LD    n
      SUB   one
      ADD   sum
      STO   sum
      BRGT  haw
      LD    n
      BR    done
haw:  OUT   sum
done: STOP
      DC    n   4
      DC    sum 0
      DC    one 1  

Así como yo lo veo de trabajo es cargar un número n y añadir una suma de 0 y luego almacenar esta suma como suma n +. A continuación, se carga n de nuevo y restar 1 y almacenar que a medida que la nueva suma. Pero lo necesito repetir esto hasta que n llega a 0. Entonces, ¿cómo lo hago?

La autorización así que lo que tengo que hacer es utilizar la sucursal si 0 y sucursal si no 0. Creo que lo tengo? asi que:

     IN    n
     LD    n
     ADD   sum
     STO   sum  
     BR    CAW
CAW: LD    n  
     SUB   ONE  
     STO   n
     BRGT  HAW
     BZ    TAW
HAW: ADD   SUM  
     STO   SUM  
     BR    CAW  
TAW: OUT   SUM
     DC    SUM 0
     DC    ONE 1

DC = Designado constante, pero lo que tengo que repetir es la sustracción por uno y añadiendo la suma hasta n llega a 0. Rama si no es cero es BRGT y la rama si el cero es BZ y la rama es Br, LD es la carga. Yo sé lo que tengo que repetir, pero no sé cómo se hace esto en lenguaje ensamblador.

Publicado el 08/01/2010 a las 04:46
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
5

Dado que esto suena como tarea, voy a empezar con algunas piezas.

  1. ¿Ha funcionado la lógica a este problema todavía? "Un poco atascado" podría significar que usted no tiene idea de cómo hay que hacer, o que usted no está seguro de cómo ponerlo en práctica con las instrucciones disponibles. Si no ha funcionado la lógica, considere esto - ¿cómo llegar a los términos, ¿cómo añadirlos juntos, y ¿qué hacer con los resultados?

  2. Si usted ha trabajado a cabo la lógica, entonces, que los comandos llevará a cabo cada parte?

Si usted tiene más preguntas específicas dude en actualizar y voy a responder, pero en general la política de SO es ofrecer orientación en lugar de escribir código para (posible?) Preguntas de la tarea.

Editar : bien grande, tienes algo de código, y parece que estás en el camino correcto, pero no existe todavía. Lo primero que pediría que es si usted ha tratado de ejecutar el código en el papel. Elija una entrada arbitraria (por ejemplo 5, al igual que en el ejemplo) y paso a través de la instrucción de un código a la vez para ver si la lógica que lleva a cabo el programa sigue la lógica que se le ocurrió en el paso 1. En este momento creo que el programa de no funciona como está escrito; ver si se puede averiguar por qué y si no te voy a dar una pista.

Editar 2 : impresionante, que está tan cerca que ya tiene la respuesta y sólo tiene que codificarlo. Usted ha dicho que desea repetir hasta que n llega a 0. Por lo tanto, ¿Qué comando le permitirá tomar una de las dos ramas, dependiendo de si n es 0 o no?

Datos 3 : estás en lo correcto al asumir que es necesario utilizar sucursal si 0/0 sarmiento no, pero no veo ninguna de las personas en su última versión del código. ¿Me he perdido algo? Además, lo que es DC en este caso? Podría ser útil si usted pone una llave, así que sé exactamente qué instrucciones que esté utilizando. Como he dicho antes, intente ejecutar su programa con la mano - que le mostrará dónde están los errores. Mi sugerencia para usted en este momento es identificar la parte del código que debe ser ejecutado varias veces y averiguar si realmente se alcanza a ejecutar repetidamente.

Respondida el 08/01/2010 a las 04:50
fuente por usuario

votos
2

Trate de escribir el problema en un pseudo-código de alto nivel en primer lugar.

Luego traducir a su lenguaje ensamblador.

Puede encontrar ayuda en la programación en lenguaje ensamblador aquí

http://www.laynetworks.com/assembly%20tutorials.htm

Este olor como una tarea escolar, por lo que creo que debería ser suficiente para que te va.

Respondida el 08/01/2010 a las 04:51
fuente por usuario

votos
0

pensar en ello en C (suponiendo que lo sepa)

int sumnumbers(int input)
{
    int output = 0;

    input = max(input, 10);

    switch (input)
    {
        case 5:
            output += 5;
        case 4:
            output += 4;
        case 3:
            output += 3;
        case 2:
            output += 2;
        case 1:
            output += 1;
        case 0:
            output += 0;
            break;
    }

    return input;
}

tenga en cuenta la falta de sentencias break (excepto en el caso de orden 0).

¿Ayuda esto?

Respondida el 10/01/2010 a las 21:51
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more