Да, правильно.
А если выполнять по 2 команды за такт, то цикл из одной команды замедлится в 3 раза
Нет, идея с регистрами мне не нравится. И в любом случае переход сбивает буфер инструкций (конвейер). Потом может для циклов придумаю что-нибудь.
Пусть будут, они не мешают. Load/store архитектура тоже имеет недостатки.
Для такого двойного процессора программист будет писать две команды в строке, или ассемблер соберёт две в одну? Потому что проектировать процессор с блокировками и байпасами меня что-то совсем не прёт.
Разделение регистров позволяет и push сделать по маске, и два ALU с двумя операциями за такт, но я на данный момент вообще не понимаю как эту параллельность воткнуть в то, что есть. При 32-битных командах RISC всё получается просто, но надо сохранить совместимость с Z80, а он совсем не RISC, переменная длина команд всё портит. Предел, на котором по-моему надо остановиться - один байт кода за такт.
По тактам минимум получается примерно так:
mov A,R - 1 такт
mov R,A - 1 такт
mov R,R - 2 такта
func A - 1 такт
func R - 2 такта
func A,R - 3 такта
func R,A - 4 такта
func A,imm32 - 6 байт, 8 тактов
func [reg],imm32 - 7 байт, 17 тактов
Доступ к памяти пока по 1 байту, поэтому так долго. Можно, конечно, и внутреннюю шину сделать 32 бита, и не ждать окончания записи, и что-то распараллелить, всё можно. Но я тогда закопаюсь в этих деталях и до главного - запуска процессора - не доберусь.






Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
