вообще-то были и short jmp (2 байта, переход на -128/+127 байт), и был long jmp (4 байта). short jmp был предпочтителен поскольку 8086 выбирал два байта из очереди за такт (8088 один байт). Что касается размерности jmp, то ещё дремучий tasm сам мог посмотреть кто куда переходит и выбрать соотв. размер. Правда если переход был вперёд, то он выделял 4 байта и если нужен short jmp, то остальное забивал nop-ами (ограничение однопроходного компилятора).goto вообще незаменим в языках в которых отсутсвует поддержка конструкций аля try/finally (например в C), для обработки ошибок и организации единой точки выхода и гарантированного освобождения ресурсов.
> Отсюда и растут ноги о том что goto сильно запутывает код.
Вы вообще goto пользовали в жизни? Проблема с goto в том что в неумелых руках он действительно приводит к запутыванию кода, но не из-за какого-то мифического jump-а, а потому что он не поддаётся заключению в какие-то рамки, что усложняет восприятие. Все циклические конструкции (for, while, until) имеют определённые ограничения, одну точку входа и одну точку выхода, что позволяет делать код линейным. Goto же нарушает эту линейность в большинстве случаев, за что его и не любят.
> Сейчас уже коротких переходов jmp в природе нет
Та ну, всё есть. Зачем выбрасывать такой короткий jmp который зачастую будет происходить в рамках соседних адресов и с большей долей вероятности попадёт в кеш.