2015-03-28 2 views
5

Я читал, что короткие прыжки должны использоваться, когда относительный прыжок меньше 124 в адресе, а длинные прыжки должны использоваться иначе.Разница между длинным и коротким прыжком (x86)

В чем разница в терминах операций, выполняемых в CPU/исполнении между двумя типами переходов на x86?

+0

Какой набор инструкций вы говорите? –

+1

набор инструкций x86 – nadavge

+0

И вы не можете найти документацию по отдельным инструкциям для этого * чрезвычайно хорошо документированного процессора? – usr2564301

ответ

6

На самом деле существует три типа инструкций JMP; короткий, ближний и дальний (длинный).

Короткое JMP является относительным JMP, на которое вы ссылаетесь. Он кодируется как два байта; фактическое JMP и количество байтов +/- относительно текущего IP.

Близкий прыжок позволяет прыгать в пределах текущего «сегмента» (с использованием условий реального режима) или в пределах выбранной области памяти в селекторе CS.

Длинный или Far JMP дополнительно включает в себя селектор (или сегмент в режиме реального времени)

Вы можете посмотреть тайминги для себя. Самое большое различие, связанное с временем, вызвано разным количеством байтов, которое необходимо прочитать для выполнения JMP.

+0

Что это за селектор и как этот селектор приходит на практике? По моему пониманию в прыжке в длину я просто указываю адрес – nadavge

+0

Адрес состоит из селектора и смещения. Как и в CS: 1234. CS используется для определения селектора из GDT или LDT в защищенном режиме. Обычно это будет что-то довольно маленькое, особенно по сравнению с сегментированной памятью в режиме реального времени, поскольку он просто выбирает запись из таблицы, а не определяет фактический адрес памяти. Адрес памяти определяется в GDT/LDT. –

+0

Я должен добавить, что он действительно выглядит одинаково, независимо от того, находитесь ли вы в реальном режиме или в защищенном режиме ... это фактические значения, которые различаются под капотом, и работа, которая выполняется перед настройкой GDT (что не требуется в реальном режиме, так как вы используете сегментированную память) –

Смежные вопросы