- •ПЕРЕЧЕНЬ СОКРАЩЕНИЙ
- •ПРЕДИСЛОВИЕ
- •Регистр флагов
- •Программа вывода строки
- •Примеры резервирования памяти
- •Регистровая адресация
- •Непосредственная адресация
- •Прямая адресация
- •Косвенная регистровая адресация
- •Адресация по базе
- •Пример программы задержки выполнения
- •Сложение, вычитание, умножение, деление
- •Рис. 15.1. Структурная схема ввода данных с клавиатуры
- •Пример программы для ввода с клавиатуры
- •Пример посимвольного ввода
- •Сортировка выбором
- •Сортировка вставками
- •Использование параметров в макрокомандах
- •Библиографический список
- •Приложение 1
- •Перечень команд
- •Приложение 2
OBh – проверка состояния стандартного устройства ввода (наличия символов в буфере);
OCh – сброс входного буфера и ввод; используется, когда необходимо очистить буфер ввода. Использование этой функции позволяет убрать из кольцевого буфера весь мусор от случайного нажатия и в программу пользователя будут вводиться только те данные, которые оператор начнет вводить после этого запроса.
Функции 01, 06, 07, 08 при каждом вызове вводят один символ из
буфера.
Пример посимвольного ввода mov ah,01h
int 21h cmp al, ‘E’
je outprog // на завершение, если нажата Е jmp a1
……………………………………
пример ввода символа с очисткой буфера
mov ah,0Сh //ввод с очисткой буфера mov al,01h
int 21h cmp al, ‘Q’
je outprog //на завершение, если нажата Q jmp a1
15.3. РАБОТА С КЛАВИАТУРОЙ НА УРОВНЕ BIOS
Работа с клавиатурой на уровне BIOS ( int 16h) позволяет считывать двухбайтовые коды, поступающие в кольцевой буфер (скен и ASCII) и анализировать слово флагов клавиатуры. Используются следующие номера функций:
1.00h – чтение двух байтов кода из входного буфера.
2.01h – чтение состояния клавиатуры и двух байтов кода, при этом флаг ZF равен 0, если в кольцевом буфере есть символ.
3.02h – позволяет читать флаги клавиатуры.
Система возвращает: AH – скен-код
AL – ASCII-код
74
Пример использования посимвольного ввода
………………………
mov ah,00h int 16h cmp al, ‘E’
……………………………..
16. ВЫВОД ИНФОРМАЦИИ НА ЭКРАН ПО ПРЕРЫВАНИЯМ DOS И BIOS.
УПРАВЛЕНИЕ ЭКРАНОМ С ПОМОЩЬЮ ESC-ПОСЛЕДОВАТЕЛЬНОСТИ
В текстовом режиме изображение обычно состоит из 25 строк по 80 символов в строке. В памяти одновременно могут храниться несколько экранов, т. е. текстовых страниц. Программные средства обслуживания экрана включают в себя:
– драйвер базовой системы ввода-вывода BIOS, к которому можно обратиться с помощью прерывания int 10h (обеспечивает нижний уровень управления, т. е. вывод символов, работа с курсором, переключение режимов видеоадаптера);
– прерывание DOS ( int 21h), которое представляет более высокий уровень сервиса в текстовом режиме.
DOS представляет следующие возможности вывода.
1.Обращение к экрану как к файлу с помощью int 21h, функция
40h.
2.Использование группы функции DOS из диапазона от 1 до С (int
21h) для посимвольного вывода и вывода строк.
При обращении к экрану как к файлу используются предопределенные дескрипторы 1 или 2 (вывод ошибки).
Число выводимых символов указывается в CХ, адрес выводимой строки указывается в DХ, если в строке встречается Ctrl + z, вывод прекращается.
Дескриптор 1 обеспечивает перенаправление вывода, например, в файл.
Дескриптор 2 – вывод ошибки, не может быть перенаправлен и всегда связан с экраном.
75
Второй способ вывода на экран текстовой информации реализуется тремя функциями (используется 21 прерывание).
Функция 02 осуществляет вывод 1-го символа на экран. Код символа должен храниться в DL.
Функция 06 – прямой ввод-вывод. При использовании этой функции исключается комбинация ctrl + c, код символа должен быть в DL.
Функция 09 – вывод строки. Перед вызовом прерывания адрес
строки должен находиться в DХ, а строка сообщения должна заканчиваться символом $. В сообщения могут быть включены управляющие
коды и ESC-последовательности. Комбинация Ctrl + c осуществляет выход из программы.
УПРАВЛЕНИЕ ЭКРАНОМ ЧЕРЕЗ ESCПОСЛЕДОВАТЕЛЬНОСТИ
Группа ESC- последовательностей обеспечивает управление курсо-
ром. Если в символьной строке, выводимой на экран, встречается код клавиши ESC (27 или 1Вh), за которым следует символ [ , то последу-
ющие символы интерпретируются как команды управления экраном или клавиатурой.
Основные ESC последовательности:
ESC [2J – вызывает очистку экрана и перемещение курсора в левый верхний угол.
ESC [K – очистка строки от курсора до конца строки.
ESC [стр; поз. H – установка позиции курсора. Первая координата Y-строка, вторая Х-столбец.
ESC [код A – перемещает курсор на заданное число (код) строк вверх.
ESC [код B – перемещает курсор на заданное число (код) строк вниз.
ESC [код С – перемещает курсор на код позиций вправо. ESC [код D – перемещает курсор на код позиций влево. ESC [6n – выводит текущие координаты курсора.
ESC [S – сохраняет текущие координаты курсора в специальном буфере.
ESC [U – восстанавливает сохраненные текущие координаты курсора.
ESC [ = кодh – выбор видеорежима.
76
ESC [код1, код2, код3m – позволяет управлять цветом выводимой информации. Код1 – символа, код2 – цвет фона, код3 – яркость или мерцание.
При этом можно использовать следующие коды: 0 – нормальное изображение 1 – выделение яркостью 4 – выделение подчеркиванием 5 – выделение мерцанием 7 – инверсное изображение
Цвет |
Символы |
Фон |
Черный |
30 |
40 |
Красный |
31 |
41 |
Зеленый |
32 |
42 |
Коричневый |
33 |
43 |
Синий |
34 |
44 |
Фиолетовый |
35 |
45 |
Бирюзовый |
36 |
46 |
Белый |
37 |
47 |
17. СОРТИРОВКА ОДНОМЕРНЫХ МАССИВОВ ВЫБОРОМ, ОБМЕНОМ, ВСТАВКАМИ
Сортировка заключается в перестановке элементов массива в порядке возрастания или убывания их значений. Методы сортировки, обладающие различной эффективностью при решении конкретных задач [9, 10], представлены ниже.
Сортировка выбором
Основана на определении наибольшего или наименьшего элемента, который переносится в начало или конец массива в зависимости от типа сортировки. Эта процедура применяется ко всем оставшимся элементам, кроме уже перемещенных, всего N – 1 раз. (N – количество элементов).
77
Например:
for j: = 1 to N-1 do begin // цикл по числу проходов
k: = N-j+1; // к – последний элемент в проверяемой части массива m: = k; // m-номер элемента с наибольшим значением
for i = 1 to N-j do // цикл сравнения оставшейся части массива if x[i]>x[m] then m: = i; // запоминаем значение m
b: = x[k]; x[k]: = x[m]; x[m]: = b; // перестановка end;
Полагается, что последний элемент, расположенный в сортируемой части массива, имеет наибольшее значение. Это условие проверяется для оставшейся части массива и запоминается номер элемента с наибольшим значением. Затем проводится перестановка наибольшего элемента с последним в проверяемой части массива. Далее процесс повторяется с уменьшением числа рассматриваемых элементов на единицу.
Сортировка обменом (метод пузырька)
Этот метод основан на последовательном сравнении пары соседних элементов x[i] и x[i + 1]. Если пара расположена не в требуемом порядке, то элементы переставляются. При сортировке по возрастанию после первого прохода массива от 1-го до последнего элемента на последнем месте окажется наибольший элемент массива. Дальше сортируется оставшаяся часть массива. С каждым очередным проходом наибольший элемент массива в оставшейся части будет занимать последнее место. Наибольшее число проходов N – 1, а число проверок при очередном проходе уменьшается на 1.
for j: = 1 to N-1 do // цикл по числу проходов
for i: = 1 to N-j do //сравнение элементов в оставшейся части if x[i]>x[i+1] then begin
b: = x[i]; x[i]: = x[i+1]; x[i+1]: = b; end;
78
