>

나는 ia-32 를 읽고 있습니다  지시 형식과 ModR/M 를 발견  필요한 경우 1 바이트이지만 필요한지 확인하는 방법은 누군가 Opcode 에 의해 결정된다고 말합니다. 하지만 어떻게? 세부 사항을 알고 싶습니다. 세부 사항을 설명하는 유용하고 권위있는 문서가 있습니까?

  • 답변 # 1

    Intel의 vol.2 매뉴얼에는 각 명령의 각 형태에 대한 피연산자의 인코딩에 대한 세부 사항이 있습니다. 예 : 잘 알려진 add 의 8 비트 피연산자 크기 버전 만 사용  2 reg, rm 형식을 가진 명령;rm, 즉시 형태; add al, imm8 를위한 No-ModRM 2 바이트 숏

    Opcode    Instruction    | Op/En |  64-bit Mode | Compat/Leg Mode |  Description
    04 ib     ADD AL, imm8   |  I    |   Valid           Valid         Add imm8 to AL.
    80 /0 ib  ADD r/m8, imm8 |  MI   |   Valid           Valid         Add imm8 to r/m8.
    00 /r     ADD r/m8, r8   |  MR   |   Valid           Valid         Add r8 to r/m8.
    02 /r     ADD r8, r/m8   |  RM   |   Valid           Valid         Add r/m8 to r8.
    
    

    그리고 그 아래의 Instruction Operand Encoding ¶ 표는 위의 Op/En (오퍼랜드 인코딩) 열에서 I/MI/MR/RM 코드의 의미를 자세히 설명합니다.

    Op/En   | Operand 1        | Operand 2     | Operand 3  Operand 4
    RM      | ModRM:reg (r, w) | ModRM:r/m (r) |  NA        NA
    MR      | ModRM:r/m (r, w) | ModRM:reg (r) |  NA        NA
    MI      | ModRM:r/m (r, w) | imm8/16/32    |  NA        NA
    I       | AL/AX/EAX/RAX    | imm8/16/32    |  NA        NA
    
    

    "I"피연산자 양식에는 ModRM이 언급되어 있지 않으므로, 하나도 없습니다.그러나 MI에는 하나가 없습니다. ( /r 와 함께   /0 로 채워지는 분야   80 /0 에서  opcode 표에 있습니다.)

    RM과 MR은 r/m 피연산자 (메모리 일 수 있음)가 대상인지 또는 소스인지에 대해서만 다릅니다.

  • 이전 Azure Data Factory에서 부모 파이프 라인에서 자식 파이프 라인으로 값 전달
  • 다음 java - 회의실 데이터베이스의 행 수 제한