2016-07-13 3 views
0

dis 함수를 사용하여 파이썬 함수를 일단 디스 어셈블하면 일부 opcode 사이에 빈 줄이 아래와 같이 표시됩니다. 파이썬 바이트 코드의 빈 줄

>>> dis(fizzbuzz) 
    2   0 LOAD_FAST    0 (n) 
       3 LOAD_CONST    1 (3) 
       6 BINARY_MODULO 
       7 LOAD_CONST    2 (0) 
      10 COMPARE_OP    2 (==) 
      13 POP_JUMP_IF_FALSE  36 
      16 LOAD_FAST    0 (n) 
      19 LOAD_CONST    3 (5) 
      22 BINARY_MODULO 
      23 LOAD_CONST    2 (0) 
      26 COMPARE_OP    2 (==) 
      29 POP_JUMP_IF_FALSE  36 

    3   32 LOAD_CONST    4 ('FizzBuzz') 
      35 RETURN_VALUE 

    4  >> 36 LOAD_FAST    0 (n) 
      39 LOAD_CONST    1 (3) 
      42 BINARY_MODULO 
      43 LOAD_CONST    2 (0) 
      46 COMPARE_OP    2 (==) 
      49 POP_JUMP_IF_FALSE  56 

    5   52 LOAD_CONST    5 ('Fizz') 
      55 RETURN_VALUE 

    6  >> 56 LOAD_FAST    0 (n) 
      59 LOAD_CONST    3 (5) 
      62 BINARY_MODULO 
      63 LOAD_CONST    2 (0) 
      66 COMPARE_OP    2 (==) 
      69 POP_JUMP_IF_FALSE  76 

    7   72 LOAD_CONST    6 ('Buzz') 
      75 RETURN_VALUE 

    9  >> 76 LOAD_GLOBAL    0 (str) 
      79 LOAD_FAST    0 (n) 
      82 CALL_FUNCTION   1 (1 positional, 0 keyword pair) 
      85 RETURN_VALUE 
      86 LOAD_CONST    0 (None) 
      89 RETURN_VALUE 

>>

는 라벨의 지시를 나타내는 데 사용됩니다하지만 난 빈 줄을 위해 무엇을 얻을 수가 없습니다. 이 빈 줄이 무엇을 의미하는지 알 수 있습니까?

답변

1

빈 줄은 명령문의 디스 어셈블리 사이의 구분입니다. 블록의 첫 번째 줄 앞에있는 숫자는 소스가 있다고 가정 할 때 소스의 줄 번호입니다. 예를 들어

: 2, 3 선 2 및 원본 소스의 3을 참조 어디까지

2   0 LOAD_CONST    1 (1) 
      3 STORE_FAST    0 (x) 

3   6 LOAD_CONST    2 (2) 
      9 STORE_FAST    1 (y) 

def test(): 
    x = 1 
    y = 2 

가 표시됩니다.