
- •Типы данных ассемблера
- •2. Обозначение чисел и директивы определения данных
- •Системы счисления. Правила перевода
- •8. Принципы работы со стеком
- •9. Виды операндов
- •17. Команды передачи управления
- •18. Организация безусловного перехода
- •19. Процедуры. Диапазон действия процедур
- •20. Условные переходы
- •21. Команды сравнения
9. Виды операндов
Операнды – объекты, над которыми или при помощи которых выполняется действия, задаваемые инструкциями или директивами. В двухоперационной машинной команде возможны следующие сочетания: регистр-регистр, регистр-память, память-регистр, непосредственный операнд-регистр, непосредственный операнд-память.
Виды операндов:
Операнд, заданный неявно на микропроцессорном уровне – команды используют некоторые объекты по умолчанию. (AAD), div BX
Непосредственные операнды. Задаются в самой команде. Непосредственный операнд может быть только вторым операндом.
add sum, 2
mov ax, 10
Адресные операнды. Задают физическое расположение операнда в памяти путем указания двух составляющих адресов сегмента и смещения.
mov ah, 0000h
mov ds, ax
mov ax, ds:0000h
Перемещаемые операнды. Символьные имена, представляющие непосредственные адреса памяти. Отличаются от адресных тем, что они не привязаны к конкретному адресу физической памяти. Сегментная составляющая адреса определяется только после загрузки программы в память для выполнения
data segment
mas_w dw 25 dup (0)
…
code segment
leq S1, mas_w
mas_w – символьное имя, значением которого является адрес первого байта области размером в 25 двойных слов. Счетчик адреса обозначается «$». Когда транслятор TASM встречает символ «$», то он подставляет текущее значение счетчика адресов.
Jmp $+3
Cld
Mov al,1
5. Регистровый операнд
17. Команды передачи управления
Изменяя содержимое регистров CS, EIP. по принципу действия команды процессора, обеспечивающие организацию переходов в программе, команды передачи управления можно разделить на три группы:
Команды безусловной передачи управления:
Безусловного перехода
Вызов и возврат программ из процедур
Вызов программы прерываний
Возврат из программы прерываний
Команды условной передачи управления:
Команда перехода по результату команды сравнения
Переход по состоянию определенного флага
Переход по содержимому регистра ECX/CX
Команды управления циклом:
Организация цикла со счетчиком ECX/CX
Организация цикла со счетчиком ECX/CX с возможностью досрочного выхода из цикла по дополнительному условию
В TASM то место, куда необходимо передать управление определяется с помощью меток. Метку можно определить двумя способами: оператором «:» или с помощью делителя «label». Транслятор присылает метке три атрибута:
Имя сегмента кода, где эта метка описана
Смещение расстояния в байтах от начала сегмента кода, в котором описана метка
Тип или атрибут расстояния метки:
Ближайший (near) – переход возможен только в пределах сегмента кода, где эта метка описана
На расстоянии (far) – переход возможен в результате межсегментной передачи управления. Требуется изменение содержимого регистров EIP и CS
С помощью оператора «:» можно определить то, что метку near можно использовать в качестве операнда условного перехода или безусловного перехода (jmp, call). Для директивы «label» тип метки может применять значение near или far:
m:
mov ax, pole_1
m1 label near
mov al, pole_1
Для того, чтобы сделать видимыми извне метки, применяется директива public:
M_far label far
public M_far