Ok, primeiro deixe-me ver se entendi: não se trata de micro otimização.
Mas, eu sei que em bootloaders na partição, muitos usam jmp short; nop
codificação. Mas é no meu entendimento que quanto menos um jmp "salta" :) menos ciclos são necessários para o processador completar, e alguns processadores veem o 0x90
e simplesmente o ignoram sem avaliá-lo.
Responder1
Você pode querer dar uma olhada noManuais para desenvolvedores de software das arquiteturas Intel 64 e IA-32, eles são um ótimo recurso para entender a arquitetura x86 do ponto de vista de um programador (supondo que você já esteja confortável com assembly).
[...] meu entendimento é que quanto menos um jmp "salta" :) menos ciclos são necessários para o processador completar
Você precisa diferenciar entre saltos próximos e distantes. Os saltos próximos simplesmente adicionam (ou subtraem por meio da matemática do complemento de 2) um deslocamento ao ponteiro de instrução (IP) ou recarregam o deslocamento de IP do segmento de código atual (CS). Os saltos próximos muitas vezes podem armazenar o deslocamento na própria palavra da instrução ou em um registro - para que toda a instrução de salto possa ser buscada em um ciclo.
Os saltos distantes armazenam o novo endereço real do ponteiro de instrução nopróximopalavra ou em um local de memória, portanto, isso requer uma busca adicional - e, portanto, leva mais tempo. Em x86 e x86-64, você podenãosalto distante para um local mantido em um registrador (deve ser a próxima palavra de instrução ou em um local na memória).
e alguns processadores veem o 0x90 e simplesmente o ignoram sem avaliá-lo.
Sim, essa é a definição do que uma NOP
instrução deve fazer. A CPU ainda precisa buscar o 0x90
opcode, mas a avaliação não faz nada essencialmente.