Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22542 Location: Silicon Valley
|
так к чему в результате пришли в ходе обсуждений? т.к. в данном случае простота превыше всего, то тройной джамп ненужен - нужен скип по тому или иному условию флагов всё таки наверное должно быть как минимум 2 - знак и переполнение/заём команд пропусков тогда получается 6: - skip_if_negative
- skip_if_zero
- skip_if_positive
- skip_if_borrow
- skip_if_no_carry_borrow
- skip_if_carry
дискасс? P.S. напомню, что "расширение на будущее" EX (NN) имеет возможность поддержать 27 разных команд: и шесть из них я озвучил выше...
|
18 Nov 2017 09:03 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22542 Location: Silicon Valley
|
пропускать 2 инструкции бессмысленно, ну и потом это уже не взвешенный троичный код получается P.S. хотя, может и есть смысл - надо подумать
|
18 Nov 2017 09:09 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22542 Location: Silicon Valley
|
ну когда у нас 27 пустых команд, то занять 6 не выглядит такой уж глобальной растратой надо прикинуть по количеству мультиплексоров - нужно расчехлять мой DDT
|
18 Nov 2017 09:17 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22542 Location: Silicon Valley
|
А теперь немножко триадоровского кода Длинный JMP: Получается, что пропуск одной команды применим только к локальному джампу: В случае реализации "двойного скипа" оно всегда будет 3-строчным P.S. двойной скип выглядит изящнее, если делать так как я выше написал - no skip это -1, one skip это 0 и two skip это +1 - в таком случае можно делать "тройной джамп" и скажем не только по флагам, но и по регистрам (в таком случае нам не нужен будет отдельный флаг sign!): также для реализации скипа нужна будет команда NOP, на которую будет подменяться вычитанная операция в случае скипов - для этой цели можно заюзать EX -13 (NNNNN)
|
18 Nov 2017 09:46 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
При обращении к памяти его реально лучше использовать начиная с -1..-1..-1 и трактовать это как 000 памяти, иначе получается очень неудобный счетчик РС. Я уже этот момент проверил. Суть в том, что желательно, чтобы изменение всех тритов по срезу давало переход в старший трит. Тогда и троичная дешифрация ЗУ упрощается.
_________________ iLavr
|
18 Nov 2017 09:56 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22542 Location: Silicon Valley
|
да по ходу флаг знака ненужен вовсе - если тройной переход сделать по регистру
|
18 Nov 2017 10:14 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22542 Location: Silicon Valley
|
зависит от реализации - если программный счётчик во всю ширь (6 тритов), то идём в следуюший сегмент, а если только 3 трита, то перекручиваемся в начало того же сегмента
|
18 Nov 2017 10:16 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22542 Location: Silicon Valley
|
только один флаг по ходу нужен - carry/borrow потритовые инструкции наверное вообще не должны трогать флаги тогда OP NOP будет выполняться как NOP P.S. а не затолкать ли carry/borrow флаг скажем в R4? тогда при сложении R1 и R2 результат кладётся в R3, а переполнение - в R4
|
18 Nov 2017 10:18 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22542 Location: Silicon Valley
|
В триадоре умножения не будет Убирание флага знака и замена флага переноса-заёма на регистр R4 всё сильно упрощает Например сдвиги можно делать циклически через R1-R4 и не заморачиваться В тоже самое время R4 можно продолжать использовать по его прямому назначению С другой стороны придётся заводить две операции сложения - с учётом R4 и без учёта R4, т.к. чистить R4 перед каждым сложением без переноса будет мучительно. Ну и отдельную команду вычитания надобно предусмотреть - на железном уровне это будет не сильно тяжко - просто лишнее условное инвертирование добавить по второму аргументу сумматора...
|
18 Nov 2017 11:04 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Мне думается надо сделать вот как: все скипы по условию и одиночные. Так проще. JMP - один, дальний, безусловный - его обходят условные скипы. А вот троичное ветвление по 3-м состояниям флага надо сделать как одну операцию BRUNCH. BRUNCH [ADDR1], [ADDR2] (в третьем случае - продолжение).
_________________ iLavr
|
18 Nov 2017 11:12 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22542 Location: Silicon Valley
|
двойной скип лучше тройного джампа тем, что туда можно что-то отличное от JP засунуть и заиметь хитрую логику и потом длинный джамп это 3 команды - это уже тройной скип получается
|
18 Nov 2017 11:14 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Тройной бранч - все классики "троизма" хотели - это "симметричные весы". Будет политически неграмотно не сделать его, аппаратно он несложный.
_________________ iLavr
|
18 Nov 2017 11:17 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Мы путаемся в терминологии...
_________________ iLavr
|
18 Nov 2017 11:19 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22542 Location: Silicon Valley
|
в 3niti alpha он был не сложный - т.к. скакал по 3 регистрам, а тут ты предлагаешь аргументы сувать следом за инструкцией - причём 2 штуки а это усложняет аппаратную реализацию т.к. у нас аргумент идёт в самом коде операции (либо не идёт вовсе, тогда операция дробится на кучу мелких как для EX) поэтому скип по -1/0/+1 выглядит проще т.к. аргументов нет, а есть пропускаемые (или не пропускаемые) инструкции, которые для имитиации твоих "симметричных весов" могут быть джампами P.S. с другой стороны никто не мешает сделать тройной JMP по R1,R2,R3 управляя направлением джампа знаком R4
|
18 Nov 2017 11:30 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22542 Location: Silicon Valley
|
Итого имеем на посмотреть (если учитывать только опкоды без аргументов, которых у нас нету и быть не может): 1) короткий скип по выполнению (или невыполнению) условия знак регистра (как минимум R1 и R4) равен (или не равен) -1,0,+1 2) длинный скип через 3 инструкции по выполнению (или невыполнению) условия знак регистра (как минимум R1 и R4) равен (или не равен) -1,0,+1 3) двойной скип по знаку регистра (как минимум R1 и R4): -1 не скип, 0 один скип, +1 два скипа 4) условный джамп на адреса R1,R2,R3 в зависимости от знака в регистре R4 (который у нас может быть задействован в качестве знака переноса/заёма для операций сложения/вычитания/сдвига)
|
18 Nov 2017 11:37 |
|
|