- •Программирование на языке Ассемблер
- •Классификация языков программирования
- •Поколения мп
- •Структура мп 8086
- •Регистры мп
- •Регистры общего назначения
- •Сегментные регистры
- •Регистры смещений
- •Регистр флагов
- •Структура и организация памяти
- •Сегментация памяти и формирование адреса
- •Особенности машинных команд
- •Основные команды мп
- •1.2 Перестановка (exchange):
- •1.3 Загрузка исполнительного адреса (load effective address):
- •3.1 Команды умножения
- •3.2 Команды деления
- •Переходы. Циклы
- •Команды сравнения и условного перехода
- •Команды условного перехода
- •3. Команды управления циклом
- •Язык Ассемблера ibm pc. Структура операторов и директив. Метки, переменные и их атрибуты
- •Команды
- •Директивы
- •Директивы определения данных
- •Конструкция повторения dup
- •Директива dd (define double word, определить двойное слово)
- •Директивы эквивалентности и присваивания
- •Структура программы. Логические сегменты
- •Побитовая обработка и ее основные виды
- •2. Команды сдвига
- •2.1. Логические сдвиги
- •2.2. Арифметические сдвиги
- •2.3. Циклические сдвиги
- •Стек и сегмент стека
- •Стековые команды
- •Пример использования стека
- •Модульное программирование
- •Типы объединения модулей
- •Связь Паскаль-Ассемблер
- •Параметры-значения
- •Параметры-переменные
- •Способы адресации
- •Команды строковых примитивов
- •Сканирование строки: scasb, scasw
- •Приемы обработки структурированной информации
- •Inc si ; к следующей оценке
- •Inc dx ; учет отличника
- •Составление и оформление программ на ассемблере
- •Префикс программного сегмента. Com- и exe-программы
- •Команда прерывания
- •Функции прерывания 21h
- •Процесс разработки программы на языке ассемблера
- •Трансляция программы
- •Компоновка программы
- •Макроповторения
- •Макрооператоры
- •Директива local
- •Директивы условного ассемблирования
- •Директивы if и ife
- •Директивы ifidn и ifdif
Макроповторения
Блок повторения имеет следующую структуру:
<заголовок>
<тело>
ENDM
Различают три варианта блока повторения:
REPT-блоки, IRP-блоки, IRPC-блоки.
REPT-блоки
REPT k
<тело>
ENDM
Пример:
REPT 3 SHR AX, 1 ENDM |
SHR AX, 1 SHR AX, 1 SHR AX, 1 |
Пример:
N EQU 6 REPT N-4 DB 0, 1 DW ? ENDM |
N EQU 6 DB 0, 1 DW ? DB 0, 1 DW ? |
IRP-блоки
IRP p, <v1, …, vk>
<тело>
ENDM
p – некоторое имя, формальный параметр; vi – фактические параметры.
Пример:
IRP REG, <AX,CX,SI> PUSH REG ENDM
|
PUSH AX PUSH CX PUSH SI
|
IRPC-блоки
IRPC p, s1…sk
<тело>
ENDM
p – некоторое имя, формальный параметр; si – символы, кроме пробелов и точек с запятой.
Пример:
IRPC D,17W ADD AX,D ENDM
|
ADD AX,1 ADD AX,7 ADD AX,W
|
Макрооператоры
Макрооператоры – операторы, разрешенные к применению только в конструкциях макроязыка.
Оператор замены (&)
& параметр
Пример:
IRP W, <1, 6> VAR&W DW ? ENDM
|
VAR1 DW ? VAR6 DW ?
|
Оператор выделения текста (<>)
Пример:
IRP VAL, <<1,2>, 3> DB VAL ENDM
IRPC S,<A;B> DB ‘&S’ ENDM
|
DB 1,2 DB 3
DB ‘A’ DB ‘;’ DB ‘B’ |
IRP VAL, <<1,2>, 3> DB VAL ENDM
|
DB 1,2 DB 3
|
Оператор выделения символа (!)
Пример:
IRPC X,<A!>B,Привет> DB ‘&X’ ENDM
|
DB ‘A>B’ DB ‘Привет’
|
Оператор выражения (%)
% <константное выражение>
Пример:
K EQU 4 … IRP A,<K+1,%K+1,W%K+1> DW A ENDM |
DW K+1 DW 5 DW W5
|
Комментарий макроопределения (;;)
Пример:
IRP R,<AX,BX> ;; восстановление регистров POP R ENDM |
POP AX POP BX
|
Директива local
LOCAL v1, …, vk
vi – имена, используемые в макроопределении (метки).
Макрогенератор будет заменять эти имена на специальные имена вида ??хххх, где хххх – четырехзначное шестнадцатеричное число.
Пример:
mRepeat macro char, count local L1 mov cx,count L1:mov ah,2 mov dl,char int 21h loop L1 endm |
|
mRepeat ‘A’,10
mov cx,10
??0000:mov ah,2
mov dl,’A’
int 21h
loop ??0000
mRepeat ‘*’,20
mov cx,20
??0001:mov ah,2
mov dl,’*’
int 21h
loop ??0001