- •По курсу: ”организация эвм и систем”
- •Печатается по решению редакционно-издательского совета
- •Введение
- •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 для выполнения лабораторных работ
- •Установка вектора прерывания
- •Чтение вектора прерывания
- •Завершение программы
- •Создание файла
- •Закрытие файла
- •Чтение из файла
- •Очистка экрана
- •Дополнительные средства ассемблера
Сканирование строки.
Команды сканирования (seas, scasb и scasw) могут использоваться двояко. С префиксом repe команды, просматривая элементы строки, пропускают все вхождения искомого элемента в начале строки, останавливаясь на первом элементе, отличным от исходного. С префиксом repne (repeat while not equal, повторять, пока не равно) команды, наоборот, позволяют найти первое вхождение исходного элемента. Поскольку анализируемая строка считается приемником, она адресуется через регистры ES:DI. Искомый символ должен находиться в регистрах AL или АХ.
;В сегменте данных, адресуемых через ES |
tail db ' /S:3' |
;B сегменте команд |
mov DI, offset tail |
cld |
mov AL, ' ' ;Искомый символ - пробел |
mov CX, 80 ;Максимальная длина данной строки |
repe scasb ;Сканирование байтов, пока равно |
je blank ;Если в строке одни пробелы |
gotit: ... ;Символ найден, DI=tail+5 |
blank: ... |
В приведенном выше примере поиск осуществляется, пока байты строки равны исходному символу (пробелу). Команда scasb прекращает выполнение, как только она обнаруживает первый байт, отличный от пробела. При этом следует иметь в виду, что после “выхода” из команды scasb, регистр DI указывает на элемент массива, следующий за последним проанализированным, т. е. в данном случае на символ ‘S’(а не ‘/’). Если (как это скорее всего и будет) нам нужно знать положение в массиве первого элемента, отличного от искомого, содержимое DI следует уменьшить на единицу.
; в сегменте данных, адресуемом через ES |
word dw 10,100,234,183,16789,0,15644,... |
; в сегменте команд |
mov DI, offset words ;ES:DI → words |
сld ;Сканирование вперед |
mov AX, 0 ;Искомое число |
mov CX,1000 ;Количество слов в массиве |
repe scasw ;Сканирование слов, пока не равно |
jne zeros ;Если в массиве нет нулей |
gotit: ... ;Первый 0 найден, DI = words+12 |
zeros: … |
В приведенном выше примере поиск осуществляется, пока элементы массива не равны искомому числу (0). Команда scasw прекращает выполнение, как только она обнаруживает искомый элемент. При этом следует иметь в виду, что после “выхода” из команды scasw регистр DI указывает на элемент массива, следующий за последним проанализированным, т. е. в данном случае на число 15644. Если (как это, скорее всего и будет) нам нужно знать положение в массиве первого элемента, отличного от искомого, содержимое DI следует уменьшить на 2.