일부 NOP 코드는 다른 NOP 코드와 다르게 취급됩니까? nop 00000000003 90

나는 이것에 대해 궁금합니다.

00000000001 90                              nop
00000000002 90                              nop
00000000003 90                              nop

정확히 이것과 동일하게 실행됩니까?

00000000001 0F1F00                          nop        dword [ds:rax]

두 번째 예가 첫 번째와 반대되는 영향은 무엇입니까?



답변

기계 아키텍처에 따라 다릅니다. 고전적인 KA-10 (pdp-10)은 많은 nop 코드를 가지고 있었으며, 아마도 매우 규칙적인 명령어 세트의 결과이며 모든 마이크로 코드가 아닌 descrete 구성 요소에 의해 구현되었다는 사실입니다. 일부 NOP는 메모리를 참조했지만 일부는 건너 뛰지 않은 건너 뛰기 테스트 였지만 건너 뛰기를 유발할 수있는 조건 등을 테스트했습니다. “JFCL 0″은 매뉴얼에서 가장 빠른 nop로 광고되었습니다.


답변

두 번째 예제는 첫 번째 예제보다 더 빨리 실행되어야합니다. 첫 번째 예에서는 세 개의 개별 명령이 실행됩니다. 두 번째는 단 하나의 명령입니다. 멀티 바이트 NOP는 CPU “힌트”(정확하게 언제 어떻게 기밀인지 )에 사용하기위한 것 입니다. 이들은 캐쉬 라인에서 긴밀한 루프를 시작하기 위해 정렬 목적으로 유용 할 수 있지만 현재는 다른 용도가 없습니다. CPU가 실제로 인수를 평가하는지 여부는 확실하지 않으므로 명령어 디코딩 시간을 늘리거나 메모리 액세스 패널티가 발생하는지 여부를 말할 수 없습니다. 좋은 ICE를 가진 사람은이 중 하나를 테스트하고 버스 추적에서 어떤 주소가 팝업되는지 확인하고 싶습니까?


답변