Возможно, вы захотите взглянуть на Руководства разработчика программного обеспечения для архитектуры Intel 64 и IA-32, они являются отличным ресурсом для понимания архитектуры x86 с точки зрения программиста (при условии, что вы уже знакомы со сборкой).
[...] я понимаю, что чем меньше "скачет" jmp :), тем меньше циклов требуется процессору для завершения
Вы должны различать ближний и дальний прыжок. Ближайшие переходы просто добавляют (или вычитают с помощью математики дополнения 2) смещение к указателю инструкции (IP) или перезагружают смещение IP из текущего сегмента кода (CS). Прыжки вблизи могут часто сохранять смещение в самом командном слове или регистре, поэтому вся команда перехода может быть получена за один цикл.
Дальнейшие переходы сохраняют фактический новый адрес указателя инструкции в следующем слове или в ячейке памяти, поэтому для этого требуется дополнительная выборка - и, следовательно, для этого требуется больше времени. На x86 и x86-64 вы не можете далеко перейти к месту, содержащемуся в регистре (это должно быть следующее слово инструкции или место в памяти).
и некоторые процессоры видят 0x90 и просто пропускают его, не оценивая его.
Да, это определение того, что должна делать инструкция NOP
. Процессору все еще нужно получить код операции 0x90
, но оценка по существу ничего не делает.