Страница 8 «5 Пример программы»
Страница 8 «5 Пример программы» «5. 3. Продолжение разбора примера программы» Команды условного перехода: (слайд №16)
Команда CALL: (слайд №17)
Осуществляет вызов процедуры или задачи. CALL цель (имя процедуры) Назначение :
Команда ADD: (слайд №18)
Выполняет сложение байтов или слов, содержащих двоичные данные. ADD слагаемое 1, слагаемое 2 Команда безусловного перехода JMP: (слайд №19)
Обеспечивает безусловный переход, т. е. передачу управления при любых обстоятельствах. JMP имя_метки Метку можно кодировать на одной строке с командой или на отдельной строке перед командой, на которую осуществляется переход, например: A20: ADD AX, 01 или A20: ADD AX, 01 … JMP A20 или JMP SHORT A20 Так как: Эта команда для перехода в пределах от -128 до +127 байт имеет тип SHORT. Ассемблер генерирует в этом случае однобайтовый операнд в пределах от 000 до FF. Команда JMP, превосходящая эти пределы получает тип FAR, для которого генерируется другой машинный код и двухбайтовый операнд. Ассемблер в 1-ом просмотре исходной программы определяет длину каждой команды. Но команда JMP может быть длиной 2 или 3 байта. Если к моменту просмотра команды JMP ассемблер уже вычислил значение операнда (при переходе назад), то он генерирует двухбайтную команду. Если ассемблер еще не вычислил значение операнда (при переходе вперед), то он не знает тип перехода NEAR или FAR и автоматически генерирует трехбайтную команду. Для того, чтобы указать ассемблеру на необходимость генерации двухбайтной команды, следует использовать оператор SHORT.
DOS-прерывание INT 21h: (слайд №20)
Основная операция DOS, вызывающая определенную функцию в соответствие с кодом в регистре AH. Например: 4Сh – завершение подпроцесса с возвратом управления; 02h – вывод символа на экран. …
Страница 9 «5 Пример программы» «5. 4. Продолжение разбора примеры программы» Макросы: (слайд №21)
Макрокоманда представляет собой строку, содержащую некоторое символическое имя — имя макрокоманды, предназначенную для того, чтобы быть замещенной одной или несколькими другими строками. Имя макрокоманды может сопровождаться параметрами . имя_макрокоманды macro список_формальных_аргументов тело макроопределения endm
Для того чтобы использовать описанное макроопределение в нужном месте программы, оно должно быть активизировано с помощью макрокоманды указанием следующей синтаксической конструкции: имя_макрокоманды список_фактических_аргументов Процедуры: (слайд №22)
Синтаксис:
Имя_процедуры PROC FAR Тело процедуры
RET Имя процедуры ENDP
Особенности:
Команды PUSH и POP: (слайд №23)
Команда PUSH записывает в стек двухбайтовые адреса или другие значения. Команда POP – выбирает из него нужное значение – слова. Эти операции изменяют относительный адрес в регистре SP (указателе стека) для доступа к следующему слову.
PUSH операнд
POP операнд
Команда INC: Увеличивает значение операнда в памяти или регистре на 1. INC операнд Страница 10 «5 Пример программы» «5. 5. Продолжение разбора программы» Метки: (слайд №24)
Метка в языке ассемблера может содержать следующие символы: Буквы: от A до Z и от a до z Цифры: от 0 до 9 Спецсимволы: · знак вопроса (? )· точка (. ) (только первый символ)· знак " коммерческое эт" (@)· подчеркивание (_)· доллар ($)
Первым символом в метке должна быть буква или спецсимвол. Цифра не может быть первым символом метки, а символы $ и? иногда имеют специальные значения и обычно не рекомендуются к использованию. Большие и маленькие буквы по умолчанию не различаются, но различие можно включить, задав ту или иную опцию в командной строке ассемблера. Максимальная длина метки - 31 символ. Примеры меток: COUNT, PAGE25, $E10. Рекомендуется использовать описательные и смысловые метки. Имена регистров, например, AX, DI или AL являются зарезервированными и используются только для указания соответствующих регистров.
Два варианта использования меток: (слайд №25)
Если метка располагается перед командой процессора, сразу после нее всегда ставится символ «: » (двоеточие), который указывает ассемблеру, что надо создать переменную с этим именем, содержащую адрес текущей команды: some_loop: lodsw; cчитать слово из строки, cmp ax, 7 ; если это 7 - выйти из циклаloopne some_loop
Когда метка стоит перед директивой ассемблера, она обычно оказывается одним из операндов этой директивы и двоеточие не ставится: codesg segment lodsw; cчитать слово из строки, cmp ax, 7 ; если это 7 - выйти из циклаcodesg ends
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|