Привет, как известно, если длина кода между командой условного или безусловного перехода меньше 127 байт, то можно использовать короткие (short) переходы. Так, например для команды безусловного перехода jmp в можно генерировать опкод 0xEB, если нужно прыгнуть куда-то в пределах 127-байт, или опкод 0xE9, если нужно прыгнуть дальше 128 байт. Я всегда считал, что по возможности необходимо использовать короткие переходы, там где это возможно. Более того, почти во всех компиляторах с ассемблера это реализовано "по дефолту", если я пишу jmp bla-bla, то если это возможно генерируется "короткие" переходы. Логика которой я руководствовался - во-первых, сам опкод команды короткого перехода меньше, чем опкод ближнего перехода. Меньше размер опкода - значит их тупо больше набьется в кеш. Больше в кеше - быстрее выполняем чем из памяти. Плюс, наверное проще предсказателю ветвлений работать с маленькими значениями. Но вот совсем недавно услышал такое мнение: "Современные механизмы предсказания ветвлений настолько нивелируют эту разницу, что подобная оптимизация становится сродни ловле блох" И я задумался. Возможно действительно, сейчас уже нет никакой разницы? А возможно, что и никогда не было и это лишь мои предположения не основанные ни на каких фактах. Что по этому поводу думаем многоуважаемый all?
Tronix Такого пользователя на форуме не зарегистрировано, вы зря ждете его ответа. Что касается переходов, то советую почитать оригинальные мануалы (тогда узнаете, что по этому поводу думают непосредственно разработчики), а от себя добавлю, что не вижу разницы в этих командах т.к. адрес все равно надо будет вычислять полный CS:IP(EIP/RIP), чтобы продолжить декодирование потока команд.