Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Организация ЭВМ и сетей - Лаба 01.rtf
Скачиваний:
2
Добавлен:
10.07.2019
Размер:
764.62 Кб
Скачать

Команды управления мп.

Обеспечивают программное управление различными функциями МП. Делятся на команды синхронизации с внешними событиями и команды управления состоянием флажков.

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 ; вызов прерывания