Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ас(1).docx
Скачиваний:
39
Добавлен:
11.02.2015
Размер:
897.48 Кб
Скачать

16. Понятие метки. Использование типа метки Short.

Метка - символическое имя определенной ячейки памяти, предназначенное для

использования в командах передачи управления в качестве операнда. Транслятор ассемблера присваивает каждой метке три атрибута:

  • Имя сегмента кода, в котором эта метка описана;

  • Смещение, то есть расстояние в байтах от начала этого сегмента;

  • Тип метки.

Метки бывают двух типов:

  1. NEAR

Используется для описания типа данных и метки как near (ближайший, тот же сегмент).

Примечания: этот тип данных используется:

      • директивой EXTRN;

      • оператором PTR;

      • директивой LABEL;

      • оператором THIS;

      • директивой PROC.

Метка, за которой стоит двоеточие, например, «Address:», является меткой типа near.

  1. FAR

Используется для определения типа метки как дальней (из другого сегмента).

Примечания: этот тип данных используется:

  • директивой EXTRN;

  • оператором PTR;

  • директивой LABEL;

  • оператором THIS;

  • директива PROC.

Устанавливает тип метки SHORT (короткий). Примечания: если расстояние между меткой и переходом, ссылающимся на нее, меньше 128 байтов, метка может быть объявлена как метка типа SHORT. Команды, использующие метки SHORT, содержат в себе на 1 байт меньше, чем команды, использующие метки NEAR.

17. Команды условного перехода, использование команды cmp.

Условные переходы имеют формат jxxx Метка.

Все они осуществляют короткий переход при некотором условии, определяемом постфиксом мнемокода xxx. Все эти условия определяются состояниями флагов (за исключением команды JCXZ, условие перехода которой определяется состоянием регистра CX).

Если необходимо осуществить условный близкий (не короткий) переход, приходится комбинировать условный и безусловный переходы.

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

Cmp Операнд1, Операнд2

Тогда комбинация флагов приобретает определенный математический смыл, указанный в таблице:

18. Понятие и формат макрокоманд. Примеры макрокоманд.

Макрокоманда – именованный блок команд языка ассемблера. После того как макрокоманда определена в программе, ее можно неоднократно вызывать в разных участках кода. При вызове макрокоманды, в код программы будут помещены содержащиеся в ней команды. Не следует путать вызов макрокоманды с вызовом обычной команды/процедуры, поскольку в первом случае команда CALL не используется.

Синтаксис макрокоманды:

Имя MACRO Параметр-1, Параметр-2…

Список команд

ENDM

Пример макрокоманды mPutchar, имеющей один входной параметр, имя которого char. Данная макрокоманда выводит символ, переданный ей в качестве параметра, на терминал с помощью вызова процедуры WriteChar:

mPutchar MACRO char

push eax

mov al,char

call Writechar

pop eax

ENDM

19. Организация циклов на Ассемблере Loop, Loope, Loopne.

  1. LOOP – Переход по счетчику

LOOP short-label .

логика: CX = CX - 1

if (CX <> 0)

JMP short-label

Команда LOOP уменьшает CX на 1, затем передает управление по метке short-label, если CX не равно 0. Операнд short-label должен находиться в пределах от -128 до +127 байтов от следующей команды.

  1. LOOPE – Переход пока равно

LOOPE short-label

Логика: CX = CX - 1

if (CX <> 0) and (ZF = 1)

JMP short-label .

Команда LOOPE используется после команд CMP или SUB. Она уменьшает CX на 1, затем передает управление по метке short-label, если CX не равно нулю и если первый операнд команд

CMP или SUB был равен второму операнду. Операнд short-label должен находиться в пределах от -128 до +127 байтов от следующей команды.

  1. LOOPNE – Переход пока не равно

LOOPNE short-label

Логика: CX = CX - 1

if (CX <> 0) and (ZF = 0)

JMP short-label .

Команда LOOPNE используется после команд CMP или SUB. Она уменьшает CX на 1, затем передает управление по метке short-label, если CX не равно нулю и если первый операнд команд CMP или SUB не равен второму операнду. Операнд short-label должен находиться в пределах от -128 до +127 байтов от следующей команды.