- •Организация памяти.
- •Прграммная модель мп.
- •Ввод - вывод.
- •Внутренние операции мп.
- •Организация обмена с ву.
- •Прерывания.
- •Система команд и режимы адресации мп.
- •Программирование мп.
- •Команды передачи данных.
- •Команды арифметических операций.
- •Команды логических операций и сдвигов.
- •Команды передачи управления.
- •Команды управления мп.
- •Примеры программ.
- •Директивы.
- •Структура ассемблерной программы.
- •Пример оформления программы.
- •2. Порядок выполнения работы.
- •3.Варианты заданий:
- •Контрольные вопросы.
- •5 Содержание отчета.
- •6 Список литературы.
Команды управления мп.
Обеспечивают программное управление различными функциями МП. Делятся на команды синхронизации с внешними событиями и команды управления состоянием флажков.
HLT - Остановить МП.
WAIT - Ожидать внешнего события.
NOP - Пустая операция.
CLI - Сбрасывает флаг разрешения прерываний IF в 0. Т. е. запрещает внешние маскируемые прерывания.
STI - Устанавливает флаг IF в 1. Т. е. разрешает прерывания.
CLC - Сбрасывает флаг переноса CF.
Примеры программ.
В рассматриваемых примерах приводится только смысловая часть программы, полное оформление программы мы рассмотрим позже.
1. Подсчитать число символов в строке. Текущий символ адресуется регистром SI, признак конца строки - нулевой код. (Команды сравнения)
MOV AH, 00h ; Признак конца строки в регистр AH.
MOV CX, -1h ; Начальное значение -1.
ST: INC CX ; Увеличиваем счетчик.
INC SI ; Передвигаем указатель на следующий символ.
CMP AH, [SI - 1] ; Сравниваем текущий символ с терминатором.
JNZ ST ; Если не терминатор - продолжаем цикл.
2. Сформировать для строки 7-битных кодов символов, адресуемой SI и заканчивающейся символом NULL биты контроля на четность каждого символа (записываются в старший разряд) и записать вместо символа NULL байт продольной четности. (Логические операции и переходы)
XOR AH, AH ; Сбросить регистр AH (для байта продольной четности).
ST: MOV AL, [SI] ; Передать в AL код символа из строки.
AND AL, AL ; Т. к. команды пересылки не меняют флаги для их установки
; выполняем любую команду не изменяющую регистр
JZ EXIT ; Если символ NULL - конец строки.
JPE NON ; Число единиц четное? (Переход если флаг четности PF = 1 ).
OR AL, 80h ; Нет - записываем 1 в старший бит.
NON: MOV [SI], AL ; Вернуть символ в строку.
XOR AH, AL ‘ Учесть символ в контрольном байте продольной четности
INC SI ; Передвинуть указатель на следующий символ
JMP ST ; Повторить цикл
EXIT: MOV [SI], AH ; Записать контрольный байт вместо последнего символа.
3. Найти сумму элементов массива беззнаковых двухбайтовых целых чисел. Начальный адрес массива в регистре DI, длина массива N. (управление циклами)
XOR AX, AX ; Сбросить регистры для хранения младшего и
XOR BX, BX ; старшего слов суммы.
MOV CX, N ; Занести число элементов в счетчик.
M: ADD AX, [DI] ; Прибавить текущий элемент.
JNC NOC ; Есть перенос? (Переход если флаг переноса CF = 1)
INC BX ; Учесть перенос в регистре BX.
NOC: INC DI ; Продвинуть указатель на следующий элемент.
INC DI ; (на два байта)
LOOP M ; Повторить цикл сложения.
4. Проверить готовность принтера и в случае готовности записать байт в порт данных принтера 378h. Готовность принтера проверяется опросом порта 379h - там должно быть 11011ххх (разряды байта говорят, что принтер готов, есть бумага, не было сбоя и др).
MOV DX, 379h ; Адрес порта состояния в DX
M0: IN AL, DX ; Читаем байт состояния в AL
AND AL, F8h ; Обнуляем три последних неопределенных бита
XOR AL, D8h ; Складываем по модулю 2 AL и то, что должно там быть, ;когда принтер готов. Если эти значения совпадают в результате будет 0.
JNZ MO ; Если не 0 повторяем опрос
MOV DX, 378h ; Адрес порта данных
MOV AL, 31h ; Байт данных для вывода в аккумулятор
OUT DX, AL ; Вывод в порт
5. Установить дату, используя функцию 2Ah прерывания 21 DOS.
MOV CX, 1999 ; год (1980 - 2099)
MOV DH, 01 ; месяц
MOV DL, 01 ; день
MOV AH, 2Bh ; номер функции
INT 21h ; вызов прерывания