Согласен что редко ) Но имеет право быть. Просто попробовать писать в таком стиле и применение найдется.
Заманчиво иметь неограниченное количество регистров ))
К примеру:
Имеем N экземпляров объектов которые нужно изменять на протяжении времени
Основной цикл
{
set1 ; состояние 1
; какие то изменения
...
setN ; состояние N
; аналогично
}
Последний раз редактировалось jim; 07.09.2025 в 17:55.
а о чём же? вот ЗАЧЕМ еще такое может понадобиться, чего нельзя проще сделать другими способами?
с чего меньше? сохранение контекста почти всегда мб нужно только в обработчике прерывания, который обычно всего один
с чего чище? лишний call (+ это кстати лишнее пространство на стеке)
полная бессмыслица, начиная с "расширения набора регистров" программным способом
смысл регистра как раз в том, что это "сверхоперативная", то есть самая БЫСТРАЯ область памяти
а тут медленное сохранение/восстановление всех подряд да еще ix пожертвовать предлагается
то есть выйдет сокращение набора фактически
без многозадачности (реентрабельности) всегда проще сразу с переменными работать, а не со стеком
да еще значительно эффективней - только с теми, которые действительно применяются
Прихожу без разрешения, сею смерть и разрушение...
Заманчиво, но нереально - свапинг их не добавляет а всего лишь переключает, причем медленно. Увы... (
Ну х.з. состояние такого 'обьекта' должно уложиться в эти несчастные 7 регистров, иначе ещё и стек надо для каждого обьекта свой. Тогда и правда либо многозадачность вертеть, либо как сказал Lethargeek сохраняться в переменных.
В принципе, возможность имеет быть, а целесообразность может подтвердить или опровергнуть только практика.
p.s. Я таки оказывается еще ошибся со смещениями - совсем голова не варит, вай-вай-вай![]()
jim(07.09.2025)
Например сместить уровень абстракций от регистров к окнам контекстов функций.
Это автоматически не означает многозадачность или параллельную обработку. Это гибкость кода. Для кого то возможно это великий грех.
Не согласен что только в обработчике. В кооперативной многозадачности например.
И я не отказываюсь от стека он доступен всем сетам как родной. Можно PUSH в одном сете и POP в другом или том же.
Смысл регистра в том что это быстрая ячейка памяти. Абстракция расширения медленная при переключении, дальше это те же самые быстрые регистры.
Сохранение загрузка переменных это то же нетривиальная задача. Ты не работаешь с переменными напрямую в памяти, для начала они грузятся в регистры. Мой вариант с sp сокращает время операций и при этом это не полноценный стек push/pop (а сохранил, загрузил другой набор, поработал, вернулся к первому или можно вообще забыть о нем)
- - - Добавлено - - -
Ну тут свобода, никто не мешает хранить в регистрах сета указатель на структуры данных и работать с ними как с обычными переменными.
Последний раз редактировалось jim; 07.09.2025 в 22:33.
Like a bright light on the ХORIZON
Shining so bright, he'll get you flying
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
переменные абстрактнее и удобнее
и зачем нужны "контекстов" без реентрабельности?
что такое "гибкость кода"? в чём измеряется?
...которая на спеке реализуется, ВНЕЗАПНО, через обработчик
в чём новизна-то? в лишних call в теле обработчика?
то есть в сумме - медленное решение
ШТА
да, и что? притом с теми лишь, которые мне нужны
для начала - добавляет лишние операции (ибо функция необязательно использует все регистры) + замедляет их еще манипуляциями с sp
то есть медленно, а результаты всё равно потом распихивать в переменные
- - - Добавлено - - -
поздно![]()
Прихожу без разрешения, сею смерть и разрушение...
Swapset - это высокоуровневый подход облегчающий работу с контекстными окнами (отдельными программами), его целью не является оптимизация по скорости.
Для переключения контекстов программ абсолютно не нужен планировщик или организация прерываний с TCB, и даже не задействован стек.
Это именно свобода выбора между ролями процессора в любой момент времени. Свобода забыть и вспомнить о главном цикле, или временно заняться другой задачей. Можно вообще не писать подпрограммы (call/ret) так как каждый сет регистров это новое пространство (как отдельный код запущенный в своем окне).
Здесь нет параллельных вычислений и фонового выполнения как в вытесняющей многозадачности.
Есть возможность запуска любой задачи, независимо от места программы, и возврата при необходимости.
А основная фишка, то, что в любой контекст можно вернуться простым переключением.
Последний раз редактировалось jim; 11.09.2025 в 22:44.
Like a bright light on the ХORIZON
Shining so bright, he'll get you flying
НИЗКОуровневый - ибо ну куда уж ниже простого асма-то
а вот чуть ВЫШЕ уровнем - будет макрос (это намёк))
переменные - также более высокий уровень, чем регистры
ну и зачем нужно "переключение контекстов программ" без "организации прерываний"?
если (под)программа не прерывалась, то она работу закончила и результаты из регистров сохранены
словоблудие бессмысленное какое-топриведи КОНКРЕТНЫЕ сценарии применения!
вот чисто технически для начала - каким образом ты без прерываний (!) собрался запускать (а также возвращаться) с любого (!) места?![]()
Прихожу без разрешения, сею смерть и разрушение...
null_device(16.09.2025)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)