Estou curioso sobre isso, digamos que tenho:
00000000001 90 nop
00000000002 90 nop
00000000003 90 nop
É executado exatamente o mesmo que este?
00000000001 0F1F00 nop dword [ds:rax]
Que efeito teria o segundo exemplo em oposição ao primeiro?
multi byte nop
, aparece alguns resultados.Respostas:
Depende da arquitetura da máquina. O KA-10 clássico (pdp-10) tinha muitos códigos nop, provavelmente uma conseqüência de seu conjunto de instruções altamente regular e o fato de que tudo foi implementado por componentes discretos, não por microcódigo. Alguns NOPs faziam referência à memória, outros eram testes de salto que nunca foram pulados, mas mesmo assim testaram a condição que poderia ter causado um salto, e assim por diante. "JFCL 0" foi anunciado no manual como o mais rápido.
fonte
Parece que o segundo exemplo deve ser executado mais rápido que o primeiro. No primeiro exemplo, três instruções separadas serão executadas. No segundo, apenas uma instrução. Os NOPs de vários bytes destinam-se a ser usados para "dicas" da CPU (exatamente como e quando é aparentemente confidencial ). Eles podem ser úteis para fins de alinhamento (para iniciar um loop restrito em uma linha de cache), mas atualmente não têm outro uso. Não está claro se a CPU realmente avalia os argumentos; portanto, não é possível dizer se aumenta o tempo de decodificação da instrução ou incorre em uma penalidade de acesso à memória. Alguém com um bom ICE deseja testar um desses e ver quais endereços aparecem em um rastreamento de barramento?
fonte