Assembler taal Programmering

stemmen
0

Ik ben op zoek naar een programma dat een positief getal kleiner dan 10 in- en uitgangen van de som van de eerste nummers te schrijven. Bijvoorbeeld zou 5 5 + 4 + 3 + 2 + 1. De commando's zijn Stop, Load, Winkel, toevoegen, Som, Vermenigvuldigen, Delen, Input, Output, tak, tak als 0, en tak zo niet 0. Kan iemand me even helpen. Ik ben soort van geplakt. goed wat ik heb geschreven 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  

Nou, de manier waarop ik het werk zien is dat je laadt een getal n en voeg een som van 0 en bewaar dit bedrag zo n + som. Dan laad je n weer en aftrekken 1 en op te slaan dat als de nieuwe som. Maar ik heb het nodig om herhaal dit tot n bereikt 0. Dus hoe kan ik dit doen?

Ok dus wat ik moet doen is de tak als 0 en tak te gebruiken als niet 0. Ik denk dat ik het heb? zo:

     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 = Aangewezen Constant, maar wat ik moet herhalen de aftrekkende één en toevoegen van de som tot n 0 bereikt Branch of zelfs nul BRGT en tak als nul BZ en tak BR, LD belasting. Ik weet wat ik nodig heb om te herhalen, maar ik weet niet hoe je dit doet in assembler.

De vraag is gesteld op 08/01/2010 om 04:46
bron van user
In andere talen...                            


3 antwoorden

stemmen
5

Aangezien dit klinkt als huiswerk, zal ik beginnen met een aantal stukken.

  1. Hebt u werkte de logica om dit probleem nog? "Kind of vast" zou kunnen betekenen dat je hebt geen idee hoe dit gedaan moet worden, of dat je niet zeker weet hoe om het uit te voeren met de beschikbare instructies. Als u nog niet uitgewerkt de logica, van mening dat dit - hoe verzin je met de voorwaarden, hoe doe je ze bij elkaar optelt, en wat doe je met de resultaten?

  2. Als u hebben uitgewerkt de logica, dan welke commando zal elk onderdeel uit te voeren?

Als u meer specifieke vragen voel je vrij om te werken en ik zal reageren, maar over het algemeen het beleid voor SO is aanwijzingen te bieden in plaats van alleen te schrijven code voor (mogelijke?) Huiswerk vragen.

Bewerken : ok groot, je hebt wat code gekregen, en het lijkt alsof je op het juiste spoor, maar er nog niet. Het eerste wat ik zou u willen vragen is of je hebt geprobeerd om de code uit te voeren op papier. Kies een willekeurige ingang (zeg 5, zoals in uw voorbeeld) en stap door de code een instructie in een tijd als de logica die voert het programma volgt de logica dat je kwam met in stap 1. Op dit moment Ik denk dat het programma om te zien werkt niet zoals geschreven; kijk of je kunt erachter te komen waarom en zo niet ik u een hint zal geven.

Probleem 2 : geweldig, je bent zo dichtbij dat je al hebt het antwoord en moet enkel het coderen. U zei dat u wilt herhalen totdat n Dus 0 bereikt, welk commando laat je een van de twee takken, afhankelijk van het feit of n 0 of niet nemen?

Bewerken 3 : je hebt gelijk in de veronderstelling dat je nodig hebt om branch gebruiken als 0 / tak niet 0, maar ik heb geen een van deze in uw laatste code te zien. Heb ik iets gemist? Ook, wat is DC voor in dit geval? Het zou handig zijn als je een belangrijke post, dus ik weet precies welke instructies u gebruikt. Zoals ik al eerder zei, probeer het uitvoeren van uw programma met de hand - dat zal je laten zien waar de bugs zijn. Mijn tip voor u op dit moment is om te bepalen het gedeelte van uw code die moet herhaaldelijk uit te voeren en te achterhalen of het daadwerkelijk krijgt herhaald worden uitgevoerd.

antwoordde op 08/01/2010 om 04:50
bron van user

stemmen
2

Probeer het schrijven van het probleem op een hoog niveau pseudo-code eerste.

vertalen vervolgens naar uw assembler.

U kunt hier hulp bij het programmeren in assembler vinden

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

Deze geur als een schoolopdracht, dus ik denk dat moet genoeg zijn om je heen gaat zijn.

antwoordde op 08/01/2010 om 04:51
bron van user

stemmen
0

denken in C (ervan uitgaande dat je het weet)

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

let op de ontbreken van een break statements (behalve op de 0-geval).

Helpt dit?

antwoordde op 10/01/2010 om 21:51
bron van user

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