- •По курсу: ”организация эвм и систем”
- •Печатается по решению редакционно-издательского совета
- •Введение
- •1Введение в архитектуру реального режима ibm pc
- •Память и процессор
- •Распределение адресного пространства
- •Система прерываний
- •Система ввода-вывода
- •Архитектурные особенности процессоров ia-32
- •Дополнительные режимы адресации
- •Использование средств 32-разрядных процессоров в программировании
- •2Общие указания по выполнению лабораторных работ
- •Лабораторная работа № 1 Изучение структуры программы и способов адресации мп 8086
- •Домашняя подготовка
- •Лабораторное задание
- •Варианты задания
- •Контрольные вопросы
- •Теоретическая часть
- •Способы адресации и оптимизация программ
- •Строковые команды
- •Сканирование строки.
- •Загрузка регистра из строки.
- •Сегментная структура программ (структура и образ памяти программы .Exe).
- •Двоично-десятичные числа
- •Лабораторная работа № 2. Организация доступа к дискам в режиме ms dos и анализ системных ошибок.
- •Домашняя подготовка
- •Лабораторное задание
- •Варианты заданий
- •Контрольные вопросы
- •Теоретическая часть
- •Лабораторная работа № 3. Организация прерываний и резидентные программы.
- •Домашняя подготовка
- •Лабораторное задание
- •Контрольные вопросы
- •Варианты задания
- •Теоретическая часть (См. Также разделы 1.3 и 2.4)
- •3Организация прерываний и резидентные программы.
- •Резидентные программы
- •Механизм прерываний
- •Структура и образ памяти программы .Сом
- •Примеры резидентных программ
- •Лабораторная работа № 4. Системное время в компьютерах ibm pc
- •Варианты задания
- •Домашняя подготовка
- •Контрольные вопросы
- •Теоретическая часть
- •4 Системное время в компьютерах ibm pc
- •Измерение частоты при помощи rdtsc
- •Назначение каналов таймера в ibm pc
- •Библиографический список
- •Приложение Функции ms dos для выполнения лабораторных работ
- •Установка вектора прерывания
- •Чтение вектора прерывания
- •Завершение программы
- •Создание файла
- •Закрытие файла
- •Чтение из файла
- •Очистка экрана
- •Дополнительные средства ассемблера
Строковые команды
В составе команд процессора МП 86 имеется группа команд, предназначенных для операций со строками символов или чисел, т. е., по существу, с массивами произвольных данных. Таких команд всего 5:
movs - пересылка строки;
cmps - сравнение строк;
seas - поиск в строке заданного элемента (сканирование строки);
lods - загрузка из строки регистров АХ или AL;
stos - запись элемента строки из регистров АХ или AL.
Команды имеют общие черты:
они выполняются процессором в предположении, что адрес строки-источника находится в регистрах DS:SI, а адрес строки-приемника в ES:DI;
при однократном выполнении они обрабатывают только один элемент, а для обработки строки должны предваряться префиксом повторения;
в процессе обработки элементов строки регистры SI и DI автоматически смещаются по строке вперед (если DF=0) или назад (если DF=1);
каждая команда имеет модификации для работы с байтами или словами (например, movsb и movsw).
Рассмотрим сначала особенности использования строковых команд на простых формальных примерах.
Пересылка (копирование) строки байтов
;В сегменте данных |
|
src db 10,20,30,40,50 |
;Строка-источник |
dest db 5 dup (?) |
;Строка-приемник |
;В сегменте команд |
|
mov AX, data |
;Обычная инициализация |
mov DS, AX |
;регистра DS |
mov SI, offset sourc |
;DS:SI →src |
push DS |
;DS в стек |
pop ES |
;из стека в ES, теперь ES=DS |
mov DI, offset dest |
;ES=DI → dest |
cld |
;DF=0, движение по строке вперед |
mov CX, 5 |
;число пересылаемых байтов |
rep movsb |
;Собственно пересылка |
В этом примере команда movsb использована с префиксом повторения rep (repeat, повторять), который фактически заставляет процессор выполнить команду movsb число раз, равное содержимому регистра СХ, т. е. в данном случае переслать 5 байт.
Мы видим, что перед использованием команды movsb надо выполнить целый ряд предварительных действий:
поместить в регистры DS и ES сегментные адреса источника и приемника, а в регистры SI и DI - их смещения;
с помощью команды сld (clear direction, сбросить направление) сбросить флаг процессора DF;
в регистр СХ заслать число пересылаемых байтов.
После этого одна команда movsb с префиксом повторения rep выполняет операцию копирования сколь угодно длинной последовательности байтов (практически до 32 Кбайт, если и источник и приемник находятся в одном сегменте) на новое место.
Сравнение двух строк
;В сегменте данных |
sourc db 'MYFILE01 .~AT' ;Сравниваемая строка |
fname db 'MYFILE01.DAT' ;Эталон |
;В сегменте команд |
mov AX, data |
mov DS, AX |
mov SI, offset sourc |
push DS |
pop ES |
mov DI, offset fname |
cld |
mov CX, 12 |
repe cmpsb |
jne no |
yes : . . . |
no : . . . |
Сравнение пары строк осуществляется с помощью команд cmps, cmpsb и cmpsw. Префикс repe (repeat while equal, повторять, пока равно), использованный в этом примере, заставляет процессор выполнять сравнение последовательных элементов строк, пока эти элементы равны, т. е. до тех пор, пока не обнаружится пара различающихся элементов. Если все элементы оказываются попарно одинаковыми, сравнение выполняется СХ раз, а после завершения цикла сравнения флаг нуля ZF устанавливается в 1. Если же в какой-то паре элементы оказались разными, цикл сравнения заканчивается, а флаг ZF устанавливается в 0 (отсутствие равенства операндов). Команда jne (или jnz) позволяет проанализировать результат сравнения (в сущности, последней сравниваемой пары элементов) и перейти на соответствующую метку при обнаружении неравенства строк. В случае равенства всех СХ пар элементов команда jne не срабатывает и выполняется следующее за jne предложение программы. В приведенном примере сравниваемые строки различаются в 10-й паре байтов, поэтому после сравнения 10-й пары (символов D и ~) выполнение команды cmpsb "досрочно" завершится со сброшенным флагом ZF и сработает команда jne, передав управление на метку nо.