Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 189

Unknown Author

По умолчанию макроассемблер MASM (версия 4.0) допускает использование в программе только команд процессора 8086, применение же иных команд рассматривается как ошибка. Если программа рассчитана на работу с другим процессором или на использование команд сопроцессора, то это надо явно указать ассемблеру, для чего используются указанные ниже директивы. Их можно помещать в любом месте программы, они начинает действовать немедленно и до следующей подобной директивы.

.8086 - допускается использование только команд процессора 8086 (эта директива подразумевается по умолчанию).

.186    - допускается использование всех команд процессора 8086, а также всех

новых команд процессора 80186.

.286С - допускается использование всех команд, поддерживаемых процессором 80286 в непривилегированном режиме (их набор полностью совпадает с системой командами процессора 80186).

.286Р - допускается использование всех команд процессора 80286, в том числе и команд привилегированного режима.

.8087 - помимо команд основного процессора допускается и использование команд сопроцессора 8087.

.287    - помимо команд основного процессора допускается и использование

команд сопроцессора 80287.

(Замечание: в версии 4.0 языка MASM не предусмотрены аналогичные директивы для процессора 386 и старше и для сопроцессора 387 и старше, т. к. эта версия была разработана до их появления.)

14.62. Группы сегментов ' Директива

<имя группы> GROUP <имя сегмента> {,<имя сегмвнта>>

объединяет перечисленные сегменты в одну группу. Это значит, что все имена из всех этих сегментов будут сегментироваться по одному и тому же сегментному регистру. По какому именно - определяется директивой ASSUME: если в ней указан операнд

8г:<имя группы>

где sr - какой-то сегментный регистр, то каждое имя из этих сегментов ассемблер будет заменять на адресную пару sr:ofs, где ofs - смещение имени, отсчитанное от начала группы (загрузку этого начала в регистр sr должна осуществить сама программа). Такая замена производится, даже если для какого-то из сегментов группы указан "свой” регистр.

Отметим, что объединение сегментов в группу означает их сегментирование по одному регистру, но не их непрерывное расположение в памяти: сегменты одной группы необязательно будут размещены в памяти подряд, между ними могут оказаться другие сегменты (при размещении сегментов в памяти учитываются их классы, а не их принадлежность к одной группе - см. директиву SEGMENT). Но в любом случае расстояние от начала группы до последнего занятого байта последнего сегмента группы не должно превосходить 64 Кб.