2017-11-14 1 views
0

어셈블리 언어를 파이썬으로 변환하려고합니다. 필자는 이렇게 할 때 가능한 한 어셈블리 코드를 그대로 따르려고합니다. 이 특정 코드에는 중첩 된 조건문이 필요하다는 것을 알고 있습니다. 나는 a, b, c, d를 메모리 위치로 사용하고있다. 여기 어셈블리 언어를 파이썬 코드로 변환

는 어셈블리 언어이다 :

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 

이 파이썬으로 코드 내 직역입니다. 내가 코드의 직역을하고 있지 않다, 그래서 만약

 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 

나는 어쩌면 다음과 같아야합니다, 인쇄 D 및 인쇄 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입니다 (예 : 처음 두 조건부 분기를 생략하여 JUMPGT 12이 점프 또는 넘어짐). 그렇기 때문에 단순히 그것 및/또는 Python에 많은 공간이 있습니다. 초보자 매우은 점프 또는 넘어지는 대신 한쪽 또는 다른 점프로 비효율적 인 분기를 자주 작성합니다.

+0

고맙습니다. 매우 도움이됩니다. 파이썬에서 설명한대로 시도해보고 테스트 해 보겠습니다. 첫 번째 번역본이나 두 번째 번역본을 보셨습니까? 아니면 둘 다 보셨습니까? 다시 한 번 감사드립니다! – JenTen10

+0

@ Cinder1 : 주로 첫 번째, 대부분은 첫 번째'if' 블록/6 행부터 11 행까지의 asm입니다. –

+0

굉장! 정말 고마워! – JenTen10

관련 문제