Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
Говорить, что вычитания ненадо и заменять его двумя командами - инверсия второго аргумента ( на самом деле OP PON, т.к. OP NOP - это "нет операции" : ) и сложение ADD - это подход математика из научного анекдота https://kot.sh/statya/4441/nauchnyy-anekdotУ меня вполне прагматичный инженерный подход - решить задачу самым оптимальным образом P.S. Описание исправил - благодарю за внимательность! P.P.S. Cделал картинки в линках на предыдущей страничке локальными (а также уменьшил их размер)
|
02 May 2020 20:05 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
Дмитрий, принимай патч для https://github.com/ssloy/triador/ Триадорная команда OP корнями уходит к 3niti alpha, где OPA NOP означало "нет операции" (т.е. если было N стало N, было O стало O, было P стало P), а инверсия - это PON (в тринити ещё была универсальная бинарная операция OPB xxx xxx xxx, которой тут нет ещё - там тоже порядок NOPNOPNOP, чтобы можно было таблицу истинности раскладывать без перемешивания) Затрагивание NOP в этом топике: http://www.nedopc.org/forum/viewtopic.php?f=79&t=17752&p=140860&hilit=NOP#p140860 (ноябрь 2017) Первоисточник (3niti alpha): http://www.nedopc.org/forum/viewtopic.php?f=79&t=58&p=70646&hilit=NOP#p70646 (декабрь 2004) P.S. Я понимаю, это выглядит нелогично и противоестественно - старший трит отвечает за конверсию N, средний - за конверсию O, а младший - P, но для человеческого восприятия универсальных операций так проще... P.P.S. С другой стороны в триадоре и так есть своя команда NOP - RR 0, но я всё таки предлагаю команду OP триадора считать идентичной команде OPA из 3niti alpha (и в EX будет OPB, которая также предполагалась программироваться в формате NOP, а не PON) - в этом случае OP NOP будет делать тоже самое, что и RR 0 - т.е. выполнять инструкцию "нет операции", а инвертировать R1 будет OP PON P.P.P.S В одной из программ был OP NOP, который должен быть OP PON - gcd.txt:
|
02 May 2020 20:33 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А в PDP-8 разве не так делали? И вроде, как мне помнится, в ВЕ35 и в ВЕ48 именно так и делают!
_________________ iLavr
|
02 May 2020 20:33 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
Ну вот поэтому и тормозилово Если железо позволяет прозрачно инвертировать один из аргументов перед сложением, то почему бы не завести команду, которая будет это использовать вместо искусственного торможения в 2 раза?
|
02 May 2020 20:38 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я не знаю, что тут означает термин "прозрачно", но аппаратно инверсия одного из аргументов - это дополнительное железо: инвертор и мультиплексор или управляемый инвертор. И как-то не заметил я, чтобы вот в этом топике: Ретро-борда на i8035 (8039, 8048, 8049, КР1816ВЕ35/39/48/49)хоть кто-то пожаловался на "тормозилово"!
_________________ iLavr
|
02 May 2020 21:10 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
Это в двоичном коде чтобы поменять знак числа надо его инвертировать и потом инкрементировать (aka "two's complement" или как говорят наши представить "в дополнительном коде"), а в троичном симметричном коде просто инвертируем каждый трит, что делается легко и непринуждённо на лету без расходования лишних тактов
|
02 May 2020 21:23 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Обрати внимание, я нигде не говорил про инкрементирование, я написал: Никакого инкрементатора не упоминал. А инверсия одного из аргументов, что в троичности, что в двоичности требует инвертора. И кстати "инвертировать и потом инкрементировать" - это тоже неправда, это происходит одновременно: аргумент инвертируется, а на вход Cin мадшего разряда подаётся "1".
_________________ iLavr
|
02 May 2020 21:59 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
у нас инвертор это троичный мультиплексор и есть - по одному мультиплексору на трит просто буфер весит столько же - так что железо не сильно усложнится, а удобство программиста сильно повысится
|
02 May 2020 22:05 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Вот это взвешенный подход, но "по одному мультиплексору на трит" - задержка еще появится, сумматор и так весьма многокаскадный...
_________________ iLavr
|
02 May 2020 22:14 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
Кстати по ассемблеру - я также хотел команды задавать двухбуквенными ключевыми словами, а вот по аргументам мне мыслились десятичные числа от -13 до +13 (вот тут я про это писал) - текстовый файл из описания логисимовской модели триадора: https://gitlab.com/ternary/ternary/-/raw/master/TriadorOp.txt(для OP предполагались макросы типа NOP=-8 и если никаких префиксов для макросов не делать, то по идее мой ассемблер твои программы тоже сможет компилировать). Я хотел свой универсальный ассемблер RASM подлатать, чтобы он такой формат тоже понимал, да всё времени небыло, но там у макросов обязателен префикс @ чтобы не путать программиста, так что возможно придётся написать новый ассемблер на голимых сях - глядишь и свою логисимовскую модель триадора удасться полностью проверить P.S. А может даже и не на сях, а на языке Robby (aka RW1) - тогда и к вебу можно будет его легко прицепить...
|
02 May 2020 22:24 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
Эта задержка сильно меньше периода тактовой частоты - так что ей можно пренебречь
|
02 May 2020 22:25 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Но в сумматоре и в самом каскадов-то прилично... пренебречь еще одним? Что-то сомневаюсь... Мультиплексоры-то не цифровые. Посмотри сам их задержку переключения.
_________________ iLavr
|
02 May 2020 22:29 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
Да там и без АЛУ каскадов нехило - так что лишний управляемый инвертор в цепочке сильно картину не ухудшит (всё лучше чем 2 инструкции забирать под вычитание) Умножение на 3, деление на 3, ну и до кучи всякие алгоритмы где надо кольцом крутить тритами...
|
02 May 2020 22:34 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Очень сомнительное утверждение при вот таких временах задержки: А один лишний управляемый инвертор - это вобще-то 2 мультиплексора, а каждый мультиплексор у тебя - это 2 каскада ключей. И с шуткой про математика ты, пожалуй, тут перегнул... Отсутствие аппаратного вычитания - это способ сэкономить аппаратные средства. Когда я делал АЛУ на NAND-ах - очень хорошо прочувствовал что сколько ст оит. Поэтому не удивился, что и Intel не гнушается таких решений.
_________________ iLavr
|
02 May 2020 23:25 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
Так оно всё на таких задержках работает - если всё посчитать там будет не один десяток в цепочке - добавление одного каскада ухудшит времена на <10% (для всего) а вот недобавление - на +100% (для вычитания) ибо вычитание в этом случае потребует двух инструкций идущих друг за другом, что замедлит выполнение в ДВА раза - так что для меня решение очевидно
|
02 May 2020 23:51 |
|
|