Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
26
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

Глава 2

Основы программирования

63

Эти данные удобно специфицировать с помощью записи filedate, оп­ ределяемой в программе следующим образом: <Й

fdate record year:7, month:4, day:5 pi

Ключевое слово record говорит о том, что имя fdate относится к запи­си, а мнемонические обозначения year, month и day являются произволь­ными именами отдельных битовых полей описываемого слова.

Включение в программу описания шаблона битовых полей позволяет отказаться от утомительного и чреватого ошибками определения «вруч­ную» содержимого полного данного по задаваемым значениям его от­дельных составляющих. Для приведенной выше записи объявления конк­ретных переменных будут выглядеть следующим образом:

fflel fdate <5,6,7> Ше2 fdate <18,12,30> ШеЗ fdate <>

;7 июня 1985г.

;30 декабря 1998г.

;»Пустая» (пока) переменная

Переменная filel будет определена, как число OAC7h, Ше2 — как чис­ло 259Eh, а ШеЗ — как число OOOOU. При необходимости программного заполнения переменной типа fdate можно пользоваться именами ее со­ставляющих, которые трактуются ассемблером, как индексы соответству­ющих битовых полей, отсчитываемые от младшего конца слова. Для при­веденного примера day=0, month=5, a year=9- Однако в системе команд МП 86 практически нет средств работы с битовыми полями. Поэтому про­граммное заполнение придется осуществлять с помощью команд сдвигов и логического сложения:

mov

flle3,30

mov

AX,12

mov

CL, month

shl

AX,CL

or

ШеЗ, AX

mov

AX,18

mov

CL, month

shl

AX,CL

or

ШеЗ, AX

;Помещаем день

;Месяц пока в АХ

;Будем сдвигать на month бит

;Сдвинули месяц в АХ на 5 бит .

;Добавили биты месяца в ШеЗ

;Год пока в АХ

;Будем'сдвигать на year бит

;Сдвинули год в АХ на 9 бит

;Добавили биты года в ШеЗ

В итоге в переменной ШеЗ окажется тот же код 259Е11, что и в пере­менной file 2.

2.5. Способы адресации

Способом, или режимом адресации называют процедуру нахождения операнда для выполняемой команды. Если команда использует два опе­ранда, то для каждого из них должен быть задан способ адресации, при­чем режимы адресации первого и второго операнда могут как совпадать,

так и различаться. Операнды команды могут находиться в разных местах: непосредственно в составе кода команды, в каком-либо регистре, в ячей­ке памяти; в последнем случае существует несколько возможностей ука­зания его адреса. Строго говоря, способы адресации являются элементом архитектуры процессора, отражая заложенные в нем возможности поис­ка операндов. С другой стороны, различные способы адресации опреде­ленным образом обозначаются в языке ассемблера и в этом смысле явля­ются разделом языка.

Следует отметить неоднозначность термина «операнд» применительно к программам, написанным на языке ассемблера. Для машинной команды операндами являются те данные (в сущности, двоичные числа), с кото­рыми она имеет дело. Эти данные могут, как уже отмечалось, находиться в регистрах или в памяти. Если же рассматривать команду языка ассембле­ра, то для нее операндами (или, лучше сказать, параметрами) являются те обозначения, которые позволяют сначала транслятору, а потом про­цессору определить местонахождение операндов машинной команды. Так, для команды ассемблера

mov mem, AX

в качестве операндов используется обозначение ячейки памяти mem, a также обозначение регистра АХ. В то же время, для соответствующей ма­шинной команды операндами являются содержимое ячейки памяти и содержимое регистра. Было бы правильнее говорить об операндах машин­ных команд и о параметрах, или аргументах команд языка ассемблера.

По отношению к командам ассемблера было бы правильнее исполь­зовать термин «параметры», оставив за термином «операнд» обозначение тех физических объектов, с которыми имеет дело процессор при выпол­нении машинной команды, однако обычно эти тонкости не принимают в расчет, и говоря об операндах команд языка, понимают в действительно­сти операнды машинных команд.

В архитектуре современных 32-разрядных процессоров Intel предус­мотрены довольно изощренные способы адресации; в МП 86 способов адресации меньше. В настоящем разделе будут описаны режимы адреса­ции, используемые в МП 86.

В книгах, посвященных языку ассемблера, можно встретить разные подходы к описанию способов адресации: не только названия этих режи­мов, но даже и их количество могут различаться. Разумеется, способов адресации существует в точности столько, сколько их реализовано в про­цессоре; однако, режимы адресации можно объединять в группы по раз­ным признакам, отчего и создается некоторая путаница, в том числе и в количестве имеющихся режимов. Мы будем придерживаться распростра­ненной, но не единственно возможной терминологии.

Регистровая адресация. Операнд (байт или слово) находится в регис­тре. Этот способ адресации применим ко всем программно-адресуемым Регистрам процессора.

64