Я пытаюсь понять разницу между командами дальнего JMP и дальнего CALL для процессора x86-64.Если я правильно следую документации Intel для 64-битного длинного режима:
A) Far CALL (код операции 48, FF, /3
) или в asm:
call tbyte ptr [rcx]
может использоваться для вызова «сегмента кода» или «шлюза вызова» на один и тот же или другой сегмент кода в зависимости от GDT или LDT используемого селектора сегмента.Где:
«Сегмент кода» может указывать только один и тот же вызов уровня привилегий (CPL).Это может быть вызов 32-битного кода режима совместимости или того же самого длинного 64-битного режима (в зависимости от бита L).
«Ворота вызова» могут указывать то же самоевызов уровня привилегий (CPL) или вызов между привилегиями.Но он не может перейти в 32-битный режим совместимости и только в тот же самый 64-битный режим.
B) Дальний JMP (код операции 48, FF, /5
)) или в asm:
jmp tbyte ptr [rcx]
Я не могу найти много документации для 64-битного длинного режима.Это почти те же характеристики, что и для дальнего CALL?
Кажется, я не могу найти какую-либо ссылку на межпользовательские JMP "call gate" в другой CPL или на возможность перехода в 32-битный режим совместимости из длинного 64-битного режима.
Может кто-нибудь уточнить это.