Курсовая работа: Ассемблер для платформы Java
o загрузка элемента массива на стек: baload (тип byte), caload (тип char), saload (тип short), iaload , laload , faload , daload , aaload ;
o сохранение значения с вершины стека в элемент массива: bastore , castore , sastore , iastore , lastore , fastore , dastore , aastore ;
o получение размера массива: arraylength ;
o проверка типов: instanceof (возвращает на вершине стека логическое значение) и checkcast (генерирует исключение в случае несоответствия типа ссылки на вершине стека требуемому типу);
· команды манипуляций со стеком операндов:
o pop - удаление верхнего элемент стека;
o pop 2 - удаление двух верхних элемента стека;
o dup , dup 2 , dup _ x 1 , dup 2_ x 1 , dup _ x 2 , dup 2_ x 2 - дублирование элементов на вершине стека;
o swap - перемена местами двух верхних элементов стека;
· команды безусловной передачи управления:
o jsr , jsr _ w , ret - вызов подпрограмм и возврат из них. Используются при компиляции блока finally;
o goto , goto _ w - безусловный переход;
· команды условного перехода:ifeq , iflt , ifle , ifne , ifgt , ifge , ifnull , ifnonnull , if _ icmpeq , if _ icmpne , if _ icmplt , if _ icmpgt , if _ icmple , if _ icmpge , if _ acmpeq , if _ acmpne ;
· команды вызова методов:
o invokevirtual - обычный вызов метода экземпляра с использованием механизма позднего связывания;
o invokestatic - вызов статического метода;
o invokeinterface - вызов метода интерфейса у объекта, реализующего данный интерфейс;
o invokespecial - вызов метода экземпляра без использования механизма позднего связывания. Используется для вызова конструкторов, методов суперкласса и private-методов;
· команды возврата из метода:
o return - возврат из метода, возвращающего void;
o ireturn , lreturn , freturn , dreturn , areturn - возврат значения соответствующего типа;
· команда генерации исключений: athrow ;
· команды синхронизации (механизм блокировок):
o monitorenter - установить блокировку (войти в критическую секцию);
o monitorexit - освободить блокировку (выйти из критической секции).
Синтаксис языка ассемблера для платформы Java (языка JASM).
Файл исходного текста на языке ассемблера для платформы Java (языке JASM) представляет собой текстовый файл, строки которого разделены последовательностью символов с кодами 13 и 10. Имя файла исходного текста и его расширение могут быть любыми, однако рекомендуется, чтобы имя совпадало с именем описанного в файле класса, а расширением было .jasm либо .jsm. Файл исходного текста состоит из предложений, разделенных точкой с запятой. Последнее предложение может не иметь в конце точки с запятой. Комментарии отделяются знаком процента и распространяются до конца строки. Точки с запятой и знаки процента внутри строковых констант, ограниченных двойными кавычками, не имеют своего специального значения. Две идущие подряд двойные кавычки внутри строковой константы интерпретируются как одна двойная кавычка в строке. Любые последовательности пробельных символов (пробелов, табуляций, переводов строки и т. д.) интерпретируются как один пробел, если с обеих сторон от них находятся символы следующих видов: буквы латинского алфавита, цифры, знак подчеркивания, либо, в противном случае, игнорируются. Исключение составляют пробельные символы в строковых константах и комментариях. Верхний и нижний регистр букв в идентификаторах, именах команд и других лексемах различается.
Каждый файл исходного текста компилируется в один файл класса. Файл исходного текста должен иметь следующую структуру:
[модификаторы_доступа] {class|interface} <имя_класса>;
[extends <базовый класс>;]