Forth http://fforum.winglion.ru/ |
|
Системные регистры форт-процессора http://fforum.winglion.ru/viewtopic.php?f=3&t=2783 |
Страница 1 из 1 |
Автор: | Hishnik [ Пт дек 16, 2011 01:25 ] |
Заголовок сообщения: | Системные регистры форт-процессора |
В раздумьях над тем, как бы выкроить пару опкодов для компактной системы команд, пришла в голову мысль о дополнительном адресном пространстве для системных регистров форт-процессора. С одной стороны, стековая машина сама по себе не подразумевает каких-то системных регистров. С другой, при технической реализации они так или иначе образуются. Приведенные ниже слова могут быть представлены в виде связки N SYSTEM@, где N - номер регистра, а SYSTEM@ (название условное) - слово, кладущее на стек содержимое соответствующего аппаратного регистра, отвечающего за данное состояние. PC DEPTH RDEPTH R@ I J Пара >R R> может быть заменена на >R RDROP, но работу со стеком возвратов не удается свести к одной команде с помощью такого приема. Выход, впрочем есть, но он немного "хакерский" - чтение регистра по R@ одновременно снимает число со стека возвратов. Вернуть его туда можно через DUP >R. |
Автор: | WingLion [ Пт дек 16, 2011 04:20 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
Кстати, еще один моментик, который может помочь сократить набор. Пусть "системных регистров" у нас 8 штук, не важно, как они называются, просто 8 регистров, которые надо уметь адресовать, читать и писать. Если система команд 4-хбитная (к примеру), то любое обращение к такому регистру требует два кода - код команды и адрес. 4-хбитный адрес позволяет задавать одновременно и один из 8 регистров и операцию с ним (чтение/запись). В таком случае, на системные регистры нужен всего один опкод-префикс - SYSTEM*. И к нему опкод-адрес 0..7 - чтение одного из 8 регистров, 8..15 запись в один из регистров. |
Автор: | Hishnik [ Пт дек 16, 2011 15:10 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
Тогда получается, что после префикса нужна команда, у которой будет неодинаковое воздействие на стек. Потому что в одном случае она должна вместо номера регистра положить его содержимое, а в другом - снять два числа. |
Автор: | chess [ Пт дек 16, 2011 15:56 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
Хищник писал(а): Тогда получается, что после префикса нужна команда, у которой будет неодинаковое воздействие на стек. Потому что в одном случае она должна вместо номера регистра положить его содержимое, а в другом - снять два числа. Ну правильно в обоих случаях на стеке лежит сверху номер регистра( N ), который берется в качестве префикса, но не весь, а только три младших разряда, а старший разряд надо использовать в качестве недостающего для формирования опкодов 2-х команд SYSTEM@ и SYSTEM! для положить на стек из сист рег. вместо N или взять два значения со стека для положить в сист. регистр. В один такт при этом не влезть. |
Автор: | WingLion [ Пт дек 16, 2011 18:33 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
Хищник писал(а): Тогда получается, что после префикса нужна команда, у которой будет неодинаковое воздействие на стек. Потому что в одном случае она должна вместо номера регистра положить его содержимое, а в другом - снять два числа. В одном случае, она должна положить на стек содержимое регистра, в другом отправить одно данное со стека в регистр. И ничего лишнего... номер регистра в опкоде зашит и его "адрес" незачем на стек записывать. По тактам - это ровнехонько один такт в любом случае. |
Автор: | WingLion [ Пт дек 16, 2011 18:43 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
chess писал(а): в обоих случаях на стеке лежит сверху номер регистра( N ), Нет-нет-нет... номер регистра берется из командного потока, и на стек его незачем класть - лишняя потеря времени... |
Автор: | dynamic-wind [ Сб дек 17, 2011 17:05 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
Отобразим регистры на память, сэкономим опкод |
Автор: | Hishnik [ Сб дек 17, 2011 17:18 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
dynamic-wind писал(а): Отобразим регистры на память, сэкономим опкод Мультиплексор сложнее получается, надо еще диапазон адресов проверять. Сейчас критичная по времени цепь проходит как раз от стека к стеку - т.е. через АЛУ, декодер команд, мультиплексор и т.д. Но это тоже вариант. Я вообще сейчас объединил адресные пространства памяти и IO. |
Автор: | WingLion [ Сб дек 17, 2011 19:15 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
dynamic-wind писал(а): Отобразим регистры на память, сэкономим опкод "Экономика должна быть экономной" (с)... Если работа с регистрами не будет отличаться от работы с памятью, зачем такие регистры? Проще сразу с памятью работать. |
Автор: | WingLion [ Сб дек 17, 2011 19:16 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
Хищник писал(а): Но это тоже вариант. Вряд ли это вариант. Ведь регистры еще в процессе работы команд модифицируются, а значит, это дополнительные два цикла с памятью в нагрузку а на команду... Разве что изначально полагать, что командный цикл - это 3-4 обращения к памяти... |
Автор: | Hishnik [ Сб дек 17, 2011 19:25 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
WingLion писал(а): Вряд ли это вариант. Ведь регистры еще в процессе работы команд модифицируются, а значит, это дополнительные два цикла с памятью в нагрузку а на команду... Разве что изначально полагать, что командный цикл - это 3-4 обращения к памяти... Нет, не реализовывать их в памяти, а просто отобразить на адресное пространство. Тогда при выполнении @ мультиплексор подсунет вместо выхода памяти выход регистра. |
Автор: | WingLion [ Сб дек 17, 2011 19:33 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
Хищник писал(а): Нет, не реализовывать их в памяти, а просто отобразить на адресное пространство. Тогда при выполнении @ мультиплексор подсунет вместо выхода памяти выход регистра. да, но для этого @ надо будет на стек целый адрес положить, а это некузяво... Лучше в команде адресовать нужный регистр, дополнительным полем / параметром / префиксным кодом и т.п. Он ведь всяко короче полного адреса. А тогда в память отражать - лишнее. |
Автор: | Hishnik [ Сб дек 17, 2011 19:45 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
А у меня сейчас 0-31 кладутся на стек одним тактом. |
Автор: | WingLion [ Сб дек 17, 2011 20:08 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
Хищник писал(а): А у меня сейчас 0-31 кладутся на стек одним тактом. одной командой? Это формально то же самое, что команда с префиксом... только префикс получается - короткий литерал |
Автор: | Hishnik [ Сб дек 17, 2011 21:07 ] |
Заголовок сообщения: | Re: Системные регистры форт-процессора |
WingLion писал(а): одной командой? Это формально то же самое, что команда с префиксом... только префикс получается - короткий литерал Именно. А регистры-то ведь такие, что особо часто их читать и не надо. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |