Почему 32-битные регистры общего назначения Motorola 68k разделены на регистры данных и регистры адреса?

Регистры 68k разделены на две группы по восемь. Восемь регистров данных (от D0 до D7) и восемь адресных регистров (от A0 до A7). Какова цель этого разделения, не лучше ли было бы объединиться?


person user    schedule 26.10.2018    source источник


Ответы (2)


Короткий ответ: это разделение происходит из-за архитектурных ограничений и проектных решений, принятых в то время.

Длинный ответ:

M68K реализует довольно много режимов адресации (особенно по сравнению с RISC-процессорами), причем многие из его инструкций поддерживают большинство (если не все) из них. Это дает большое разнообразие комбинаций режимов адресации в каждой инструкции.

Это также усложняет выполнение кода операции. Возьмем следующий пример:

move.l $10(pc), -$20(a0,d0.l)

Инструкция состоит в том, чтобы просто скопировать длинное слово из одного места в другое, что достаточно просто. Но для того, чтобы на самом деле выполнить операцию, процессору необходимо выяснить фактические (необработанные) адреса памяти, с которыми он будет работать как для операндов источника, так и для операндов назначения. Этот процесс, в ходе которого декодируются (разрешаются) режимы адресации операндов, называется вычислением эффективного адреса.

Для этого примера:

  1. Чтобы вычислить эффективный адрес источника - $10(pc), процессор загружает значение регистра-счетчика PC (программа) и добавляет $10. к этому.

  2. Для вычисления эффективного адреса назначения - -$20(a0,d0.l) процессор загружает значение регистра A0, добавляет значение D0 регистрируется, а затем вычитает $20.

Это довольно много вычислений одного опкода, не так ли?

Но М68К довольно быстро выполняет эти расчеты. Для быстрого расчета эффективных адресов в нем реализована специальная блок адресов (AU).

Как правило, операции с регистрами данных обрабатываются ALU (арифметико-логическое устройство), а операции, связанные с вычислением адресов, обрабатываются AU (адресное устройство).

AU хорошо оптимизирован для 32-битных адресных операций: он выполняет 32-битное вычитание/сложение за один цикл шины (4 такта ЦП), чего не делает ALU (для 32-битных операций требуется 2 такта шины).

Однако AU ограничен только загрузкой и базовыми операциями сложения/вычитания (в соответствии с режимами адресации) и не подключен к CCR (регистру условных кодов). , поэтому операции с адресными регистрами никогда не обновляют флаги.

Тем не менее, AU должен был быть там для оптимизации расчета сложных режимов адресации, но он просто не мог полностью заменить ALU (в конце концов, было всего около 68K транзисторов в M68K), следовательно, имеется два набора регистров (регистры данных и адреса), каждый из которых имеет свой собственный выделенный блок.

person vladikcomper    schedule 20.11.2018

Так что это просто основано на быстром поиске, но использование 16 регистров, очевидно, проще для программирования. Проблема может заключаться в том, что вам придется создавать инструкции для каждого из 16 регистров. Что удвоит количество необходимых кодов операций. Использование половины для каждой цели не идеально, но в целом дает доступ к большему количеству регистров.

person Samual    schedule 26.10.2018
comment
можно больше объяснить? меня интересует эта тема - person user; 27.10.2018