Re: создание MIDletPascal compiler'a
Вопщем ассемблер там простой... Работает со стеком,
все мнемокоды вида MNEMO OP1 OP2 - где MNEMO - мнемокод а OP1 OP2 первый и второй оператор (иногда их 10-14)
OP1 OP2 - байткод который идет сразу за мнемокодом комманды он может быть адресом переменной в константном пуле или адресом перехода или переменной типа WORD
Стек заполняецо сверху в низ и при исполнении команды результат заменяет операнды в стеке на себя
Пример
15+25
bipush 15 - грузим число 15 в стек
bipush 25 - грузим число 25 в стек
iadd - складываем числа в стеке и результат помещаем в верх стека тоесть щас у нас в верху стека число 40 Тоесть все настолько просто, что осталось лишь сказать спасибо ребятам с Java Sun!
class calc{
public static void main(String [] args){
int a,i;
i=1240;
a=i+20;
}
}
Смотрим на код. У нас две переменные, одной из них присваевается ответ. Смотрим код
0000h 11 04 D8 sipush 04D8h
0003h 3D istore_2
0004h 1C iload_2
0005h 10 14 bipush 14h
0007h 60 iadd
0008h 3C istore_1
0009h B1 return
Начало кода ПОЛЮБАС оператор, значение 11 – это
sipush–
Загрузка в стек двухбайтового целого со знаком ,оператор двух байтовый значит следущие два байта – значение переменной 04D8h или 1240
Далее 3D
istore_<n>
Сохранение целого в локальной переменной
Тоесть грузим 1024 в i
Ну и тд. Тп.
Компиляцию я показывал сверху, проводица она рекурсией причом очень простенькой
Последний раз редактировалось satan, 01.10.2008 в 00:00.
|