2017-11-14 6 views
0

アセンブリ言語をPythonに変換しようとしています。私はこれを行うときにできるだけ文字通りアセンブリコードを従おうとしています。私はこの特定のコードが入れ子にされた条件文を必要とすることを知っています。私はa、b、c、dをメモリの場所として使用しています。ここで アセンブリ言語をPythonコードに変換する

は、アセンブリ言語である:

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 

これは、Pythonにコードの私の直訳です。私は、コードの直訳をやっていないよので、もし印刷さdと印刷bがあれば、他のネストされた書類に含まれていることがわかり

 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 

、多分それは次のようになりますか?

 a = input() 

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

     else: 
     c = c-1 
     print d 
     print b 

     if c>a: 
      d=d+1 
      c=0 

最後に、これらの翻訳のいずれかが正しいですか?彼らは同じように評価しません。また、この翻訳を行うためのより良い方法がありますか?

これらのコンバージョンについて他のヒントやルールを覚えておくことは歓迎します。

ご協力いただきありがとうございます。

答えて

0

ええ、私が見た部分が正しいように見えます。しかし、すべての実行パスがその前にマージされるので、if/elseブロックの後ろにprint bを置く方が正確です。

asmはclunkyです(例えば、最初の2つの条件付きブランチを外してJUMPGT 12が飛び降ります)ので、単純にそれやPythonには余裕があります。初心者非常には、飛び降りするだけではなく、一方向または他の方向にジャンプする非効率な分岐を頻繁に書き込みます。

+0

ありがとう、それは非常に役に立ちます - 私はあなたがPythonで説明したやり方でそれを試してみてテストします。あなたは最初の翻訳か2番目の翻訳かその両方を見ましたか?再度、感謝します! – JenTen10

+0

@ Cinder1:主に最初のもので、ほとんどが最初の 'if'ブロック/ 6行目から11行目のasmです。 –

+0

恐ろしいです!本当にありがとう! – JenTen10

関連する問題