Семантика и система команд
Семантика и система команд
Приведем некоторые примеры групп команд виртуальной Смолток-машины.
1) Проталкивание в стек переменных экземпляра-получателя. Переменные экземпляра фиксируются для каждого экземпляра, и в каждом объекте для них отводится область памяти. Данная команда проталкивает в стек считанные переменные экземпляра, в частности получателя.
Байт-коды 0-15, 128:
0-15 [0000iiii] Помещение в стек переменной-экземпляра получателя с номером #iiii
128 [10000000] [jjkkkkkk] Помещение в стек (переменной экземпляра получателя, временной переменной, литерала, глобальной переменной, указываемой литералом) [jj] с номером #kkkkkk.
2) Проталкивание в стек временной переменной. Временные переменные создаются в момент вызова метода.
Байт-коды 16-31, 128:
16-31 [0001iiii] Помещение в стек временной переменной с номером #iiii
3) Проталкивание символов в стек. Символ - это селектор сообщения или константа с объектным указателем.
Байт-коды 32-63, 128
32-63 [001iiiii] Помещение в стек литерала с номером #iiiii
4) Вызов метода с использованием селектора сообщения, находящегося в области литералов. Команда производит поиск селектора сообщения, начиная со словаря класса получателя. Если поиск успешен, то производится вызов соответствующего метода.
Байт-коды 131, 132, 134, 208-255
5) Помещение в стек активного контекста. Команда помещает в поля текущего контекста значения регистров и затем помещает в стек указатель этого контекста.
Байт-код 137.
6) Команды перехода и условного перехода.
Байт-коды 144-175
144-151 [10010iii] Переход по адресу iii+1
152-159 [10011iii] Выталкивание из стека, переход по адресу iii+1 при значении false вытолкнутой вершины
160-167 [10100iii] [jjjjjjjj] Переход по адресу (iii-4)*256+jjjjjjjj
7) Посылка заявки на вычисление. Команда реализует арифметические операции "+" и "-". Если получатель не является целым числом, то выполняются действия, аналогичные обычной посылке заявки.
Байт-коды 192-207
192-207 [1100iiii] Посылка специальной заявки #iiii