Sergio 2.1
Оракул
(67303)
1 год назад
В Java байткоде инструкция goto имеет два байта операнда, которые используются для указания относительного смещения от текущей инструкции до целевой инструкции. Эти два байта интерпретируются как знаковое 16-битное целое число в формате big-endian. В вашем случае, два байта операнда FF F8 интерпретируются как знаковое 16-битное целое число -8, что означает, что инструкция goto переходит на 8 байт назад от текущей позиции. Это соответствует началу цикла while, который находится в 8 байтах перед инструкцией goto. Таким образом, FF F8 является правильным относительным смещением для перехода к началу цикла while. Относительное смещение используется, чтобы обеспечить корректность кода даже при изменении размера метода или перемещении инструкций внутри метода. Оно не зависит от абсолютного расположения инструкций внутри метода и всегда указывает на правильную целевую инструкцию. Я надеюсь, что это помогло вам понять, почему в байткоде используется FF F8, а не 00 00.