Assemblersprache Programmierung

stimmen
0

Ich versuche, ein Programm zu schreiben, gibt eine positive Zahl kleiner als 10 und gibt die Summe der ersten Zahlen. Zum Beispiel würde 5 + 4 + 5 3 + 2 + 1 sein. Die Befehle sind Stopp, Laden, Speichern, Hinzufügen, Sum, Multiplizieren, Dividieren, Input, Output, Ast, Zweig, wenn 0 und verzweigen, wenn nicht 0 jemand kann mir helfen hier. Ich bin ein bisschen fest. gut, was ich geschrieben habe, ist:

      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  

Nun, die Art, wie ich es sehe Arbeit ist es, Ihnen eine bestimmte Anzahl n zu laden und eine Summe von 0 hinzufügen und dann speichern Sie diese Summe als n + Summe. Dann laden Sie n wieder und subtrahieren 1 und speichern, die als die neue Summe. Aber ich brauche es, dies zu wiederholen, bis n 0 erreicht So wie ich das tun?

Ok, so was ich tun müssen, um den Zweig, wenn 0 und Zweig verwenden, wenn nicht 0 Ich glaube, ich habe es? damit:

     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 = Designated Konstante, aber was ich wiederholen muß, ist das Subtrahieren von einer und Addieren der Summe bis n 0 Zweig erreicht, wenn nicht Null BRGT ist und Zweig, wenn Null ist BZ und Zweig BR, LD Last ist. Ich weiß, was ich zu wiederholen brauche, aber ich weiß nicht, wie Sie diese Sprache in der Montage tun.

Veröffentlicht am 08/01/2010 um 04:46
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
5

Da es sich wie Hausaufgaben klingt, werde ich mit einigen Stücken beginnen.

  1. Arbeiten Sie noch die Logik dieses Problems aus? „Kind of stecken“ könnte bedeuten, Sie haben keine Ahnung, wie dies getan werden muss, oder dass Sie nicht sicher sind, wie es mit den zur Verfügung stehenden Anweisungen zu implementieren. Wenn Sie die Logik nicht geklappt haben, betrachten Sie dieses - wie kommen Sie mit den Bedingungen auf, wie fügen Sie sie zusammen, und was mit den Ergebnissen Sie tun?

  2. Wenn Sie die Logik herausgearbeitet haben, dann Befehle, die jeden Teil durchführen wird?

Wenn Sie spezifischere Fragen haben, fühlen sich frei zu aktualisieren, und ich werde antworten, aber in der Regel auf, so dass die Politik ist es, Leitlinien zu bieten, anstatt nur Code zu schreiben, für (möglich?) Hausaufgaben Fragen.

Bearbeiten : ok groß, haben Sie einen Code erhalten, und es sieht aus wie Sie auf dem richtigen Weg sind , aber noch nicht da. Das erste , was ich Sie fragen würde, ob Sie den Code auf Papier auszuführen versucht. Wählen Sie einen beliebigen Eingang (sagt sie 5, wie in Ihrem Beispiel) und Schritt durch den Code einer Anweisung zu einem Zeitpunkt , zu sehen , ob die Logik, die das Programm führt die Logik folgt , die Sie kamen mit dem in Schritt 1 Im Moment glaube ich , das Programm nicht als schriftliche Arbeit; sehen , wenn Sie herausfinden können , warum und wenn nicht ich gebe Ihnen einen Hinweis.

Edit 2 : fantastisch, du bist so nah , dass man bereits die Antwort haben und müssen es nur codieren. Sie sagten , Sie wiederholen möchten , bis n 0. So erreicht, der Sie eine von zwei Zweige nehmen lassen Befehl je nachdem , ob n 0 ist oder nicht?

Bearbeiten 3 : Sie richtig in der Annahme , dass Sie benötigen Zweig zu verwenden , wenn 0 / Zweig nicht 0 ist , aber ich weiß nicht irgendwelche von denen in Ihrem neuesten Code sehen. Habe ich etwas verpasst? Auch, was ist DC für in diesem Fall? Es könnte hilfreich sein , wenn Sie einen Schlüssel veröffentlichen , damit ich genau weiß , welche Befehle Sie verwenden. Wie ich schon sagte, versuchen Sie Ihr Programm von Hand ausgeführt wird - das wird Ihnen zeigen , wo die Fehler sind. Mein Tipp für Sie gerade jetzt ist der Teil des Codes zu identifizieren , die wiederholt ausgeführt werden muss , und herauszufinden , ob es tatsächlich wiederholt ausgeführt bekommt.

Beantwortet am 08/01/2010 um 04:50
quelle vom benutzer

stimmen
2

Versuchen Sie, das Problem in einem High-Level-Pseudo-Code zu schreiben aus erster Stelle.

Dann übersetzen Sie es zu Ihrer Assemblersprache.

Sie können hier Hilfe zur Programmierung in Assembler-Sprache finden

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

Dieser Geruch wie eine Schulaufgabe, so denke ich, dass genug sein sollte, um Sie zu gehen.

Beantwortet am 08/01/2010 um 04:51
quelle vom benutzer

stimmen
0

darüber nachdenken, es in C (vorausgesetzt, Sie wissen es)

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

beachten Sie die fehlende break-Anweisungen (mit Ausnahme des 0-ten Fall).

Hilft das?

Beantwortet am 10/01/2010 um 21:51
quelle vom benutzer

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