- •Содержание
- •1. Введение
- •2. Представление информации в эвм
- •2.1. Системы счисления
- •2.1.1. Основные понятия
- •2.1.2. Системы счисления, используемые в вычислительной технике
- •2.1.3. Перевод чисел из одной системы счисления в другую
- •2.2. Типы данных
- •2.2.1. Типы данных, используемых в эвм
- •2.2.2. Константы
- •2.2.3. Логические величины
- •2.2.4. Символьные величины
- •2.2.5. Целые числа
- •2.2.6. Вещественные числа
- •2.3. Форматы команд
- •3. Основы построения эвм
- •3.1. Немного истории
- •3.2. Особенности архитектуры современной вычислительной машины
- •3.2.1. Основные понятия
- •3.2.2. Структурная организация машины
- •3.3. Вариант структуры микроЭвм
- •3.3.1. Общая структура машины
- •3.3.2. Процессор
- •3.3.3. Оперативная память
- •3.3.4. Системная память
- •3.3.5. Система адресации
- •3.3.6. Виртуальная память
- •3.3.7. Таймер
- •3.3.8. Внешние устройства
- •3.3.9. Принципы обмена информацией с внешними устройствами
- •Некоторые вопросы программного обеспечения
- •4.1. О программном обеспечении
- •4.2. Процесс компиляции
- •4.3. Компиляция с языка Ассемблера
- •5. Особенности архитектуры эвм типа ibm-рс
- •5.1. Введение
- •5.2. Исторический обзор процессоров клона 80х86
- •5.3. Классификация процессоров Intel 80х86
- •5.4. Особенности периферийных устройств ibm-pc
- •5.5. Характеристики компьютера
- •5.6. Сегментная адресация
- •5.7. Особенности распределения адресного пространства в компьютерах ibm-pc
- •5.7.1. Стандартная оперативная память (Conventional memory)
- •5.7.2. Область верхней памяти (Upper Memory Area ‑ uma)
- •5.7.3. Область высшей памяти (High Memory Area ‑ hma)
- •5.7.4. Расширенная память (eXtended Memory Specification — xms)
- •5.7.5. Дополнительная память (Expanded Memory Specification — ems)
- •5.8. Обмен информацией с периферийными устройствами
- •5.8.1. Порты ввода/вывода
- •5.8.2. Использование адресного пространства памяти
- •5.8.3. Прямой доступ к памяти
- •5.9. Прерывания
- •5.10. Начальный запуск эвм
- •5.11. Регистры процессора
- •5.11.1. Регистры общего назначения
- •5.11.2. Указатель инструкций
- •5.11.3. Регистр флагов и управляющие регистры
- •5.11.4. Регистры сегментов и селекторов
- •5.11.5. Системные адресные регистры
- •5.11.6. Регистры отладки
- •5.11.7. Регистры тестирования и модельно-специфические регистры
- •6. Debug — средство непосредственной коррекции и отладки загрузочного кода программ
- •6.1. Введение
- •6.1.1. Команды без аргумента
- •Input I порт
- •6.1.2. Команды обращения к ячейкам
- •15D0:010c bfffff mov di,ffff
- •15D0:010f 57 push di
- •6.1.3. Команды запуска программы
- •6.1.4. Команды просмотра и модификации регистров
- •7. Методы адресации
- •7.1. Введение
- •7.2. Регистровый метод адресации
- •159B:0101 1e push ds
- •159B:0101 1e push ds
- •159B:0101 1e push ds
- •7.3. Непосредственный метод адресации
- •7.4. Прямая адресация
- •7.5. Косвенная регистровая адресация
- •159B:0100 not word ptr [bx]
- •159B:0102 e000 loopnz 0104
- •7.6. Адресация по базе
- •7.7. Косвенная регистровая адресация с индексированием
- •159B:0102 0e push cs
- •7.8. Адресация по базе с индексированием
- •7.9. Относительная адресация
- •7.10. Косвенная регистровая адресация с масштабированием
- •7.11. Адресация по базе с индексированием и масштабированием
- •8. Синтаксис ассемблера
- •8.1. Директивы определения данных
- •8.1.1. Определение переменных
- •Cимвольные строки
- •Числовые данные
- •Примеры:
- •8.2. Выражения
- •8.3. Непосредственные операнды
- •8.4. Структуры
- •8.5. Сегменты
- •8.6. Модели памяти и упрощенные директивы определения сегментов
- •8.7. Упрощенные директивы описания сегментов
- •8.8. Создание программы на ассемблере
- •8.9. Получение выполняемого файла
- •9. Система команд
- •9.1. Классификация команд по операндам
- •9.2. Классификация команд по действию
- •9.2.1. Команды пересылки данных
- •9.2.2. Арифметические команды
- •8.2.3. Команды манипуляции битами
- •9.2.4. Управление центральным процессором
- •9.2.4. Команды передачи управления
- •Iret, iretd
- •9.3. Краткий список команд с используемыми операндами
- •9.3.1. Условные обозначения:
- •9.3.2. Инструкции пересылки данных
- •9.3.3. Арифметические, логические и инструкции сдвига
- •9.3.4. Инструкции обработки строк
- •9.3.5. Инструкции передачи управления
- •9.3.6. Инструкции управления процессором
- •Литература
Некоторые вопросы программного обеспечения
4.1. О программном обеспечении
Под программным обеспечением (ПО) будем понимать совокупность программ, обеспечивающих решение на ЭВМ поставленных задач. В самом общем виде в составе ПО можно выделить следующие составные части:
системное обеспечение — операционная система; специальное ПО — набор программ из заданного класса, необходимых для решения задач пользователя;
прикладное обеспечение — набор задач пользователя.
Применительно к изучаемой ПЭВМ под ОС будем понимать ПО, обеспечивающее управление ресурсами, внешними устройствами, организацию диалога с оператором и т.д. Под специальным ПО будем понимать набор стандартных прикладных программ (трансляторы языков программирования, текстовые редакторы и т.д.) и т.п., под пользовательским ПО — набор прикладных программ.
Рассмотрим кратко особенности ПО самой машины:
в ПЗУ микроЭВМ заложена программа, обеспечивающая возможность занесения данных в CMOS, обеспечивающая загрузку ОС и содержащая некоторый набор тестов ЭВМ и стандартных ВУ;
широко используются различные дисковые операционные системы: MS-DOS, различные клоны UNIX (XENIX (устарела), LINYX, FreeBSD, BSDi и т.д.), Windows, DR-DOS, PC-DOS, OS/2, FreeDOS и т.п. Они построены по модульному принципу, имеют монитор и набор системных программ, драйверов и утилит; различаются своими возможностями, организацией работы, требуемой памятью в ОЗУ и на дисках;
в состав ОС входят трансляторы и интерпретаторы различных языков программирования. В настоящее время самыми распространенными языками являются Бейсик (BASIC), Паскаль (Pascal), Си (C) и ряд VISUAL-версий.
Программирование может производиться в машинных кодах, на машинно-ориентированных или алгоритмических языках низкого или высокого уровня.
К языкам низкого уровня следует отнести машинный язык — систему команд. Программирование на этом уровне ведется в кодах, что очень сложно воспринимается человеком. Однако именно на этом уровне программа требует минимум машинных ресурсов, в частности памяти.
Следующий уровень языков — языки символьного кодирования, суть которых состоит в том, что каждому машинному коду ставится в соответствие определенный набор символов из общепринятого алфавита (английский язык). Языки этого уровня — машинно-ориентированные, т.е. ориентированные на систему команд данной машины. Язык воспринимается значительно легче, чем машинные коды, но предоставляет пользователю мало дополнительных удобств.
Получили распространение два направления языков данного уровня, практически близких к единому стандарту: Turbo ASseMbler (фирмы Borland International), Macro ASseMbler (фирмы Microsoft) and NASM.
В них используются средства формирования макрокоманд и макроопределений — сложных программных структур, воспринимаемых пользователем как команды машины.
К языкам высокого уровня относятся Фортран, PL/M, Паскаль, Бейсик, Forth, C, Ада. Это процедурно-ориентированные языки, каждый из которых предназначен для решения определенного класса задач.
Так, язык Фортран используется в основном при решении научно-технических задач, отличается строгостью конструкций и имеет самый большой набор стандартных программ по различным аспектам науки (физика, математика, статистика, биология, геология и т.п.).
Язык программирования PL/1. Обладает широкими возможностями и применяется в основном для решения экономических задач обработки деловой информации; имеет в своем распоряжении широкий набор типов данных, а также возможности работы со сложными структурами.
Язык Паскаль появился сравнительно недавно. В нем сконцентрированы лучшие черты языков-предшественников. Текст на языке Паскаль выражает математическую сущность алгоритма в очевидной и легко воспринимаемой форме. Кроме того, он полностью удовлетворяет требованиям структурного программирования. Классическая версия неудобна для использования, однако более поздний вариант — Turbo Pascal — гораздо более гибкий и весьма удобный язык. Особое удобство в работе с ним дает мощный встроенный редактор программных текстов и интегрированный отладчик. Помимо того, может использоваться внешний отладчик, позволяющий в процессе уменьшить шаг отладки с одного шага Паскаля до одной команды процессора. Также есть возможность использовать «чистый» компилятор — без экранного редактора и отладчика, что увеличивает скорость компиляции и экономит память.
Бейсик предназначен для решения математических и инженерных задач, достаточно прост для изучения и понимания, обладает возможностями, позволяющими программировать большой круг задач. Язык Бейсик — язык безалаберных программистов, он крайне неприхотлив к синтаксису и позволяет быстро создать любую несложную программу.
GWBASIC — единственный транслятор BASIC`а, ведущий диалог с пользователем посредством командной строки. Быстродействие программ, исполняющихся под GWBASIC`ом, приблизительно в 1,3 раза превышает скорость программ, транслированных TurboBasic`ом. Формат команд и редактор командной строки сильно напоминают MSX Basic (Ямаха). Размер GWBASIC около 60-70 Кб.
TurboBasic — компилятор BASIC`a. Имеет встроенный экранный редактор, по скорости уступает интерпретатору GWBASIC, позволяет создавать модули. Объем: 250 Кб, из них 50 Кб — HELP. Пустой цикл на 40000 итераций исполняет за 2 с при 16 МГц тактовой частоты процессора (AT-80286). Имеет приличный набор ошибок, периодически ведущих к «зависанию» программ.
PowerBasic — компилятор BASIC`а. Вероятно, является продолжением TurboBasic. Внешне сильно напоминает TurboPascal 5.0. Имеет более сильный (по сравнению с TurboBasic`ом) отладчик. Создает несколько более компактный исполняемый код. Пустой цикл в 40 000 итераций исполняет за 2 c при 16 МГц (AT-80286) тактовой частоты процессора. Имеет контекстный HELP по ключевым словам BASIC. Размер 300 Кб, из них HELP — 100 Кб.
QuickBasic. Интерпретатор. Пустой цикл в 40000 итераций исполняет за 11 c при 16 МГц тактовой частоты процессора. При редактировании текста программы каждой процедуре и функции отводится собственное окно редактирования, и она может иметь локальные параметры. Имеется контекстный HELP, включающий описание операторов. Размер 400 Кб, из них HELP — 150. Существует так же версия компилятора этого диалекта. Синтаксис ряда операторов уже очень отличается от предыдущих трансляторов, что отражено в HELP`е. Есть возможность вести диалог с командной строки (за исключение ввода программы).
Все BASIC`ки, имеющие встроенный редактор, не требуют указания номеров строк и имеют три типа циклов — ДО (until), ПОКА (while) и ДЛЯ (for), а так же много других возможностей