
- •1. Обработка символьной информации
- •Команды префикса повторения.
- •Примеры программ, реализующих действия со строками.
- •Практическая часть.
- •Контрольные вопросы и задания.
- •Передача параметров в процедуру.
- •1. Передача через регистры: программа перед вызовом заносит входные параметры в некоторые регистры процессора, а после возврата выбирает из регистров значения результатов.
- •Модульная структура программ на языке Ассемблера.
- •Работа с командой прерываний int.
- •Практические задания.
- •Синтаксис:
- •Команды сдвига.
- •Команды логического сдвига shl и shr.
- •Команды арифметического сдвига sal и sar.
- •Команды циклического сдвига: rol и ror, rcl и rcr.
- •Использование логических и арифметических команд сдвига.
- •1. Команды логического сдвига. Используются для выполнения быстрого умножение и деление целых чисел на степени двойки, на 2 k.
- •Литература
Модульная структура программ на языке Ассемблера.
Модулем называют часть программы, решающую некоторую подзадачу и более или менее независимую от других частей. Частным случаем модулей являются процедуры.
Рассмотрим процесс объединения отдельных модулей (оформленных в виде отдельных asm-файлов) в единый загрузочный модуль.
Пусть в программе имеется два модуля Ml и М2. Пусть в модуле М2 описана процедура Р, к которой будет обращаться модуль Ml, и пусть модуль М2 пользуется переменной Х и константой К из модуля Ml. Чтобы при трансляции не возникло сообщение об ошибке «неописанное имя», транслятору ассемблера сообщается, что имена Х и К, хотя и используются в М2, описаны в другом модуле. Такое сообщение делается с помощью директивы
<имя>:<тип>,…, <имя>:<тип>
где <тип> - это BYTE, WORD, DWORD, ABS, NEAR, FAR.
В нашем случае в модуле М2 надо указать директиву EXTRN X:BYTE, K:ABS. Она сообщает ассемблеру, что имена Х и К являются внешними по отношению к данному модулю. В модуле Ml следует поместить директиву EXTRN Р: PAR, сообщающую, что Р - это процедура из другого модуля и вызов ее должен быть дальним. В модуле, где описаны имена К и Х (т.е. в Ml) надо поместить директиву PUBLIC <имя>,….,<имя>
В данном случае в модуле Ml надо записать директиву PUBLIC X, K. Этой директивой сообщается, что имена Х и К данного модуля разрешено использовать в других модулях. Имена, описанные в модуле и доступные другим модулям, по отношению к этому модулю называются общими. Итак, если в каком-то модуле программы некоторое имя описано как внешнее, то в каком-то другом модуле это имя обязательно должно быть объявлено общим. С учетом сказанного модули Ml и М2 должны иметь следующий вид
; модуль Ml |
; модуль М2 |
|||||
EXTRN Р: FAR |
EXTRN X:BYTE, K:ABS |
|||||
PUBLIC Х, K |
PUBLIC P |
|||||
X |
DB |
? |
P |
PROC |
FAR |
|
К |
EQU |
100 |
|
MOV |
X, 0 |
|
|
… |
|
|
MOV |
АХ, К |
|
|
CALL |
Р |
|
… |
|
Модули транслируются отдельно. Затем при компоновке они объединяются в единую машинную программу с помощью команды:
LINK M1.OBJ+ … +Mk.OBJ, M.EXE;
Работа с командой прерываний int.
Особым видом являются подпрограммы, вызываемые по прерыванию командой INT. Прерывания бывают двух видов:
аппаратные - это сигнал от любого устройства системы для процессора, который по этому сигналу должен обслужить данное устройство:
программные - создается программами BIOS или DOS для вызова сервисных подпрограмм.
Команда прерывания
INT number
вызывает подпрограммы операционной системы. Эти прерывания имеют номера от 0 до FFh. Перед вызовом команды INT, в регистр AX помещают номер функции, который определяет необходимую подпрограмму. Другие регистры тоже могут использоваться в прерывании.
Процессор выполняет команду прерывания, используя таблицу векторов прерываний. Таблица векторов прерываний занимает самые нижние 1024 байта памяти. Каждый элемент таблицы - это 32-битный адрес «сегмент: смещение», указывающий на подпрограммы операционной системы. Когда происходит вызов команды INT процессор производит следующие действия:
1. Параметр number сообщает процессору местонахождение вектора в таблице векторов прерываний.
2. Процессор передает управление по указанному в векторе прерываний адресу процедуры обработки прерывания (ПОП).
. Подпрограмма DOS или BIOS, расположенная по указанному адресу начинает выполняться и передает управление назад, когда будет достигнута команда IRET.
. Команда возврата из прерывания IRET отдает управление вызывающей программе, которая продолжает работу со следующей за прерыванием командой.