
- •Введение
- •Цели и задачи курса
- •1. Общие сведения о вычислительных машинах и вычислительных системах
- •1.1. Основные понятия и определения
- •1.2. Классификация эвм по назначению и типу
- •1.3. Типы эвм
- •1.4. Основные принципы организации вычислительных машин и систем
- •1.5. Основные характеристики вычислительных машин и систем
- •1.5.1 Стоимость и цена аппаратного обеспечения
- •1.5.2. Производительность вычислительных машин и систем
- •Контрольные вопросы
- •2. Фукциональный состав и назначение основных устройств вм
- •2.2. Назначение шин, шина с тремя состояниями
- •2.3. Назначение устройств ввода-вывода, способы информационного обмена
- •Контрольные вопросы
- •3. Организация процессоров
- •3.1. Введение в функциональную организацию процессора
- •3.2. Операционный блок
- •3.3. Блок управления
- •3.4. Устройства управления процессора
- •3.4.1. Классификация уу
- •3.4.2. Аппаратные уу
- •3.4.3. Микропрограммные уу
- •3.5. Интерфейсный блок
- •3.6. Назначение стека
- •Контрольные вопросы
- •4. Система команд и адресация данных
- •4.1. Группы команд
- •4.2. Адресация операндов
- •4.3. Методы адресации
- •5. Память вычислительных машин
- •5.1. Иерархическая организация системы памяти
- •5.2. Иерархическая структура зу
- •5.3. Основные характеристики зу
- •5.4. Организация связи оп с процессором
- •5.5. Ассоциативные зу
- •Контрольные вопросы
- •6. Принципы обмена данными в вычислительных машинах. Интерфейсы вычислительных машин, организация прерываний
- •6.1. Шины
- •6.1.1. Синхронная шина
- •6.1.2. Пересылка данных за несколько тактов
- •6.1.3. Асинхронные шины
- •6.1.4. Заключительные замечания
- •6.2. Назначение и классификация шинных интерфейсов
- •6.3. Организация и обмен данными между периферийными устройствами и вычислительным ядром системы
- •6.4. Организация прерываний
- •6.4.1. Программные прерывания
- •Команда int
- •6.4.2. Обработка прерываний
- •6.4.3 Таблица векторов прерываний
- •6.4.4. Запуск обработчиков прерываний
- •6.5. Последовательная передача данных
- •7. Вычислительные системы параллельной обработки данных
- •7.1. Параллельная обработка как архитектурный способ повышения производительности
- •7.2. Параллелизм и конвейеризация – способы параллельной обработки данных
- •7.2.1. Параллельная обработка данных (параллелизм)
- •7.2.2. Конвейеризация
- •7.3. Классификация архитектур вычислительных систем
- •7.4. Мультипроцессоры и мультикомпьютеры
- •7.5. Классификация мультипроцессорных систем по способу организации основной памяти
- •7.6. Закон Амдала (эффективность параллельных программ)
- •8. Компьютер ibm pc и операционная система ms dos
- •8.1.Архитектурные особенности процессоров семейства ia-32
- •8.2. Организация памяти компьютера ibm pc, работающего под управлением ms dos
- •Видеопамять
- •Пзу bios
- •Системные ресурсы компьютера
- •8.3. Основы программирования на языке Ассемблера
- •8.3.1. Выполнение программ
- •8.3.2. Написание, компиляция и отладка программы
- •8.3.3. Дополнительные средства ассемблера
- •9. Темы заданий для контрольной работы
- •Тема 1. Архитектура процессора Intel 8086.
- •Контрольные вопросы
- •9.1. Аппаратная модель процессора 8086
- •Программная модель процессора
- •Тема 2. Структура ехе- и сом- программы. Вывод на экран.
- •9.2. Структура программы на языке Ассемблера.
- •9.3. Вывод информации на экран
- •Тема 3. Циклы, ввод с клавиатуры.
- •Тема 4. Ввод чисел. Перевод чисел в различные системы счисления.
- •9.4. Перевод чисел в различные системы счисления
- •Тема 5. Работа с прерываниями: перехват и восстановление.
- •Варианты задания
- •Контрольные вопросы
- •Тема 6. Программирование таймера 8254 и генерация звука
- •Программирование звукового канала таймера.
- •9.7. Инициализация таймера
- •9.8. Назначение каналов таймера в ibm pc
- •9 .9. Генерация тона.
- •9.10. Варианты задания
- •Тема 7. Ответы на контрольные вопросы по лекционному курсу
- •Вариантов заданий Таблица 9.4
- •Литература
Тема 3. Циклы, ввод с клавиатуры.
Цель работы: Получение навыков организации циклических структур в ассемблерных программах. Ввод символов с клавиатуры.
Задание: Разработать программу, ввода строковых данных с клавиатуры. В веденной строке удалить пробелы, все строчные символы «а» заменить на прописные «А» и вывести результирующую строку на экран.
Циклы в ассемблерных программах. Организовать циклическую структуру в ассемблерной программе можно двумя способами. Во-первых, используя команды сравнения (СМР) и передачи управления (Jcc), и, во-вторых, используя специальные команды организации циклов (LOOP).
Команда сравнения СМР сравнивает два числа, вычитая второе из первого, также как и команда SUB, но не сохраняет результат. После выполнения команды флаги состояния устанавливаются в соответствии с результатом операции.
Команды перехода можно разделить на две группы: команды условного и безусловного перехода. Безусловный переход - это такой переход, который передает управление без сохранения информации возврата всякий раз, когда выполняется. Ему соответствует команда JMР, имеющая двухбайтное смещение.
Условный переход проверяет текущее состояние регистра флагов, чтобы определить, передать управление или нет. Все условные переходы имеют однобайтовое смещение.
Ниже приведен фрагмент программы, вычисляющей в цикле сумму цифр от 0 до 9.
MOV АН, 0 ;занести в АН первую цифру «0»
MOV AL, 0 ;подготовить регистр результата
met:
ADD AL, АН ;прибавить к результату очередную цифру из AH
INC АН ;увеличить АН на единицу
СМР АН,10 ;сравнить значение в АН со значением «10»
JNE met ;если АН#10 то осуществить переход на МЕТ
В приведенном примере в качестве счетчика используется регистр АН и необходимо на каждой итерации цикла самостоятельно производить инкремент счетчика и его сравнение с заданной величиной 10. Для упрощения подобных ситуаций в ассемблере предусмотрены специальные команды для организации циклов. Все команды цикла используют регистр СХ в качестве счетчика цикла. Простейшая из них - команда LOOP. Она в конце каждой итерации уменьшает содержимое СХ на 1 и передает управление на метку (указанную в команде), если содержимое СХ не равно 0. Если вычитание 1 из СХ привело к нулевому результату, выполняется следующая команда.
Ниже приведен фрагмент программы, решающий описанную выше задачу, используя команды организации циклов.
MOV АН, 0 ;занести в АН первую цифру «0»
MOV AL, 0 ;подготовить регистр результата
MOV СХ, 10 ; количество суммируемых цифр
met:
ADD AL, АН ;прибавить к результату очередную цифру из AH
INC АН
LOOP met ;если СХ#0 то осуществить переход на МЕТ
Ввод с клавиатуры. Процесс ввода информации в ассемблерных программах осуществляется аналогично выводу:
- в регистр АН заносится номер функции ввода;
- инициируется прерывание, после выполнения, которого определенные регистры процессора содержат либо введенную информацию, либо адрес буфера с введенной информацией.
Ниже описан ряд функций прерывания 21h, используемых для ввода информации с клавиатуры.
Функция 01h - ввод с клавиатуры.
Вход: AH=02h
Выход: AL= символ, полученный с клавиатуры
Описание: Считывает (ожидает) символ со стандартного входного устройства. Отображает этот символ на стандартное выходное устройство (эхо).
Ввод расширенных клавиш ASCII (F1- F12. PgUp, и т.п.) требует двух обращений к этой функции. Первый вызов возвращает AL=0. Второй вызов возвращает в AL расширенный код ASCII.
функция 07h
Нефильтруемый консольный ввод без эха.
Вход: AH=07h
Выход: AL= символ, полученный с клавиатуры
Описание: Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. Не фильтрует. Не проверяет на Ctrl-Break, backspace и т.п. Необходимо вызывать дважды для ввода расширенного символа ASCII.
функция 08h
Консольный ввод без эха.
Вход: AH=08h
Выход: AL= символ, полученный с клавиатуры
Описание: Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. При обнаружении Ctrl-Break выполняется прерывание INT 23H. Необходимо вызывать дважды для ввода расширенного символа ASCII.
функция 0Ah
Буферизированный ввод строки.
Вход: AH=0Ah
В5:БХ=адрес входного буфера (смотри ниже)
Выход: буфер содержит ввод, заканчивающийся символом CR (ASCII OdH)
Описание: При входе буфер по адресу DS:DX должен быть оформлен следующим образом:
max |
7 |
7 |
7 |
7 |
7 |
7 |
|
МАХ - максимально допустимая длина ввода (от 1 до 254)
При выходе буфер заполнен данными следующим образом:
max |
len |
Т |
Е |
X |
т |
|
Odh |
LEN - действительная длина данных без завершающего CR (здесь - 0dH).
Символы считываются со стандартного ввода вплоть до CR (ASCII 0dH) или до достижения длины МАХ-1. Если достигнут МАХ-1, включается консольный звонок для каждого очередного символа, пока не будет введен возврат каретки CR (нажатие Enter). Второй байт буфера заполняется действительной длиной введенной строки, не считая завершающего CR. Последний символ в буфере - всегда CR (который не засчитан в байте длины). Символы в буфере (включая LEN) в момент вызова используются как «шаблон».
Функция 0Сh - ввод с очисткой
Вход: AH=0ch
AL= номер функции ввода (01Н, 06Н, 07Н, 08Н или 0аН)
Выход: нет
Описание: Очищает буфер опережающего ввода стандартного ввода, а затем вызывает функцию ввода, указанную в AL. Это заставляет систему ожидать ввод очередного символа.
Следующие значения допустимы в AL: 01H - ввод с клавиатуры; 06Н – ввод с консоли; 07Н - нефильтрующий без эха; 08Н - ввод без эха;
0аН - буферизованный ввод.
Приведенный ниже фрагмент программы иллюстрирует буферизированный ввод строки:
MOV АН, 0АН ;занесение в АН номера функции
LEA DX, BUF ;загрузка DX адресом буфера BUF
INT 21H
BUF DB 30,00,30 DUP ('$'),'$'
При организации буфера BUF (размер буфера 30 байт), он весь заполняется символами «$», что удобно, если введенную строку в дальнейшем необходимо выводить на экран или в файл (при условии, конечно, что для ввода буфер будет использоваться лишь однократно).