- •1. Обработка символьной информации
- •Команды префикса повторения.
- •Примеры программ, реализующих действия со строками.
- •Практическая часть.
- •Контрольные вопросы и задания.
- •Передача параметров в процедуру.
- •1. Передача через регистры: программа перед вызовом заносит входные параметры в некоторые регистры процессора, а после возврата выбирает из регистров значения результатов.
- •Модульная структура программ на языке Ассемблера.
- •Работа с командой прерываний int.
- •Практические задания.
- •Синтаксис:
- •Команды сдвига.
- •Команды логического сдвига shl и shr.
- •Команды арифметического сдвига sal и sar.
- •Команды циклического сдвига: rol и ror, rcl и rcr.
- •Использование логических и арифметических команд сдвига.
- •1. Команды логического сдвига. Используются для выполнения быстрого умножение и деление целых чисел на степени двойки, на 2 k.
- •Литература
Контрольные вопросы и задания.
1. Назовите строковые команды, выполняемые текстовым редактором, которые могут быть реализованы на языке ассемблера.
. Напишите процедуру (фрагмент программы) для копирования данных из одной области памяти в другую. Предусмотреть вывод данных до копирования, и после копирования.
. Реализуете процедуру копирования данных с использованием команд MOVSB и MOVSW.
. Реализуете процедуру копирования данных по убыванию адресов.
. Реализуете процедуру копирования данных без использованием цепочечных команд копирования.
. Выясните, что будет, если в SI поместить смещение строки dst, а в DI строки src.
. Можно ли вместо префикса REP использовать другой, например REPE. Если, да, то почему.
. Имеется следующее определение данных:
SEGMENT PARA
CONAME DB ‘SPACE EXPLORES INC.’
PRLINE DB 20 DUP (» ‘)
Используя цепочечные команды, выполните (запишите фрагмент программы):
a). Пересылку данных из CONAME в PRLINE слева направо.
b). Пересылку данных из CONAME в PRLINE справа налево.). Загрузку третьего и четвертого байта области CONAME в регистр AX.). Сохранение содержимого регистра AX по адресу PRLINE + 5). Сравнение данных в областях CONAME и PRLINE.). Сканирование области CONAME и поиск в ней символов «пробел». Если символ найден, то переслать его в регистр BH.
. Сравнить командой cmps две цепочки байт в памяти string1 и string2 и поместить первый несовпавший байт из string2 в регистр al. Для загрузки этого байта в регистр-аккумулятор al использовать команду lods.
. Процедуры в языке Ассемблера
команда ассемблер подпрограмма строка
Цель: изучение приемов программирования на языке Ассемблера с использованием подпрограмм, выработка навыков работы с командами вызова подпрограмм, возврата из подпрограммы.
Задачи:
изучить механизм работы команды вызова подпрограммы CALL, возврата из подпрограммы RET, правила оформления подпрограмм;
получить практические навыки по созданию подпрограмм на языке Ассемблера.
Команды работы подпрограммы.
В языке ассемблера подпрограмма оформляется в виде процедур. Для объявления процедур в одномодульных, простых программах можно использовать упрощенный вариант синтаксиса:
<имя> PROC <тип>
<тело процедуры>
RET
<имя> ENDP
где PROC - директива, определяющая начало процедуры, <имя> - метка, служащая именем процедуры и задающая адрес точки входа в процедуру; <тип> - параметр, определяющий тип процедуры и может принимать два значения: near (ближний) и far (дальний). Если используется упрощенные формы определения сегментов, то тип процедуры задается выбранной моделью памяти и его можно не указывать. Для моделей tiny, small и compact определяется тип near, а для остальных - far; RET (Return) - последняя команда подпрограммы. Она осуществляет выход из подпрограммы и возврат в основную программу. Тип процедуры автоматически задает тип возврата из процедуры.
Вызов подпрограммы из основной программы осуществляется командой CALL (), которая имеет следующий синтаксис:
CALL <тип> <имя>
где <тип> - параметр, определяющий тип перехода и может принимать значения near или far; <имя> - имя вызываемой процедуры.
Когда команда CALL вызывает процедуру, и сохраняет в стек адрес следующей за CALL команды. При ближнем вызове в стек помещается значение регистра IP, а при дальнем вызове - значение регистров CS и IP. После выполнения в процедуре команды RET - выполняется обратное действие.
Фрагмент программы вызова процедур
; фрагмент кода программы
main PROC
MOV AX, @data DS, AX MySub
… AX, 4C00h 21 ENDP
MySub PROC
… ENDP