Компиляция IJVM
А теперь посмотрим, какое отношение язык Java имеет к IJVM. В листинге 4.1 представлен небольшой фрагмент программы на языке Java. Компилятор Java должен был бы переделать эту программу в программу на языке ассемблера IJVM, приведенную в листинге 4.2. Цифры с 1 по 15 в левой части листинга, а также комментарии после символов двойной косой черты (//) не являются частью самой программы. Они даны для наглядности и просто облегчают понимание. Затем ассемблер Java транслировал бы ее в программу в двоичном коде. Эта программа представлена в листинге 4.3. (В действительности результатом работы компилятора Java сразу является двоичный код.) В данном примере i — локальная переменная 1, j — локальная переменная 2, а к — локальная переменная 3.

Скомпилированная программа проста. Сначала j и к помещаются в стек, складываются, а результат сохраняется в i. Затем i и константа 3 помещаются в стек и сравниваются. Если они равны, то совершается условный переход к L1, где к получает значение 0. Если они не равны, то выполняется часть программы после команды IF_ICMPEQ. После этого осуществляется переход к L2, где объединяются части else и then.
Читать дальше »

