2014-06-04 11 views
1

Как регистровые виртуальные машины реализуют регистры.Как регистровые виртуальные машины реализуют регистры

Я читал много онлайн-информации о виртуальных машинах на основе регистров, и я видел, как int r[16]; используется как метод для реализации регистров. Это вызывает несколько вопросов, например, как такая машина способна обрабатывать длинный или плавающий?

Как Parrot, так и Dalvik - это виртуальные машины на основе регистров. Parrot утверждает, что у него есть окно регистрации, которое позволяет неограниченное количество регистров, а dalvik поддерживает до 65 536 регистров. Я хочу знать, как регистры реализованы на этих виртуальных машинах.

Я бы хотел увидеть фактический реализованный код, потому что мне интересно, как они могут хранить значения, которые различаются, и если они созданы на вызов опкода или они всегда есть?

Спасибо

ответ

1

В dalvik каждый регистр имеет ширину 32 бит. Длинное/двойное значение сохраняется с использованием 2 регистров. Фактические значения регистра «сохраняются» в стеке вызовов, но могут временно находиться в реальном физическом реестре.

Предел 64k для числа регистров обусловлен размером поля в файле dex, который содержит количество регистров, которое составляет 16 бит. Практически говоря, методы просто не нуждаются в таком количестве регистров.

Если вы хотите получить более глубокое понимание того, как работает dalvik, лучшим ресурсом является сам источник. Например, здесь находится portable C implementation of the "const" opcode, который хранит непосредственное значение в регистре.