Почему 32-разрядные регистры общего назначения Motorola 68k делятся на регистры данных и регистры адресов? - PullRequest
0 голосов
/ 26 октября 2018

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

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

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

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

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

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

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

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

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

  1. Для расчета эффективного адреса источника - $ 10 (шт.) , процессор загружает значение ПК (программа) счетчика регистра и добавляет $ 10 к нему.

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

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

Но M68K довольно быстро выполняет эти вычисления. Чтобы быстро рассчитать эффективные адреса, он реализует выделенный адресный блок (AU).

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

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

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

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

0 голосов
/ 26 октября 2018

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

...