С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Пересылаются одиночные слова ( 16-разрядные ) и регистры инкрементируются на 2. Чтобы пересылались двойные слова и регистры инкрементировались на 4 - у кода команды в старшем слове должен стоять бит "двусловного размера операндов". На каком основании компилятор решит ставить такой бит - зависит от разработчика компилятора. Вариантов множество - можно для пересылки двойного слова использовать название команды MOVD, можно для фрагмента кода задать режим компиляции "двусловный размер операндов для старых мнемоник" и т.д и т.п. Но если ничего не предпринимать - компилятор интерпретирует такие мнемоники как команды пересылки 16-разрядных слов.
- - - Добавлено - - -
Проблема в том, что архитектура допускает использование абсолютных адресов. При 32-разрядном абсолютном адресе - он содержит нули в старшем слове только для первых 64К адресов. А у нас код должен исполняться одинаково в любом месте адресного пространства.
Если первые 64К адресного пространства занимает область векторов, то как следующий код может не иметь битов ни в одном старшем слове:
Код:MOV #MES, R0 .PRINT HALT MES: .ASCIZ /Hello from 32-bit address space !!!/
Можно сделать и так, что при выполнении Legacy-команды старшие 16 бит регистра PC не будут модифицироваться, тогда можно под 16-битный процесс отводить любую страницу в 64Кб.
- - - Добавлено - - -
Так будет даже правильнее, когда Legacy-команды не трогают старшие 16 бит любых регистров.
При выполнении Legacy-команды точно также, как при записи старшие 16 бит шины данных содержат нули, старшие 16 бит адреса должны выдавать старшие биты регистра PC.
Последний раз редактировалось b2m; 14.09.2017 в 21:47.
Для 16-битных процессов в архитектуре есть специальный режим абсолютной совместимости с PDP-11, поэтому сейчас речь только о 32-битных процессах, в любом месте адресного пространства которых может исполняться легаси-код.
- - - Добавлено - - -
Именно так, поэтому полная совместимость невозможна В ПРИНЦИПЕ.
Последний раз редактировалось Patron; 14.09.2017 в 22:21.
Также как и раньше. В том-то и идея, что нет разницы ни для 16-битного, ни для 32-битного кода.
Я предлагаю отказаться от режимов. Legacy-команды могут следовать вперемешку с другими командами. Это упростит архитектуру процессора. Несложно будет переделать то, что отреверсили, и долнить это новыми командами.
Легаси-команды - это точно такие же 32-разрядные команды, как и все остальные 32-разрядные команды. Абсолютная невозможность полной совместимости 16-разрядного кода с 32-разрядным режимом полностью снимает проблему совместимости. Для 16-разрядного кода - 16-разрядный режим, для 32-разрядного кода - 32-разрядный режим.
Прихожу без разрешения, сею смерть и разрушение...
Другой пример - вот раньше был массив, к примеру, из 5 байтов, в 16-битном режиме располагались в памяти друг за другом. А как будут в 32-битном располагаться?
А как адресуются байты при выполнении следующего кода:
Процессор читает с шины двойные слова и потом как-то внутри себя выковыривает из прочитанного отдельные байты. Но ведь байты не только читать, но и писать нужно. А как PDP-11 может писать отдельные байты при 16-разрядной шине - так и при 32-разрядной сможет.Код:MOVB (R0)+,(R1)+ MOVB (R0)+,(R1)+ MOVB (R0)+,(R1)+ MOVB (R0)+,(R1)+ MOVB (R0)+,(R1)+
Последний раз редактировалось Patron; 14.09.2017 в 22:20.
Полная совместимость - это когда 16-разрядные и 32-разрядные команды выполняются вперемешку в одном адресном пространстве. Можно ввести 32-разрядную команду: "выполнить следующие Х слов в 16-разрядном режиме", но это не может решить проблему абсолютной адресации, потому что команды из 16-разрядного фрагмента должны иметь доступ к данным за пределами фрагмента.
- - - Добавлено - - -
Другая причина - помочь всем и каждому понять, почему полная совместимость старого двоичного 16-разрядного кода с 32-разрядным адресным пространством - в принципе невозможна.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)