
- •Программирование на языке Ассемблер
- •Классификация языков программирования
- •Поколения мп
- •Структура мп 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
Сканирование строки: scasb, scasw
По команде SCASB содержимое регистра AL сравнивается с байтом памяти, абсолютный адрес которого указывает пара регистров ES:DI, после чего регистр DI автоматически устанавливается на соседний байт памяти.
AL=[ES:DI]? ; DI:=DI+1
Команда SCASW сравнивает слова – из регистра AX и ячейки памяти, абсолютный адрес которого определяется парой ES:DI, после чего регистр DI также автоматически устанавливается на соседнее слово памяти.
AX=[ES:DI]? ; DI:=DI+2
Команда SCAS используется для поиска в строке элемента, равного заданному (в AL или в AX), или отличного от заданного:
REPE SCASB – найти в строке первый элемент, отличный от AL.
REPNE SCASB – найти в строке первый элемент, равный AL.
Сохранение строки: STOSB, STOSW
По команде STOSB в байт памяти, абсолютный адрес которого задается парой регистров ES:DI, записывается содержимое регистра AL, после чего значение регистра DI автоматически меняется на +1. Команда STOSW записывает содержимое регистра AX в слово памяти, абсолютный адрес которого задается регистрами ES:DI, после чего меняет значение регистра DI на +2.
Перед командой STOS указывают только префикс REP.
Пример: заполнить пробелами строку S из 40 символов:
MOV AL,’ ‘
CLD
PUSH DS
POP ES
LEA DI, S
MOV CX, 40
REP STOSB
Загрузка строки: LODSB, LODSW
Команда LODSB (LODSW) записывает в регистр AL (AX) содержимое байта (слова) памяти, абсолютный адрес которого задается регистрами DS:SI, после чего меняет значение регистра SI аналогичным образом.
Пример: переписать все числа из X в Y с изменением их знака.
CLD
LEA SI, X
PUSH DS
POP ES
LEA DI, Y
MOV CX, 100
L: LODSB
NEG AL
STOSB
LOOP L
Приемы обработки структурированной информации
Структуры
По определению структура — это тип данных, состоящий из фиксированного числа элементов разного типа.
Для использования структур в программе необходимо выполнить три действия.
1. Описать тип структуры.
2. Определить переменные этого типа структуры.
3. Организовать обращение к элементам структуры.
Описание типа структуры
Структура – это составной объект, компоненты которого называются полями.
имя типа STRUC
описание поля
…
описание поля
имя типа ENDS
Пример:
DATE STRUC
Y DW 2013
M DB 4
D DB ?
DATE ENDS ; Тип структуры Дата из трех полей: год, месяц, день
Описание переменных-структур
Для описания используется следующая синтаксическая конструкция:
имя_переменной имя_структуры <[список значений]>
Пример:
DT1 DATE <?, 6, 9>
Доступ к элементам структуры
Для ссылок на поля структур используют конструкцию вида:
имя переменой.имя поля
Пример:
DT1.D
Если в переменной DT1 хранится дата 31 марта, требуется записать в нее дату следующего дня.
CMP DT1.M,3
JNE FIN
CMP DT1.D,31
JE APR1
JMP FIN
APR1: MOV DT1.M,4
MOV DT1.D,1
FIN: …
Записи
Запись — структурный тип данных, состоящий из фиксированного числа элементов длиной от одного до нескольких битов.
Описание типа записи
Описывается с помощью директивы следующего вида:
имя типа записи RECORD описание элементов
Пример:
REC RECORD A:3, B:3=7
DATE RECORD Y:7, M:4, D:5
Описание переменных-записей
Для описания такой переменной используют директиву следующего вида:
имя_переменной имя_типа <[список значений]>
D1 DATE <45,5,9>
Для работы с полями записей используются следующие средства языка ассемблера.
Оператор WIDTH
WIDTH имя поля записи
WIDTH имя записи или ее типа
WIDTH Y=7
WIDTH REC=6
Оператор MASK
MASK имя поля записи
MASK имя записи или ее типа
MASK REC =00111111b
MASK M =0000000111100000b
Данный оператор используется при выделении полей записей.
Пример:
Проверить содержит ли поле D записи D1 число 9
MOV AX, D1
AND AX, MASK D
CMP AX,9
JE YES
NO:
Пример:
Подсчитать количество студентов-отличников.
Описан структурный тип студент
STUD STRUC
FAM DB 20 DUP (?)
GR DW ?
MARKS DB 5 DUP (?)
STUD ENDS
Объявление массива переменных типа структура
S STUD 100 (<>)
MOV DX, 0 ; число отличников
; внешний цикл (по студентам)
MOV CX, 100 ; общее число студентов
MOV BX, 0 ; начало информации об очередном студенте
M1: MOV AX, CX
; внутренний цикл (по оценкам)
MOV CX, 5 ; число оценок
MOV SI, 0 ; индекс оценки
M2: CMP (S[BX]).MARKS[SI],5 ; оценка=5?
JNE NEXT ; нет - к следующему студенту