shl32_rr regl, reg2
shrl6_ri гедб, 13
45
shr32_rri reg3, reg5, 34
rol64_ri reg7, 21
ror8_mr [OOOOh], reg5
Таким образом, число команд сдвигов превышает 1000.
Класс операций для работы со стеком
Стек - это способ хранения данных. В языке виртуальных машин можно выделить 2 группы команд работы со стеком: команды, которые кладут новую порцию данных на верхушку стека (STORE), и команды которые получают данные с вершины стека (LOAD). Использование стека позволяет сохранять данные в памяти, не заботясь об их абсолютных адресах.
Пример вызова этих функций: команда вызова функции CALL32 func записывает в стек адрес следующей за ней команды, а команда возврата RET достает его из стека.
Формально стек ограничен лишь протяженностью адресного пространства. Направление роста стека: от больших адресов — к меньшим. Еще говорят, что стек растет снизу вверх.
Если генерируемая виртуальная машина принадлежит к классу регистровых виртуальных машин, то класс операций работы со стеком аналогичен языку ассемблер: виртуальные машины могут класть в стек или брать из стека как регистры, так и переменные.
Если же генерируемая виртуальная машина принадлежит классу стековых виртуальных машин, то класс операций работы со стеком немного иной. Для стековых виртуальных машин не существует отдельных операций, которые кладут в стек значения переменных или констант, так как они сами по себе являются командами вставки в стек, как описано в п.3.4.1.
Для регистровой машины эти инструкции содержат два операнда: первый - регистр, в который загружается в стек (которое загружается из стека), второй - значение сдвига. Для создания множества инструкций работы со стеком варьируются следующие параметры операндов:
размер регистра (первый операнд) - он может быть одним из следующих: 8,16,32, 64, 80 бит.
величина переменной, хранящей смещение (второй операнд) — он может быть 8,16 или 32 бит.
Примеры инструкций работы со стеком:
load80_16 гедЗ, 4
loadl6_8 regl, 8
Do'stlaringiz bilan baham: |