2017-12-06 6 views
5

GNU 어셈블러에는 일부 명령어에 대해 출력되는 opcode의 대체 형식을 제어하는 ​​수단이 있습니다. 예 :x86 "mov.s"의 ".s"와 같은 GNU 어셈블러 명령어 접미사는 어디에 문서화되어 있습니까?

0: 89 c8     mov eax,ecx 
2: 8b c1     mov eax,ecx 

우리는 .s 접미사가 8b 버전으로 89 옵 코드를 전환 나타나는 것을 볼 수있다 (적절하게 ModRM 바이트 변경) : as test.s -o test.o && objdump -d test.o -M intel에 위의 코드를 처리

.intel_syntax noprefix 
mov eax, ecx 
mov.s eax, ecx 

다음 분해를 제공합니다.

GNU 어셈블러에서 지원하는 이러한 접미어에 대해 자세히 알고 싶지만 관련 문서를 찾지 못했습니다. 이 접미어는 어디에서 읽을 수 있습니까?

+0

문서 작업에 대한 자세한 내용을 직접 묻는 대신 문서 링크를 요청하기 때문에 이는 기술적으로 주제가 아닙니다. (당신은 문서에 대한 요약 + 링크를 좋은 대답으로 만들 수있는 방식으로 할 수 있습니다).어쨌든 좋은 질문입니다. IMO 규칙을 어기더라도 열어 두어야합니다. –

+0

Counter-point ... 말로 표현하면, 질문은 주제를 벗어나서 닫아야하고, 주제에 관해서는 다시 말해야합니다. 주제를 벗어난 질문은 주제를 벗어난 질문을위한 모델이 될 수 있습니다. – Mogsdad

답변

3

Binutils 2.29부터 명령어 접미사는 이제으로 의사 접두어를 사용합니다. 오래된 접미사는 GNU 어셈블러 (2.29 이전) info pages에서 찾을 수 있습니다. 이전 info as 페이지가 이런 말 :

9.15.4.1 지시 명명

다른 인코딩 옵션이 선택 기억하는 접미사를 통해 지정할 수 있습니다

[싹둑]. .s 접미어는 한 레지스터에서 다른 레지스터로 이동할 때 인코딩에서 2 피연산자를 스왑합니다. .d8 또는 .d32 접미사는 인코딩시 8 비트 또는 32 비트 변위를 선호합니다. 새로운 의사 접두사를 문서화

는, Binutils의 2.29 (이상) info as 페이지를 읽기 위해 수정되었다 :

다른 인코딩 옵션은 의사 접두사를 통해 지정 될 수 있습니다 :

  • {disp8 } - 8 비트 변위를 선호합니다.
  • {disp32} - 32 비트 변위를 선호합니다.
  • {load} -로드 - 폼 명령어를 선호합니다.
  • {store} - 점포 형식 명령을 선호합니다.
  • {vex2} - VEX 명령어의 2 바이트 VEX 접두사를 선호합니다.
  • {vex3} - VEX 명령어의 경우 3 바이트 VEX 접두사를 선호합니다.
  • {evex} - EVEX 접두어로 인코딩합니다.
+0

분해 할 때 이러한 재정의를 사용하기 위해'objdump' 또는 다른 binutils 도구를 얻을 수 있다면 멋질 것입니다. 하지만 정보 페이지 색인과 관련된 내용은 없습니다. Agner Fog의 objconv와 같은 제 3 자 디스어셈블러가 가질 수있는 기능은 아마도 ASM을 다시 조립할 수 있기 때문입니다. –

관련 문제