"nop; jmp curto" vs. "jmp curto; nop"

"nop; jmp curto" vs. "jmp curto; nop"

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; nopcodificaçã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 0x90e 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 NOPinstrução deve fazer. A CPU ainda precisa buscar o 0x90opcode, mas a avaliação não faz nada essencialmente.

informação relacionada