Идея такая, что старый код должен работать в старых операционках ( ведь реальный старый код без системных вызовов не бывает ), поэтому для запуска старого кода предусмотрены специальные 16-разрядные процессы, выполняемые не на основном 32-разрядном ядре, а на специальном сопроцессоре, полностью имитирующем самую навороченную архитектуру PDP-11 с 8 Мб ОЗУ. Архитектура допускает создание любого количества 16-разрядных процессов с возможностью мапинга индивидуальных адресов эмулируемой страницы ввода-вывода каждого такого процесса на реальные адреса физического 32-разрядного пространства ввода-вывода. Понятно, что для запуска старого кода конкретной операционки - сначала в эмулируемой 22-разрядной архитектуре надо будет загрузить соответствующую операционку.
Большого практического смысла в этом нет, поэтому при отсутствии в конкретной реализации 22-разрядного сопроцессора - создание 16-разрядных процессов 32-разрядным процессором будет невозможно.
Легаси-команды - это полноценные 32-разрядные команды с нулевым старшим словом кода команды. Они нужны не для запуска старого двоичного 16-разрядного кода в 32-разрядных процессах, а для упрощения переделки кодогенераторов старых компиляторов. Чтобы старый ассемблерный текст, скомпилированный для 32-разрядной архитектуры, имел отличия в работе от работы на PDP-11 - нужно очень постараться. Что-то вроде: ADD #4,PC или MOV 2(SP),(SP) | RETURN - сработает по-разному ( и поэтому выдаст предупреждение при компиляции ), но команды не использующие явно PC и SP для косвенно-индексной адресации - сработают одинаково.
В принципе - Legacy и Extended Legacy команды ничем не лучше и не хуже аналогичных по функционалу Pure 32 команд, просто их реализация позволяет осуществлять разработку 32-разрядной архитектуры, максимально совместимой с PDP-11 - более плавно и последовательно. Кроме того - такая (например) легаси-команда, как HALT - вряд ли должна иметь отличающийся "новый" 32-разрядный код.





Ответить с цитированием