nop 바이트 이해

nop 바이트 이해

좋아, 그래서 나는 AMD64 매뉴얼을 읽고 그것이 nop실제로 이라는 것을 알았고 xchg eax, eax, xchg흥미로운 것을 발견했습니다. 레지스터를 지정하기 위한 명령으로 바이트가 인코딩될 수 있다는 것입니다(죄송합니다. 제 iPod을 사용하고 있습니다). :그림.

그래서 내가 궁금한 것은 작업할 바이트가 있는지 프로세서가 어떻게 알 수 있는지, 아니면 추가 레지스터가 rAX실제로 여전히 1바이트가 되도록 하는 유형이어야 하는지 입니다.0x90

답변1

나는 xchg를 보고 흥미로운 것을 발견했습니다. 레지스터를 지정하기 위한 명령으로 바이트가 인코딩될 수 있다는 것입니다.

예, 이것이 대부분의 x86 명령어가 작동하는 방식입니다. 명령어는 한 번에 바이트 단위가 아닌 한 번에 32비트 또는 64비트(머신의 단어 길이)로 가져옵니다.

with XCHG를 지정하면 (여기서는 32비트 시스템에 있고 64비트 시스템에 있음)은 입니다 . 왜냐하면 에 대한 레지스터 mux 코드가 (사실상 아무것도 하지 않는 1사이클 작업)이기 때문입니다. 마찬가지로 명령어는 ( 의 mux 코드 ) 로 어셈블됩니다 .rAXrAXrAXEAXRAX0x90rAX0x00XCHG rBX, rAX0x93rBX0b011

opcode 인코딩은 설명서의 다른 곳에 나열되어야 합니다. 또는 x86 opcode 맵(모든 것이 함께 다중화되는 방식을 이해하는 데 도움이 됨)을 볼 수 있습니다. 다음에서 하나를 찾을 수 있습니다.Intel 64 및 IA-32 아키텍처 소프트웨어 개발자 매뉴얼(2권, 부록 A.3).

그래서 내가 궁금한 것은 작업한 후에 바이트가 있는지 프로세서가 어떻게 알 수 있는지, 아니면 추가 레지스터가 rAX 유형이어야 하여 실제로 여전히 1바이트 0x90이 되도록 하는지 여부입니다.

여기는 그 반대입니다. 64비트 모드의 경우 실제로접두사지시어 자체에 ( REX접두사)를 나타냅니다. 프로세서는 접두사의 유무에 따라 무엇을 찾아야 할지 알고 있으며 REX, 접두사가 없으면 명령은 여전히 ​​입니다 0x90.

관련 정보