Показать сообщение отдельно
Старый 30.09.2008, 23:04   #63
satan
Нуждающийся
 
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений
(для 28 пользователей)
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.
(Offline)
 
Ответить с цитированием