2017-11-14 9 views
0

Ich versuche Assemblersprache in Python zu konvertieren. Ich versuche, den Assemblercode so wörtlich wie möglich zu befolgen, wenn ich das tue. Ich weiß, dass dieser bestimmte Code geschachtelte bedingte Anweisungen erfordert. Ich verwende a, b, c, d als Speicherorte. HierKonvertieren der Assemblersprache in Python Code

ist die Assemblersprache:

0 IN a 
    1 LOAD d 
    2 COMPARE a 
    3 JUMPLT 6 
    4 JUMPEQ 6 
    5 JUMPGT 12 
    6 OUT c 
    7 LOAD a 
    8 ADD b 
    9 STORE c 
    10 DECREMENT d 
    11 JUMP 20 
    12 DECREMENT c 
    13 LOAD a 
    14 COMPARE c 
    15 JUMPLT 19 
    16 JUMPEQ 19 
    17 INCREMENT d 
    18 CLEAR c    
    19 OUT d 
    20 OUT b 
    21 HALT 

Dies ist meine wörtliche Übersetzung des Code in Python.

 a = input() 

     if a<=d: 
     print c 
     c = a+b 
     d = d-1 
     print b 

     else: 
     c = c-1 
     if c<=a: 
      print d 
      print b 

     else: 
      d=d+1 
      c=0 
      print d 
      print b 

Ich sehe, dass Druck d und Druck b sind in den if und else verschachtelten Anweisungen enthalten, so, wenn ich nicht eine wörtliche Übersetzung des Codes zu tun, vielleicht sollte es so aussehen?

Und meine letzten Fragen: Sind beide Übersetzungen korrekt? Sie bewerten nicht den gleichen Weg. Gibt es auch bessere Möglichkeiten, diese Übersetzung zu machen?

Weitere Tipps oder Regeln, die Sie bei diesen Konvertierungen beachten sollten, wären willkommen.

Vielen Dank im Voraus für Ihre Hilfe.

Antwort

0

Ja, der Teil, den ich angeschaut habe, sieht für mich korrekt aus. Es wäre jedoch genauer, print b nach dem If/Else-Block zu setzen, da alle Ausführungspfade vor ihm zusammengeführt werden.

Die Asm ist klobig (z. B. lassen Sie die ersten beiden bedingten Zweige so JUMPGT 12 entweder springt oder fällt durch), so ja es gibt viel Platz, um es einfach und/oder die Python. Anfänger sehr häufig schreiben ineffiziente Verzweigung, die in die eine oder andere Richtung springt, anstatt nur springen oder durchfallen.

+0

Vielen Dank, das ist sehr hilfreich - ich werde es versuchen, wie Sie in Python beschrieben und es testen. Haben Sie sich die erste oder die zweite Übersetzung angesehen? Danke noch einmal! – JenTen10

+0

@ Cinder1: meistens nur der erste und meistens nur der erste 'if' Block/die ASM aus den Zeilen 6 bis 11. –

+0

Super! Vielen Dank! – JenTen10

Verwandte Themen