
Сообщение от
Lethargeek
вот ЧТО здесь пересылается?
Пересылаются одиночные слова ( 16-разрядные ) и регистры инкрементируются на 2. Чтобы пересылались двойные слова и регистры инкрементировались на 4 - у кода команды в старшем слове должен стоять бит "двусловного размера операндов". На каком основании компилятор решит ставить такой бит - зависит от разработчика компилятора. Вариантов множество - можно для пересылки двойного слова использовать название команды MOVD, можно для фрагмента кода задать режим компиляции "двусловный размер операндов для старых мнемоник" и т.д и т.п. Но если ничего не предпринимать - компилятор интерпретирует такие мнемоники как команды пересылки 16-разрядных слов.
- - - Добавлено - - -

Сообщение от
b2m
А если сделать так: просто расширить регистры и шину адреса/данных до 32-х бит, а Legacy команды при записи будут выдавать ноль в старших 16 битах. С точки зрения программиста это будет выглядеть так, как будто ОЗУ и ПЗУ теперь двухслойное, в первом слое хранятся 16-битные данные, во втором - дополнительные старшие 16 бит. Если второй слой содержит только нули, то будет выполняться 16-битная программа, но если там не нули, то это 32-х битные команды.
Проблема в том, что архитектура допускает использование абсолютных адресов. При 32-разрядном абсолютном адресе - он содержит нули в старшем слове только для первых 64К адресов. А у нас код должен исполняться одинаково в любом месте адресного пространства.
Если первые 64К адресного пространства занимает область векторов, то как следующий код может не иметь битов ни в одном старшем слове:
Код:
MOV #MES, R0
.PRINT
HALT
MES: .ASCIZ /Hello from 32-bit address space !!!/