- •2 Способы задания операндов команды.
- •3 Понятие процедуры. Назначение, структура и механизм работы.
- •4. Обмен данными между процедурой и вызывающей программой.
- •7. Особенности написания com и exe программ на Ассемблере
- •9. Директивы описания данных db, dw, dd. Оператор dup. Примеры.
- •10. Директивы assume, org, end
- •13 Основные виды адресации к памяти. Прямая, косвенная базовая и индексная адресация
- •14. Команды пересылки данных mov, xchg и их преобразования
- •15. Построение исходного модуля программы
- •16. Понятие метки. Использование типа метки Short.
- •17. Команды условного перехода, использование команды cmp.
- •18. Понятие и формат макрокоманд. Примеры макрокоманд.
- •19. Организация циклов на Ассемблере Loop, Loope, Loopne.
- •20. Работа со стеком. Команды работы со стеком push, pop, pusha, popa.
- •21. Команды lea, lds и les
- •22. Написание комментариев. Использование констант в различных системах счисления. Работа с флагами.
- •23. Команды сдвига shr, shl, rcl, rcr, rol, ror. Их работа и примеры использования.
- •24. Три вида команд безусловного перехода jmp ***. Особенности их использования
16. Понятие метки. Использование типа метки Short.
Метка - символическое имя определенной ячейки памяти, предназначенное для
использования в командах передачи управления в качестве операнда. Транслятор ассемблера присваивает каждой метке три атрибута:
Имя сегмента кода, в котором эта метка описана;
Смещение, то есть расстояние в байтах от начала этого сегмента;
Тип метки.
Метки бывают двух типов:
NEAR
Используется для описания типа данных и метки как near (ближайший, тот же сегмент).
Примечания: этот тип данных используется:
директивой EXTRN;
оператором PTR;
директивой LABEL;
оператором THIS;
директивой PROC.
Метка, за которой стоит двоеточие, например, «Address:», является меткой типа near.
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.
LOOP – Переход по счетчику
LOOP short-label .
логика: CX = CX - 1
if (CX <> 0)
JMP short-label
Команда LOOP уменьшает CX на 1, затем передает управление по метке short-label, если CX не равно 0. Операнд short-label должен находиться в пределах от -128 до +127 байтов от следующей команды.
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 байтов от следующей команды.
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 байтов от следующей команды.