Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Примеры программВ рассматриваемых примерах приводится только смысловая часть программы, полное оформление программы мы рассмотрим позже. 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; вызов прерывания
|