Assembler Language Programming

hlasů
0

Snažím se napsat program, který vstupy kladné číslo méně než 10 a výstupy součet prvních čísel. Například 5 by bylo 5 + 3 + 4 + 2 + 1. Tyto příkazy jsou zastavení, Load, Store, přidat, součet, Násobit, Dělit, vstup, výstup, Branch, Branch pokud 0 a větve ne-li 0. Může mi někdo pomoct zde. Jsem trochu zasekl. i to, co jsem napsal je:

      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  

No, jak vidím, že pracovat je načtete nějaké číslo n a přidat částku 0 a pak uložit tuto částku jako součet n +. Pak načtete n znovu a odečteme 1 a uložení, které jako nové částky. Ale musím to opakovat, dokud n dosáhne 0. Tak jak to mám udělat?

Ok, takže to, co musím udělat, je použít pobočky, pokud 0 a pobočku, pokud není 0. Myslím, že jsem to? tak:

     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 = Prostor pro Constant, ale to, co je nutné zopakovat je odečítání po druhém a sečtením až n dosáhne 0. Branch, ne-li nulový, je BRGT a pobočky, pokud je nula BZ a větev je BR, LD je zátěž. Vím, co musím zopakovat, ale já nevím, jak to budete dělat v assembleru.

Položena 08/01/2010 v 04:46
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
5

Vzhledem k tomu, že to zní jako domácí úkol, začnu s několika kusy.

  1. Jste vypracovali logiku tohoto problému ještě? „Druh přilepená“ by mohlo znamenat, že máte tušení, jak to je třeba udělat, nebo že si nejste jisti, jak to provést s dostupnými pokyny. Pokud jste dosud vypracovali logiku, to považují za - jak si přijít s podmínkami, jak si je přidat k sobě, a co dělat s výsledky?

  2. Pokud jste vypracovali logiku, pak které příkazy budou provádět každé části?

Máte-li konkrétnější dotazy, neváhejte aktualizovat a budu reagovat, ale obecně politika stejně tak nabídnout vodítko spíše než jen psát kód pro (možná?) Domácí otázek.

Edit : ok skvělé, že máte nějaký kód, a vypadá to, že jste na správné cestě, ale ještě tam nebyl. První věc, kterou bych se zeptat, zda jste se pokusili spustit kód na papíře. Vyberte si libovolný vstup (řekněme 5, jak je v příkladu) a krokovat kódem jedné instrukce najednou vidět v případě, že logika, že program provádí sleduje logiku, kterou vymysleli v kroku 1. Teď věřím, že program nefunguje tak, jak napsal; uvidíme, jestli můžete zjistit, proč a pokud ne, dám ti radu.

Edit 2 : úžasné, že jste tak blízko, že už máte odpověď a jen je třeba ji kódovat. Říkal jste, že chcete opakovat, dokud n dosáhne 0. Takže, který příkaz vám umožní mít jednu ze dvou větví v závislosti na tom, zda n je 0, nebo ne?

Editovat 3 : máte pravdu v předpokladu, že budete muset použít větev, pokud 0 / pobočka není 0, ale nevidím žádné z těch, ve svém posledním kódu. Zmeškal jsem něco? Také to, co je DC v tomto případě? To by mohlo být užitečné, pokud přidání klíč, takže vím přesně, jaké instrukce používáte. Jak jsem již řekl dříve, zkuste spuštěním svůj program rukou - to vám ukáže, kde jsou chyby jsou. Můj tip pro vás právě teď je identifikovat část kódu, který je třeba provádět opakovaně a zjistit, jestli je ve skutečnosti nemá vykonán opakovaně.

Odpovězeno 08/01/2010 v 04:50
zdroj uživatelem

hlasů
2

Zkuste psaní na problém v pseudo-kódu na vysoké úrovni jako první.

Potom přeložit jej do assembleru.

Můžete najít pomoc na programování v jazyce symbolických instrukcí zde

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

Tato vůně jako školní práce, takže si myslím, že by mělo stačit, aby vám jít.

Odpovězeno 08/01/2010 v 04:51
zdroj uživatelem

hlasů
0

přemýšlet o tom v jazyce C (za předpokladu, že ji znáte)

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

povšimněte si chybějících výkazů přestávky (kromě na 0'th případě).

Znamená to pomůže?

Odpovězeno 10/01/2010 v 21:51
zdroj uživatelem

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