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

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

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

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

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

Спасибо

1 ответ

Решение

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

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

Если вы хотите глубже понять, как работает dalvik, лучшим ресурсом является сам источник. Например, здесь представлена переносимая C-реализация "const" кода операции, которая сохраняет непосредственное значение в регистр.

Другие вопросы по тегам