Assembler, Детальна інформація

Assembler
Тип документу: Реферат
Сторінок: 15
Предмет: Комп`ютерні науки
Автор:
Розмір: 66.8
Скачувань: 2495
data    segment

mas_w   dw      25 dup (0)

:

code    segment

:

        lea     si,mas_w        ;mas_w - перемещаемый операнд

 

В этом фрагменте mas_w - символьное имя, значением которого является начальный адрес области памяти размером 25 слов. Полный физический адрес этой области памяти будет известен только после загрузки программы в память для выполнения. 

Счетчик адреса - специфический вид операнда. Он обозначается знаком $.

Специфика этого операнда в том, что когда транслятор ассемблера встречает в исходной программе этот символ, то он подставляет вместо него текущее значение счетчика адреса. Значение счетчика адреса, или, как его иногда называют, счетчика размещения, представляет собой смещение текущей машинной команды относительно начала сегмента кода.

В формате листинга счетчику адреса соответствует вторая или третья колонка (в зависимости от того, присутствует или нет в листинге колонка с уровнем вложенности). Если взять в качестве пример любой листинг, то видно, что при обработке транслятором очередной команды ассемблера счетчик адреса увеличивается на длину сформированной машинной команды. Важно правильно понимать этот момент.

К примеру, обработка директив ассемблера не влечет за собой изменения счетчика. Директивы, в отличие от команд ассемблера, - это лишь указания транслятору на выполнение определенных действий по формированию машинного представления программы, и для них транслятором не генерируется никаких конструкций в памяти. В качестве примера использования в команде значения счетчика адреса можно привести следующий:

jmp $+3 ;безусловный переход на команду mov

 cld ;длина команды cld составляет 1 байт

 mov al,1

  При использовании подобного выражения для перехода не забывайте о длине самой команды, в которой это выражение используется, так как значение счетчика адреса соответствует смещению в сегменте команд данной, а не следующей за ней команды. В нашем примере команда jmp занимает 2 байта. Но будьте осторожны, длина команды зависит от того, какие в ней используются операнды. Команда с регистровыми операндами будет короче команды, один из операндов которой расположен в памяти. В большинстве случаев эту информацию можно получить, зная формат машинной команды и анализируя колонку листинга с объектным кодом команды.  Регистровый операнд - это просто имя регистра. В программе на ассемблере можно использовать имена всех регистров общего назначения и большинства системных регистров.

mov al,4 ;константу 4 заносим в регистр al

 mov dl,pass+4 ;байт по адресу pass+4 в регистр

dl

 add al,dl ;команда с регистровыми

операндами

Базовый и индексный операнды. Этот тип операндов используется для реализации HYPERLINK "http://swizard.chat.ru/asmtutorial/Les_06.htm" \l "КосвеннаяБазовая" косвенной базовой , HYPERLINK "http://swizard.chat.ru/asmtutorial/Les_06.htm" \l "КосвеннаяБазовая" косвенной индексной адресации или их HYPERLINK "http://swizard.chat.ru/asmtutorial/Les_06.htm" \l "КосвеннаяБазовая" комбинаций и HYPERLINK "http://swizard.chat.ru/asmtutorial/Les_06.htm" \l "КосвеннаяБазовая" расширений . 

Структурные операнды используются для доступа к конкретному элементу сложного типа данных, называемого HYPERLINK "http://swizard.chat.ru/asmtutorial/Data.htm" \l "ОпределениеСтруктуры" структурой . 

Записи (аналогично структурному типу) используются для доступа к битовому полю некоторой HYPERLINK "http://swizard.chat.ru/asmtutorial/Data.htm" \l "ОпределениеЗаписи" записи .

Операнды являются элементарными компонентами, из которых формируется часть машинной команды, обозначающая объекты, над которыми выполняется операция.

В более общем случае операнды могут входить как составные части в более сложные образования, называемые выражениями.

Выражения представляют собой комбинации операндов и операторов, рассматриваемые как единое целое.

Результатом вычисления выражения может быть адрес некоторой ячейки памяти или некоторое константное (абсолютное) значение.

Возможные типы операндов мы уже рассмотрели. Перечислим теперь возможные типы операторов ассемблера и синтаксические правила формирования выражений ассемблера.

HYPERLINK "http://swizard.chat.ru/asmtutorial/" \l "АрифметическиеOператоры" Арифметические операторы HYPERLINK "http://swizard.chat.ru/asmtutorial/" \l "ОператорыСдвига" Операторы сдвига HYPERLINK "http://swizard.chat.ru/asmtutorial/" \l "ОператорыСравнения" Операторы сравнения HYPERLINK "http://swizard.chat.ru/asmtutorial/" \l "ЛогическиеОператоры" Логические операторы HYPERLINK "http://swizard.chat.ru/asmtutorial/" \l "ИндексныйОператор" Индексный оператор HYPERLINK "http://swizard.chat.ru/asmtutorial/" \l "ОператорПереопределенияТипа" Оператор переопределения типа HYPERLINK "http://swizard.chat.ru/asmtutorial/" \l "ОператорПереопределенияСегмента" Оператор переопределения сегмента HYPERLINK "http://swizard.chat.ru/asmtutorial/" \l "ОператорИменованияТипа" Оператор именования типа структуры HYPERLINK "http://swizard.chat.ru/asmtutorial/" \l "SEG" Оператор получения сегментной составляющей адреса выражения HYPERLINK "http://swizard.chat.ru/asmtutorial/" \l "Offset" Оператор получения смещения выражения

The online video editor trusted by teams to make professional video in minutes