- •Лучший курс лекций по лучшему языку программирования – языку ассемблера Блок управления памятью (mcb)
- •Программирование на Ассемблере для ibm pc
- •Программная модель 8086
- •Программная модель мп
- •Сегментная память
- •Вывод на экран
- •Вывод строки символов
- •Вывод на экран шестнадцатеричного числа
- •Процедуры
- •Ввод символов
- •Вывод на экран двоичного числа
- •Работа с дисковыми файлами
- •Префикс сегмента программы (psp)
- •Структура префикса программного сегмента.
- •Прерывания.
- •Табличные вызовы подпрограмм.
- •Макрокоманды.
- •Макроопределения.
- •Использование параметров в макроопределениях.
- •Директива local
- •Использование библиотек макроопределений.
- •Конкатенация. (&)
- •Директивы повторения.
- •Условные директивы.
- •Перечисление условных директив.
- •Пример использования ifnb.
- •Пример использования макроопределений.
- •Резидентные программы tsr (terminate and stay resident)
- •Защита резидентной программы от повторной загрузки.
- •Выгрузка резидентной программы.
- •Переключение стека в резидентной программе.
- •Обработчик прерываний от таймера
- •Контроллер прерываний и его программирование
- •Взаимодействие прикладных и системных обработчиков прерываний
- •Резидентный обработчик прерываний от клавиатуры с подключением до системного
- •Резидентный обработчик прерывания от клавиатуры с подключением после системного обработчика
- •Резидентный обработчик прерываний от клавиатуры с подключением как до, так и после системного.
- •Вывод на экран текста средствами bios
- •Режимы дисплея
- •Работа с видеобуфером.
- •Логическая организация текстового видеобуфера.
- •Программирование портов. Звук.
- •Программирование звукового канала таймера.
- •Интерфейс с Си
- •Программы с несколькими сегментами команд.
- •Программы с несколькими сегментами данных.
- •Директива assume. Инициализация сегментных регистров и замена сегментов.
- •Структуры и записи.
Использование библиотек макроопределений.
Удобно тексты макроопределений хранить в отдельном файле, например macro.lib. Для использования макроопределения в программе достаточно написать директиву:
include c:\work\asm\macro.lib
Т.к. транслятор в ассемблере является 2-х проходным, то для обеспечения обработки директивы include только в 1-м проходе (а не в обоих) необходимо использовать следующую конструкцию:
if1 ;директива условной трансляции
include c:macro.lib
endif
Таким образом копия макроопределения не появиться в листинге. Директива include может быть в любом месте программы, но раньше, чем использование макрокоманд.
Конкатенация. (&)
Символ «амперсанд» & указывает ассемблеру на конкатенацию текста ли символов. Следующая макрокоманда move генерирует команду movsb или movsw:
mov macro tag
rep movs&tag
endm
Теперь можно кодировать макрокоманду в виде mov B или mov W. В результате макроопределения ассемблер сцепит параметр с movs и получит rep movsb или rep movsw. Данный пример служит лишь для иллюстрации.
(Команды movsb и movsw - пересылают любое количество байтов или слов соответственно. Обычно используется с префиксом rep
ds:si - откуда
es:di - куда
если df=0 то si и di увеличиваются
если df=1 то si и di уменьшаются)
rep - повторить строковую операцию. Используется в качестве префикса повторения перед строковыми командами. Счетчик повтора - cx.
Директивы повторения.
rept, irp, irpc
Директивы повторения заставляют ассемблер повторить блок операторов, завершаемых директивой endm. Эти директивы не обязательно должны находится в макроопределении, но если они там находятся, то одна директива endm требуется для завершения повторяющего блока, а вторая - для завершения макроопределения.
rept: Повторение.
Операция rept приводит к повторению блока операторов до директивы endm в соответствии с числом повторений, указанных в выражении:
Формат:
rept выражение
endm
Пример:
n=0
rept 5
n=n+1
db n
endm
В результате будет сгенерировано пять операторов db от db 1 до db 5. Т.о. директива rept может использоваться для определения таблицы или части таблицы.
irp: Неопределенное повторение
Irp приводит к повторению блока команд до директивы endm.
Формат:
irp метка, <аргументы>
<Блок кода>
endm
Аргументы, заключенные в угловые скобки - это любое число правильных символов, чисел или строк.
Ассемблер генерирует блок кода для каждого аргумента.
Пример:
irp n, <3,9,17,25,28>
db n
endm
В результате будет сгенерировано пять операторов db от db 1 до db 5.
irpc: Неопределенное повторение символов.
Операция irpc приводит к повторению блока операторов до директивы endm.
Формат:
irpc метка, строка
<блок кода>
endm
Ассемблер генерирует блок кода для каждого символа в строке ‘строка’.
Пример:
irpc n, 34567
dw n
endm
В результате будет сгенерировано пять операторов db от db 3 до db 7.
Условные директивы.
Условные директивы могут быть использованы в любом месте программы и также в макроопределениях, где они наиболее полезны.
Формат:
ifxx условие ;Начало if структуры
...
else
...
endif ;Конец if структуры
Директива else может отсутствовать.
Если условие - истинно, то ассемблер выполняет условный блок до директивы endif. Если условие ложно, то ассемблер выполняет условный блок после else, а при его отсутствии вообще обходит условный блок.