
- •Нижегородский государственный университет им. Н.И. Лобачевского
- •1.Предисловие
- •2.Замечания по терминологии
- •3.Кибернетика и информатика
- •4.Предпосылки информатики
- •4.1.Мечта человека об искусственном человеке
- •4.2.Усилители физической и умственной деятельности человека
- •4.3.Ключевые проблемы информатики
- •5.Формализация естественного языка как средства общения.
- •6.Формализация физических характеристик среды обитания
- •6.1.Дискретные и непрерывные множества
- •6.2. Понятия измерительной шкалы, числа и измерения
- •6.3.Натуральное число
- •6.4.Позиционная система счисления
- •6.5.Натуральная числовая прямая
- •6.6.Целые числа (положительные и отрицательные)
- •6.7.Вещественные числа
- •7.Формализация физических зависимостей
- •7.1.Функции
- •7.2.Элементарные функции
- •7.3.Элементарная алгебра, аналитические и численные вычисления
- •8.Аналоговые и цифровые вычислители
- •9.Простейшие вычислители
- •9.1.Аналоговые вычислительные линейки
- •9.2.Цифровой абак и русские счеты
- •9.3.Цифровые механические арифмометры
- •9.4.Хронология событий.
- •10.Аналитические машины Чарльза Беббиджа.
- •11.Формализация рассуждений
- •11.1.Логика рассуждений
- •11.2.Логические функции и алгебра логики
- •11.3.Алгебра логики и алгебра релейно - контактных схем
- •12.Накануне компьютерной эры
- •12.1. Зарождение цифровых систем управления
- •12.2.Перфокарточные сортировальные машины
- •12.3.Методология моделирования
- •13.Теоретические модели вычислений
- •13.1.Алгоритм и его свойства
- •13.2.Проблема слов в ассоциативном исчислении
- •13.3.Нормальный алгоритм Маркова
- •13.4.Рекурсивные функции
- •13.5.Машина Тьюринга
- •13.6.Равнодоступная адресная машина
- •14.Пионеры зарубежной компьютеризации
- •15.Становление информатики в России. Борьба за признание
- •16.Два типа электронных вычислительных машин
- •16.1.Аналоговая вычислительная машина (авм)
- •16.2.Цифровая электронная вычислительная машина (компьютер, эвм)
- •16.3.Аналог или цифра
- •17.Пионеры отечественной компьютеризации
- •18.Становление информатики в России. Начальный период
- •19.Оригинальные отечественные серийные эвм (компьютеры)
- •19.1.Эвм Стрела
- •Элементная база
- •Программное обеспечение
- •Описание машины
- •Технико-эксплуатационные характеристики
- •Особенности эвм
- •19.2.Семейство эвм "м-20"
- •Структура эвм
- •Элементная база
- •Программное обеспечение
- •Технико-эксплуатационные характеристики
- •Особенности машины
- •Об использовании эвм м-20
- •Описание машины
- •Элементная база
- •Программное обеспечение
- •Технико-эксплуатационные характеристики
- •Особенности эвм
- •19.3.Семейство эвм "бэсм"
- •19.3.1.Бэсм-1
- •Структура эвм
- •19.3.2.Бэсм-2
- •Структура эвм
- •19.3.3.Бэсм-4
- •Структура эвм
- •Элементная база
- •Программное обеспечение
- •Технико-эксплуатационные характеристики
- •19.4.Семейство эвм "Минск"
- •19.4.1.Минск-1
- •19.4.2.Минск-2
- •19.4.3.Минск -22
- •19.4.4.Минск-23
- •19.4.5.Минск-32
- •Описание машины
- •Программное обеспечение
- •Технико-эксплуатационные характеристики
- •Особенности эвм
- •19.5.Семейство эвм "Урал"
- •19.5.1.Урал-1, Урал-2, Урал-3, Урал-4
- •Описание машины
- •Элементная база
- •Программное обеспечение
- •Основные эксплуатационно-технические данные
- •Особенности эвм
- •19.5.2.Урал-11, Урал-14, Урал-16
- •Описание машины
- •Элементная база
- •Программное обеспечение.
- •Основные эксплуатационно-технические данные машины “Урал-11”
- •Особенности эвм
- •19.6.Эвм "Весна" и "Снег"
- •19.7.Эвм бэсм-6
- •Описание машины
- •Элементная база
- •Программное обеспечение
- •Технико-эксплуатационные характеристики
- •Особенности машины
- •19.8.Многопроцессорные вычислительные комплексы "Эльбрус"
- •Описание машины.
- •Элементная база
- •Программное обеспечение
- •Типовые комплектации
- •Производительность
- •19.9.Управляющие эвм
- •20.Эволюция элементарной базы и поколения эвм
- •20.1.Базисные логические элементы
- •20.2.Элементы регистровой памяти
- •20.3.Элементы памяти на магнитных сердечниках.
- •20.4.Интегральные схемы
- •20.5.Поколения эвм
- •21.Американская система ibm-360
- •22.Семейство Ряд "ес эвм"
- •22.1.Хронология создания
- •22.2.Ес эвм. Крупнейший промах или всеобщее счастье?
- •23.Автоматизация программирования
- •23.1.От двоичных кодов к ассемблерам - языкам символьного кодирования
- •Ассемблеры
- •Программы - загрузчики
- •23.2.Языки программирования высокого уровня
- •23.3.Трансляция программ
- •24.Первые компьютеры Сарова
- •25.Начало компьютеризации Нижегородского госуниверситета
- •26.Они были первыми
- •26.1.Конрад Цузе
- •26.2.А лан Тьюринг
- •26.3.Джон Маулчи и Джон Эккерт
- •26.4.Джон фон Нейман
- •26.5.А ксель Берг
- •26.6.В иктор Глушков
- •26.7.Сергей Лебедев
- •26.8.Исаак Брук
- •26.9.Николай Матюхин
- •26.10.Михаил Карцев
- •26.11.Юрий Базилевский
- •26.12. Башир Рамеев
- •26.13.Георгий Лопато
- •26.14. Всеволод Бурцев
- •27.Приложения
- •27.1.Основные черты кибернетики
- •27.1.1.Общенаучное значение кибернетики
- •27.1.2.Электронные счетные машины и нервная система
- •27.1.3.Прикладное значение кибернетики
- •27.2."Сигнал" Игоря Полетаева
- •27.3.Хронология компьютеростроения
- •Литература
- •Оглавление
23.Автоматизация программирования
Аппаратура компьютера проектируется из соображений оптимальности технических решений и эффективности обработки данных. В силу этого, как самые первые, так и современные компьютеры, требуют представления данных и команд программы в виде двоичных кодов, т.е. последовательностей нулей и единиц. Очевидно, что программирование в двоичных кодах является весьма кропотливым и малоэффективным занятием. В силу этого, развитие вычислительных технологий, практически с самого первого дня изобретения компьютеров, идет по двум направлениям: совершенствование аппаратуры вычислительных устройств; совершенствование средств автоматизации разработки и исполнения программ.
Представление данных и команд в памяти компьютера одинаково (двоичная последовательность), поэтому иногда мы будем говорить об информации, с которой имеет дело компьютер, подразумевая под этим как данные, так и программу.
23.1.От двоичных кодов к ассемблерам - языкам символьного кодирования
В конце концов, способ представления данных в оперативной памяти компьютера программиста не волнует. Но ему не безразлично, в каком виде он должен вводить исходные данные и получать результаты вычислений.
Нашлись "реформаторы", предложившие перевести школьное обучение на двоичную систему представления чисел. Их аргументация была проста и привлекательна:
с точки зрения теории вычислений совершенно безразлично, в какой системе кодировать числа;
мы, старики, худо - бедно перемучаемся, зато наши дети будут с компьютером "на ты".
Однако если подумать, то эту проблему можно решить без революции в образовании. Надо просто учесть, что перевод чисел из десятичной системы в двоичную систему и обратно реализуется по формальным алгоритмам. Следовательно, можно сделать программы перевода из десятичной системы в двоичную систему и обратно, которые будет выполнять компьютер и которые позволят вводить и выводить числа в десятичной системе счисления.
Уже здесь появляется специфика двухуровневого представления данных и программ в системе человек - компьютер:
на внешнем уровне необходимо представлять данные и программы в виде, максимально удобном для человеческого восприятия (графика, тексты, таблицы и т.д.);
такое представление данных и программ, как правило, неэффективно с точки зрения ее обработки компьютером;
на внутреннем уровне данные и программы представляются в виде эффективном для их обработки (двоичные коды, списковые структуры, структуры данных);
как следствие, необходимы специфические программы –трансляторы , реализующие автоматическое преобразование представления данных и программ с человеческого уровня на машинный уровень и обратно.
Замечание. Программы трансляторы рассматривают и обрабатывают программы вычислений как данные.
Ассемблеры
Здесь и далее, говоря о языке, мы будем понимать процедурный язык программирования, т.е. формальную знаковую систему, позволяющую описывать последовательность шагов любого алгоритма обработки данных.
Для компьютера каждого типа, на стадии разработки его архитектуры, фиксируется система машинных (двоичных) двоичных команд. Каждая такая команда представляет собой определенным образом форматированную двоичную последовательность – предписание для компьютера на выполнение вполне определенного действия. Система команд вычислительной машины называется также машинным (двоичным) языком программирования. Машинная(двоичная) программа, состоит из последовательности машинных команд, и только такая машинная программа непосредственно интерпретируется, т.е. исполняется аппаратурой компьютера.
"Ручное" кодирование машинной программы чрезвычайно трудоемко и связано с появлением большого числа потенциальных ошибок. Поэтому проблема создания средств автоматизации программирования в виде языков более высокого уровня, чем машинный язык возникла на первых же шагах развития вычислительной техники.
В самом простейшем варианте решение было очевидным - обозначить поля команды символами, понятными человеку, и получить в результате предписание на выполнение действия в виде символьной строки.
Например, команду сложения можно обозначить следующим образом:
ADD 1001B,1010B,1011B ( 0)
где B - признак двоичного числа.
Такая команда предписывает вычислительной машине следующие действия: прочитать содержимое ячеек оперативной памяти с двоичными адресами 1001 и 1010, произвести над их содержимым операцию арифметического сложения и записать результат в ячейку оперативной памяти с двоичным адресом 1011.
Для более короткой записи команды, адреса лучше представлять в шестнадцатеричном коде:
ADD 9H,AH,BH, ( 0)
где H - признак шестнадцатеричного кода.
Каждая символьная строка, обозначающая машинную команду, называется мнемокомандой, а совокупность таких команд образует язык автокод (язык автоматического кодирования программы).
Дальнейшим развитием языка автокод является введение в его описательные возможности средств управления полуавтоматическим распределением оперативной памяти. Суть такого распределения памяти состоит в следующем:
ячейки и массивы ячеек можно обозначать символьными именами (адресами);
в адресных полях команды можно использовать эти символьные имена (адреса).
имеется псевдокоманда MEM, позволяющая установить соответствие символьного адреса и физического адреса;
имеется псевдокоманда CONST, позволяющая присвоить ячейке памяти с заданным символьным адресом конкретное символьное значение.
Таким образом, предписание (2) можно записать в следующем виде:
ЯЧЕЙКА Длина 9H; /Распределение памяти/ ( 0)
ЯЧЕЙКА Ширина AH; /Распределение памяти/
ЯЧЕЙКА Площадь BH; /Распределение памяти/
CONST Длина,12; /Присвоить значение/
CONST Ширина,15; /Присвоить значение/
УМНОЖИТЬ Длина, Коля, Любовь /Выполнить действие/
Толчком к дальнейшему развитию языка автокод послужило увеличение размеров программ. Большую программу можно быстрее и качественнее сконструировать, разбив ее на некоторое количество более или менее независимых сегментов. Это дает возможность разрабатывать и отлаживать сложную программу "по частям", а также использовать при разработке новой программы уже апробированные сегменты ранее разработанных программ. Разумеется, между сегментами допускаются формальные перекрестные ссылки, фактический вид которых не известен во время написания секций.
Более развитый язык автокод кроме множества мнемокоманд содержит также псевдокоманды, которые обеспечивают полуавтоматическое распределение памяти, связывание в единую программу совокупности сегментов, ввод исходных данных и другие полезные действия. Псевдокоманды не имеют аналога в системе машинных команд и реализуются программным путем в ассемблирующей системе (см. ниже).
Таким образом, язык автокод позволяет использовать при программировании все возможности машинного языка. Его основу составляют термины мнемонических обозначений операций и их операндов (ядро языка), а также других выполняемых операций (псевдокоманды). Это позволяет программисту ссылаться на внутренние регистры машины и адреса оперативной памяти, используя их символьное обозначение. Существенно, что автокоды позволяют описывать различные формы представления данных, обеспечивают автономное преобразование их, позволяют независимо транслировать отдельные программные модули и соединять их в единую программу, а также управлять распределением адресов памяти и документацией программы.
Очевидно, что для каждого семейства компьютеров существует свой уникальный язык автокод, определяемый системой машинных команд этого семейства.
Программа, записанная на языке автокод, более понятна человеку, чем машинная программа, но компьютер такую программу интерпретировать (выполнять) не может. Поэтому нужен переводчик, преобразующий (транслирующий) текст автокодной программы в текст машиной программы. На первых порах в качестве таких переводчиков выступали девочки - лаборанты, которые знали совокупность формальных правил (алгоритм) преобразования символьных текстов в двоичные. Но достаточно быстро были созданы ассемблеры (программные ассемблирующие системы), которые не менее успешно справлялись с этой рутинной работой.
Прежде всего, ассемблер реализует функции трансляции (перевода) с языка автокод на язык машинных команд. В качестве входного набора данных для ассемблера выступает программа, записанная на языке автокод, которая переводится в перемещаемую программу на машинном языке. Обычно таким языком является язык загрузчика. Различные секции автокодной программы транслируются независимо друг от друга, в результате чего получается множество объектных модулей, каждый из которых представлен на языке загрузчика.
После трансляции всех модулей работает программа загрузки, которая связывает множество объектных модулей в готовую машинную программу, загружает ее в оперативную память и запускает на выполнение.
Язык автокод, включающий в себя средства сборки программ из секций, принято называть также языком ассемблера.
Подводя итог, можно сказать что ассемблером (англ. assembler, от assemble - собирать, монтировать) называется компонента системного программного обеспечения, переводящая программу, написанную на автокоде (символьный модуль) в машинную программу (загрузочный модуль). Программа на автокоде представляется в командах, отражающих архитектуру конкретного типа компьютера. Помимо трансляции (перевода) важнейшей функцией ассемблера является сборка или связывание многих объектных модулей в единый загрузочный модуль.
Замечание. Часто можно слышать от того или иного программиста, что он "программирует на ассемблере". Более правильно говорить о программировании на автокоде или на языке ассемблера, тогда как ассемблером называется программа, "понимающая" этот язык.