Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
WingLion писал(а): однако, более точно, если они НЕ ПОСЛЕДНИЕ в группе. Конечно! Я рассматривал упаковку в байты...
[quote="WingLion"]однако, более точно, если они [b]НЕ ПОСЛЕДНИЕ[/b] в группе.[/quote]Конечно! Я рассматривал упаковку в [b]байты[/b]... ;)
|
|
|
|
Добавлено: Пн дек 21, 2009 01:41 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
in4 писал(а): Только если они "первые" в группе Wink А так - обычные Wink
однако, более точно, если они НЕ ПОСЛЕДНИЕ в группе.
[quote="in4"]Только если они "первые" в группе Wink А так - обычные Wink[/quote]
однако, более точно, если они [b]НЕ ПОСЛЕДНИЕ[/b] в группе.
|
|
|
|
Добавлено: Пн дек 21, 2009 01:38 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
WingLion писал(а): Если говорить точнее, в таком случае получается, что IF, JMP и CALL - попросту префиксные команды! Только если они "первые" в группе А так - обычные WingLion писал(а): RET:3 - CALL #NN = короткий CALL по индексу А для этого лучше выделить несколько кодов, при этом одно из битовых полей команды будет индексом #NN
[quote="WingLion"]Если говорить точнее, в таком случае получается, что IF, JMP и CALL - попросту префиксные команды![/quote]Только если они "первые" в группе ;) А так - обычные ;)
[quote="WingLion"][b]RET:3[/b] - [b]CALL #NN[/b] = короткий [b]CALL[/b] по индексу[/quote]А для этого лучше выделить несколько кодов, при этом одно из битовых полей команды будет индексом [b]#NN[/b]
|
|
|
|
Добавлено: Пн дек 21, 2009 01:35 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
А еще, можно сделать прямое кодирование для исполнения подобной префиксной команды.
Просто назначить, что RET:XXX = последовательность (подпрограмма) от 4-х до 8-и ("простых" 4-хбитных) команд (заранее записанная в некий 32-разрядный регистр)
А еще, можно сделать прямое кодирование для исполнения подобной префиксной команды.
Просто назначить, что RET:XXX = последовательность (подпрограмма) от 4-х до 8-и ("простых" 4-хбитных) команд (заранее записанная в некий 32-разрядный регистр)
|
|
|
|
Добавлено: Пн дек 21, 2009 01:33 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
in4 писал(а): Получается, что префиксы можно не выделять!
Если говорить точнее, в таком случае получается, что IF, JMP и CALL - попросту префиксные команды!
п.с. a вот RET:XXX - действительно интересно
Можно даже сразу объединить CALL и RET пoд один код команды
RET:0 - это RET,
RET:1 - CALL
RET:2 - RET-CALL = NEXT
RET:3 - CALL #NN = короткий CALL по индексу (а таблица индексов (16 шт) прямо в памяти с адреса 0x00000000)
в этот же список можно и JMP с IF вставить.
RET:4 - IF RET:5 - JMP = LIT R> RET RET:6 - EXECUTE = R> RET
Получается совсем здорово - высвобождается целых два кода!
Короче, отличная мысля для 4-хбитника!
[quote="in4"]Получается, что префиксы можно не выделять![/quote]
Если говорить точнее, в таком случае получается, что [b]IF[/b], [b]JMP[/b] и [b]CALL[/b] - попросту префиксные команды!
п.с. a вот [b]RET:XXX[/b] - действительно интересно
Можно даже сразу объединить CALL и RET пoд один код команды
[b]RET:0[/b] - это [b]RET[/b],
[b]RET:1[/b] - [b]CALL[/b]
[b]RET:2[/b] - [b]RET-CALL = NEXT[/b]
[b]RET:3[/b] - [b]CALL #NN[/b] = короткий CALL по индексу (а таблица индексов (16 шт) прямо в памяти с адреса 0x00000000)
в этот же список можно и JMP с IF вставить.
[b]RET:4 - IF RET:5 - JMP = LIT R> RET RET:6 - EXECUTE = R> RET[/b]
Получается совсем здорово - высвобождается целых два кода! ;)
Короче, отличная мысля для 4-хбитника!
|
|
|
|
Добавлено: Пн дек 21, 2009 01:19 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
В варианте с использованием последовательностей команд как префикса для одной такой команды:
16 + 15 =31 ,
для 2х:
16 + 2*15 =46
В варианте с использованием последовательностей команд как префикса для одной такой команды:
16 + 15 =31 ,
для 2х:
16 + 2*15 =46 ;)
|
|
|
|
Добавлено: Пн дек 21, 2009 01:17 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
in4 писал(а): Таким образом, байт с командами RET : XXX можно рассматривать как команду с префиксом! И добавить еще 15(!) других команд!
не катит. Это будет именно префикс, я говорил про совсем другое.
[quote="in4"]Таким образом, байт с командами RET : XXX можно рассматривать как команду с префиксом! И добавить еще 15(!) других команд! [/quote]
не катит. Это будет именно префикс, я говорил про совсем другое.
|
|
|
|
Добавлено: Пн дек 21, 2009 01:16 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
вопрос писал(а): как получилась цифра 35?
приблизительное количество форт-примитивов для комфортной работы.
в принципе может быть и больше, только тогда выше шанс промаха (удлиннения команды за счет лишнего префикса)
[quote="вопрос"]как получилась цифра 35?[/quote]
приблизительное количество форт-примитивов для комфортной работы.
в принципе может быть и больше, только тогда выше шанс промаха (удлиннения команды за счет лишнего префикса)
|
|
|
|
Добавлено: Пн дек 21, 2009 01:13 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
как получилась цифра 35?
как получилась цифра 35?
|
|
|
|
Добавлено: Пн дек 21, 2009 01:07 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
mOleg писал(а): как можно упихать в 4 бита 35 команд без потери плотности кода и скорости исполнения. Там в общем случае даже больше возможностей получается - суперинструкции даже можно сделать. Но без нормального средства анализа я в эту область не полезу!
А вот более простой вариант можно реализовать!
Идея в том, чтобы использовать некоторые последовательности команд, которые не имеют смысла для 4х битного кода, упакованного в байты.
Например, если первая команда (в смысле исполнения, а не кодирования в байте!) RET или JMP , то следующая команда никогда не будет выполена!
(Вариант, когда выполнение переходов откладывается до окончания команды, возможно, будем рассматривать позже и обсуждать в другой ветке. )
Таким образом, байт с командами RET : XXX можно рассматривать как команду с префиксом! И добавить еще 15(!) других команд! (Считая, что RET : NOP - это одна команда со смыслом RET ).
Аналогично для JMP и CALL . Если в основном наборе есть IF , то и он тоже может быть таким же!
Получается, что отдельные коды для префиксов можно и не выделять!
Такое использование "кодового пространства" будет занимать меньше места в коде, чем даже макроподстановка невошедших в примитивы слов с использованем последовательностей реализованных примитивов.
[quote="mOleg"]как можно упихать в 4 бита 35 команд без потери плотности кода и скорости исполнения.[/quote]Там в общем случае даже больше возможностей получается - суперинструкции даже можно сделать. Но без нормального средства анализа я в эту область не полезу! ;)
А вот более простой вариант можно реализовать!
Идея в том, чтобы использовать некоторые последовательности команд, которые не имеют смысла для 4х битного кода, упакованного в байты.
Например, если первая команда (в смысле исполнения, а не кодирования в байте!) [b]RET[/b] или [b]JMP[/b] , то следующая команда никогда не будет выполена! :)
(Вариант, когда выполнение переходов откладывается до окончания команды, возможно, будем рассматривать позже и обсуждать в другой ветке. ;) )
Таким образом, байт с командами [b]RET : XXX[/b] можно рассматривать как команду с префиксом! И добавить еще 15(!) других команд! ;) (Считая, что [b]RET : NOP[/b] - это одна команда со смыслом [b]RET[/b] ).
Аналогично для [b]JMP[/b] и [b]CALL[/b] . Если в основном наборе есть [b]IF[/b] , то и он тоже может быть таким же!
Получается, что отдельные коды для префиксов можно и не выделять! :)
Такое использование "кодового пространства" будет занимать меньше места в коде, чем даже макроподстановка невошедших в примитивы слов с использованем последовательностей реализованных примитивов.
|
|
|
|
Добавлено: Пн дек 21, 2009 00:59 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
конкретную схему можно как-то нарисовать?
конкретную схему можно как-то нарисовать?
|
|
|
|
Добавлено: Вс дек 20, 2009 22:58 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
dynamic-wind писал(а): и что некоторые "маловероятные" команды нельзя закодировать после данной.
можно, но через специальный нейтральный префикс (nop).
[quote="dynamic-wind"]и что некоторые "маловероятные" команды нельзя закодировать после данной.[/quote]
можно, но через специальный нейтральный префикс (nop).
|
|
|
|
Добавлено: Вс дек 20, 2009 22:43 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Вообще-то да, если вместо 4-входовой ПЛМ поставить 8-входовую, разницы в быстродействии практически никакой.
А БОЛЬШИМ будет кодогенератор, которому надо знать, что каждая команда имеет опкод, зависящий от предыдущего, и что некоторые "маловероятные" команды нельзя закодировать после данной.
Вообще-то да, если вместо 4-входовой ПЛМ поставить 8-входовую, разницы в быстродействии практически никакой.
А БОЛЬШИМ будет кодогенератор, которому надо знать, что каждая команда имеет опкод, зависящий от предыдущего, и что некоторые "маловероятные" команды нельзя закодировать после данной.
|
|
|
|
Добавлено: Вс дек 20, 2009 22:40 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
dynamic-wind писал(а): Скорость исполнения автоматически снизится из-за сложного декодера
Я не думаю, что он будет таким уж сложным и медленным,
он будет скорее БОЛЬШИМ,
что не очень приятно при реализации в ПЛИСе.
[quote="dynamic-wind"]Скорость исполнения автоматически снизится из-за сложного декодера[/quote]
Я не думаю, что он будет таким уж сложным и медленным,
он будет скорее БОЛЬШИМ,
что не очень приятно при реализации в ПЛИСе.
|
|
|
|
Добавлено: Вс дек 20, 2009 22:17 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Скорость исполнения автоматически снизится из-за сложного декодера
Скорость исполнения автоматически снизится из-за сложного декодера :evil:
|
|
|
|
Добавлено: Вс дек 20, 2009 22:10 |
|
|
|
|