Pull to refresh

Comments 3

Про вращающиеся окна не знал, выглядит круто. Про стеки понял только что два крайних — это
в одном адреса функций а в другом адреса возвратов обратно из функций, но каким образом это вообще все разделяется и что вообще это за адреса (не просто ссылка на место в памяти откуда данные начинаются как я понимаю) до сих пор понимаю с трудом.


И да, тема глобальных регистров не раскрыта.


Вообще эльбрус напоминает такую "java-машину" только для языка Си и его производных, по крайней мере в части регистров, видимости и вот этому всему я узнаю старый добрый подход С, С++,JS

Про стеки понял только что два крайних — это
в одном адреса функций а в другом адреса возвратов обратно из функций,

Не совсем, в одном стеке лежат адреса возвратов, а в другом — оперативные регистры (те, которые из вращаемого окна). Это нужно потому как региcтровый файл имеет весьма ограниченный размер, и в случае его переполнения нужно сбросить его содержимое в память — на стек. То же самое касается выхода из процедуры — может понадобится загрузить регистры обратно со стека.
но каким образом это вообще все разделяется и что вообще это за адреса,

Про адреса — это Instruction Pointer, он сохраняется в регистрах CR0/CR1. По сути это самый обычный адрес возврата, как, например, Link Register в ARM.

И да, тема глобальных регистров не раскрыта.

Ага, но мы их пока и не используем :) Так что решили про это не писать. Да и показались они нам более классическими нежели вращаемые, т.к. к ним доступ кажется осуществляется по прямой адресации g0, g1,… Т.е. это по сути регистры общего назначения, если опять проводить аналогию с ARM.
Регистровые окна были еще на SUN SPARC. Интересная была система, но после покупки Ораклом архтектура загнулась. Были даже открытые реализации.
Говорят, когда-то Эльбрус поддерживал бинарную трансляцию со SPARC, но за ненадомностью ее выпилили.
Sign up to leave a comment.