Assembly nyelvű programozás

szavazat
0

Én próbálok írni egy programot, amely bemenetek pozitív szám kevesebb, mint 10, és kiadja az összege az első szám. Például 5 lenne 5 + 4 + 3 + 2 + 1. A parancsok Stop, Load, Store, hozzáadása, Sum, Szorzás, Osztás, Input, Output, Branch, Branch, ha 0, és az ágak, ha nem 0. Tud valaki segíteni nekem. Én egyfajta ragadt. jól, amit írtam is:

      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  

Nos, ahogy látom, hogy működik az Ön betölteni néhány szám n, és adjunk hozzá egy összege 0, majd tárolja ezt az összeget az n + összeget. Akkor betölteni n újra és kivonni 1 és tárolja, hogy az új összeget. De szükség van rá, hogy ismételje meg ezt, amíg eléri a 0-n Szóval hogyan tudom ezt megtenni?

Ok így, mit kell tennie, hogy használja az ág, ha 0 és ág, ha nem 0. Azt hiszem van ez? így:

     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 = Kijelölt Állandó, de azt meg kell ismételni a kivonó egy és hozzáadjuk az összeget, amíg eléri a 0-n Branch, ha nem nulla van BRGT és ág, ha a nulla BZ és ág BR, LD terhelést. Tudom, mit kell megismételni, de nem tudom, hogy csinálja ezt assembly nyelven.

A kérdést 08/01/2010 04:46
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
5

Mivel ez úgy hangzik, mint a házi feladatot, Kezdjük néhány darabot.

  1. Előfordult dolgozott ki a logika, hogy ez a probléma még? „Valami beragadt” jelentheti fogalmad sincs, hogy ez hogyan kell tenni, vagy azt, hogy nem vagyunk biztosak benne, hogyan valósítható meg a rendelkezésre álló utasításokat. Ha még nem dolgoztak ki a logika, hogy ezt a - hogyan jön ki a feltételeket, hogyan add össze őket, és mit csinál az eredményekkel?

  2. Ha már dolgozott ki a logikát, akkor a parancsok elvégzi az egyes részek?

Ha konkrétabb kérdése van, bátran frissítheti és én válaszolni, de általában az a politika, SO, hogy iránymutatást adjon, nem csak írni kódot (lehetséges?) Házi kérdéseket.

Szerkesztés : ok nagy, van néhány kódot, és úgy néz ki, mint te a helyes úton, de még nincs ott. Az első dolog, amit kérdezni, hogy vajon ha már megpróbálta végrehajtani a kódot papírra. Pick tetszőleges input (mondjuk 5, mint a példában), és át lehet lépni a kódot egy utasítás is, hogy ha a logikát, hogy a program elvégzi logikáját követi, hogy jött az 1. lépésben Most úgy vélem, a program nem működik az írott; ha lehet megtudni, hogy miért, és ha nem adok egy tippet.

Szerkesztés 2 : félelmetes, annyira közel, hogy már megvan a válasz, és csak meg kell kódolni azt. Azt mondta, meg akarja ismételni, amíg el nem éri n 0. Így, ami parancs segítségével az egyik szerint két ága attól függően, hogy n értéke 0, vagy nem?

Edit 3 : te helyesen feltételezve, hogy kell használni, ha ág 0 / ág nem 0, de nem látja egyik ilyen a legújabb kódot. Kihagytam valamit? Továbbá, mi DC ebben az esetben? Hasznos lehet, ha küldesz egy kulcsot, így pontosan tudom, hogy mely utasítások használ. Ahogy már mondtam, próbálja meg a programot végrehajtó kézzel - ami megmutatja, hogy hol a bogarak. Saját tipp az Ön számára most az, hogy azonosítsa a részét a kódot is teljesíteni kell többször, és megtudja, ha valóban nem kap végre ismételten.

Válaszolt 08/01/2010 04:50
a forrás felhasználó

szavazat
2

Próbálja ki írásban a problémát egy magas szintű pszeudo-kód először.

Ezután fordítsa el a assembly.

Megtalálható segítséget programozás assembly nyelven itt

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

Ez a szag, mint egy iskolai feladat, ezért úgy gondolom, hogy meg kell lennie ahhoz, hogy mész.

Válaszolt 08/01/2010 04:51
a forrás felhasználó

szavazat
0

belegondolunk C (feltételezve, hogy ismered)

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;
}

megjegyezni, hogy nincs törés nyilatkozatok (kivéve a 0'th eset).

Segít ez?

Válaszolt 10/01/2010 21:51
a forrás felhasználó

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