Языки программирования



             GlobeSpot.Net Web Directory    Транс ебал транса порно e-batsa.pro

Сборник по задачам и примерам Assembler

Профессия программиста удивительна и уникальна. Давно уже настало время настоящего философского осмысления этой сферы человеческой деятельности, действительно обладающей какими-то особенными, для людей непосвященных чуть ли не магическими, свойствами. Если не брать в рассмотрение коммерческую сторону, то можно сказать, что чужих людей в этой области профессиональной деятельности нет. В чем же ее особенность? Наиболее точно по этому поводу высказался Фредерик Брукс в главе «Пятьдесят лет удивления, восхищения и радости» своей книги «Мифический человеко-месяц, или как создаются программные системы>: «Немногим Бог дает право зарабатывать на жизнь тем, чем они с радостью занимались бы по собственной воле, по увлечению. Я благодарен судьбе». И далее: «Область связанных с компьютерами знаний претерпела взрыв, как и соответстующая технология. Будучи аспирантом в середине 50-х, я мог прочесть все журналы и труды конференций. Я мог оставаться на современном уровне во всей научной дисциплине. Сегодня мне в моей интеллектуальной жизни приходится с сожалением расставаться с интересами то в одной, то в другой подобласти, поскольку количество документов превысило всякую возможность справиться с ними. Масса интересов, масса замечательных возможностей для учебы, исследований и размышлений. Чудесное затруднение! Не только конца не видно, но и шаг не замедляется. В будущем нас ожидают многие радости». Что еще к этому добавить?

Введение

Программирование целочисленных арифметических операций
Микропроцессор Intel имеет средства для обработки целочисленных арифметических данных двух форматов: двоичного и двоично-десятичного (BCD). Данные в двоичном формате рассматриваются как числа со знаком и без знака. При этом необходимо заметить, что не существует отдельного формата для чисел со знаком и без знака. Один и тот же двоичный код может рассматриваться как значение со знаком и без знака. Все зависит от того, как трактуется старший бит операнда. Для чисел без знака он является старшим значащим битом операнда. Для чисел со знаком смысл старшего значащего бита операнда меняется: его нулевое значение соответствует положительному числу, единичное — отрицательному. Остальные разряды операнда — значащие. Но здесь есть один нюанс, смысл которого в том, что остальные разряды не являются модулем числа. Для положительного числа они действительно являются абсолютной величиной числа, а вот для отрицательного числа они представляют так называемый дополнительный код числа. Идея дополнительного кода состоит в том, что микропроцессору совсем необязательно иметь отдельные устройства для сложения и вычитания. Достаточно только одного — сумматора.

Программирование целочисленных операций
Двоичные числа
Двоично-десятичные числа (BCD-числа)
Генерация последовательности случайных чисел

Сложные структуры данных
Процесс разработки программы на ассемблере традиционно осложняется тем, что в этом языке ограничены средства описания данных, привычные для языков программирования высокого уровня. В уроке 12 «Сложные структуры данных» учебника были рассмотрены средства, которые поддерживает ассемблер для работы с данными. Но это деление весьма условно и не дает представления о том, как реализуется общая концепция понятий «данное», «тип данных» и «структура данных» в контексте программирования на языке ассемблера. Это обстоятельство существенно влияет на эффективность изучения и использования языка ассемблера. Учитывая сложность и практическую важность данного вопроса, есть смысл изложить его более систематично. Проблема представления и организации эффективной работы с данными возникла одновременно с идеей разработки первой вычислительной машины. Вычислительная машина функционирует согласно некоторому алгоритму. А если есть алгоритм, то должны быть и данные, с которыми он работает. Аналогично извечной дилемме о курице или яйце возникает вопрос о первичности алгоритма и данных. Схожий вопрос неявно заложен в название небезызвестной книги Никлауса Вирта — «Алгоритмы + структуры данных = программы», два издания которой были выпущены издательством «Мир» в 1985 и 1989 годах.

Основные понятия
Множество
Массив
Структура
Список
Сеть
Дерево
Элементы компиляции программ

Процедуры в программах ассемблера
В предыдущей главе, посвященной структурам данных, достаточно интенсивно использовались рекурсивные процедуры. Данный вопрос требует дополнительного пояснения. Процедура называется рекурсивной, если она прямо или косвенно обращается к себе самой. Рекурсия является естественным свойством для большого числа математических и вычислительных алгоритмов. Важно отметить, что любой рекурсивный алгоритм можно сделать итеративным, но это не всегда целесообразно. В теории программирования рекурсия как правило воспринималась неоднозначно. В конечном итоге была выработана следующая рекомендация — рекурсию следует избегать в случаях, когда имеется очевидное итерационное решение. Как мы убедимся из приведенного ниже обсуждения, очевидная рекурсивная задача вычисления факториала не дает никакого выигрыша в попытке программной реализации с помощью рекурсивных процедур. Настоящий эффект возникает в тех задачах, где рекурсия использована в определении обрабатываемых данных. Такими данными могут являться, например, динамические структуры данных — стеки, деревья, списки, очереди и т. п.

Процедуры в программах ассемблера
Реализация рекурсивных процедур
Реализация вложенных процедур
Разработка динамических (DLL) библиотек

Обработка цепочек элементов
Материал этой главы является дополнением к уроку 11 «Цепочечные команды» учебника. Из этого урока следуют выводы о том, что, во-первых, цепочечные команды являются мощным инструментом обработки последовательностей элементов размером 1/2/4 байт и, во-вторых, это единственное средство микропроцессора для обработки данных по схеме память-память. В процессе разработки программ для учебника и этой книги мы достаточно часто использовали команды микропроцессора этой группы. Но цепочечные команды — это примитивы, и, как любые примитивы, они являются лишь основой для построения более сложных алгоритмов обработки цепочек элементов. Особенно это чувствуется при разработке программ для задач обработки текстов, и в частности задачи поиска. Для решения этой проблемы существует ряд классических алгоритмов, оптимизирующих этот процесс. Ниже будет приведено несколько программ, демонстрирующих алгоритмы поиска данных в строках символов, то есть цепочках элементов размером 1 байт. Так как все они построены на основе стандартных байтовых цепочечных команд микропроцессора, то при необходимости обработки последовательностей элементов большей размерности (2 и 4 байта) их доработка не составит вам особого труда.

Обработка цепочек элементов
Прямой поиск в текстовой строке

Работа с консолью в программах на ассемблере
На практике редко возникает необходимость разработки программы как «вещи в себе». В подавляющем большинстве случаев программа должна взаимодействовать с пользователем, получая от него данные посредством клавиатуры и выдавая результаты своей работы на экран. При знакомстве с новым языком программирования одним из первых вопросов, на которые ищет ответа программист, является выяснение средств этого языка для выполнения операций обмена с консолью (консоль — клавиатура и монитор). Что касается языка ассемблера, то собственных средств обмена с консолью у него нет. Чтобы выполнить подобную операцию, программа использует возможности самого компьютера (прерывания BIOS) и операционной системы, в среде которой эта программа работает. Каждый программист самостоятельно ищет решение проблемы обмена с консолью. Так как эта задача актуальна всегда, то есть необходимость на конкретных примерах показать порядок использования средств BIOS и ОС для обмена с консолью в программах на ассемблере.

Работа с консолью в программах на ассемблере
Функции BIOS для работы с консолью
Функции MS DOS для работы с консолью
Работа с консолью в среде Windows


Преобразование чисел
В предыдущей главе мы рассмотрели решение проблемы обмена данными с консолью. Данные, вводимые с консоли и выводимые на нее, кодируются операционной системой в соответствии с текущей таблицей кодировки. Отдельный предмет обсуждения при этом — процесс ввода-вывода числовой информации. В каждом языке программирования он реализован по-своему. Одна из целей, к которой стремятся разработчики компиляторов, — по возможности сделать этот процесс прозрачным для программиста. Язык ассемблера в отличие от языков высокого уровня не обладает средствами такого прозрачного ввода-вывода числовой информации. Но в этом и состоит его достоинство, так как при определенном опыте и квалификации программиста появляется хорошая возможность повышения эффективности конечного кода. Для каждой конкретной задачи преобразование чисел между различными представлениями, допустимыми компьютером, может быть выполнено несколькими способами.

Преобразование чисел
Ввод чисел с консоли

Работа с файлами в программах на ассемблере
Язык ассемблера не содержит средств для работы с файлами. Если такая необходимость возникает, то программа должна содержать фрагменты кода, в которых производится обращение к средствам операционной системы, осуществляющим взаимодействие с файловой системой. Это лишний раз подтверждает тот факт, что в области взаимодействия с внешним миром программа на ассемблере оказывается привязанной как к конкретной аппаратной, так и конкретной операционной платформам. В сегодняшней ситуации программисту все еще приходится сталкиваться с необходимостью программирования для MS DOS. Поэтому изучение средств для работы с файлами этой операционной платформы не потеряло своей актуальности и эти средства в плане совместимости поддерживаются различными реализациями Windows. В реализации MS DOS 7.0 введена поддержка длинных имен файлов, используемых системой файлового ввода-вывода Win 32.

Работа с файлами в программах на ассемблере
Работа с файлами в MS DOS (имена 8.3)
Работа с файлами в MS DOS (длинные имена)
Файловый ввод-вывод в Win32

Профайлер
В этой главе мы рассмотрим проблему измерения скоросгн работы программ. Интерес к данной теме у программистов всегда повышен и подобен интересу рыболовов к размерам выловленной рыбы. Когда программист разрабатывает алгоритм реализации некоторой задачи, то он обязательно пытается оценить скорость, с которой будет работать программа по этому алгоритму. Б процессе изложения материала мы уже не раз предлагали для решения одной задачи несколько способов, но при этом оставляли открытым вопрос об оценке их эффективности. В этом разделе попытаемся ликвидировать этот пробел, при этом попутно рассмотрим несколько общих вопросов, связанных с микропроцессорами архитектуры Intel (Intel и AMD). Основное внимание мы уделим некоторым средствам микропроцессора Intel, предназначенным для оценки эффективности функционирующих на них программ.

Профайлер
Расширение традиционной архитектуры Intel
Команды RDMSR и WRMSR
Команда CPUID - информация о процессоре

Вычисление CRC
В своей практической работе каждый пользователь наверняка сталкивался с ситуацией, когда неблагоприятные условия перемещения файлов (любым способом) приводили к порче последних. Типичное проявление этой ситуации — сообщение об ошибке при попытке чтения некоторого файла. Причина — внесенная извне техническая ошибка, приведшая к нарушению целостности исходной информации. Существует много методов для исправления подобных ошибок, но прежде чем исправлять, необходимо эти ошибки обнаружить. Для этого также существуют определенные методы, основанные на избыточности передаваемой информации, что позволяет не только выявлять наличие факта искажения информации, но и в ряде случаев устранять эти искажения. Перечислим наиболее известные из методов обнаружения ошибок передачи данных.

Вычисление CRC
CRC-арифметика
Прямой алгоритм вычисления CRC
Табличные адгоритмы вычисления CRC
Прямой табличный алгоритм CRC32
"Зеркальный" табличный алгоритм CRC32

Программирование ХММ-расширения
В этой главе мы рассмотрим практические вопросы программирования ХММ-расширения микропроцессора Pentium III. Программирование целочисленного MMX-расширения рассмотрено в уроке 20 «ММХ-технология микропроцессоров Intel» учебника. Там же рассмотрены архитектура и система команд ХММ-расширения, но остались «за бортом» вопросы организации практической работы с ними. Кроме учебника архитектура и система команд ХММ-расширения рассмотрены в литературе. С точки зрения структуры материал, изложенный ниже, состоит из двух частей: в первой части рассматриваются практические аспекты применения команд ХММ-расширения для решения некоторых типов задач, а во второй части — порядок разработки программ, использующих команды ХММ-расширения. Предполагается, что для разработки ассемблерных программ используется пакет TASM.

Программирование ХММ-расширения
Препроцессор команд ХММ-расширения

Заключение

Cамоучитель по Assembler

Микропроцессоры корпорации Intel и персональные компьютеры на их базе прошли не очень длинный во времени, но значительный по существу путь развития, на протяжении которого кардинально изменялись и возможности и даже сами принципы их архитектуры. В то же время, внос в микропроцессор принципиальные изменения, разработчики были вынуждены постоянно иметь в виду необходимость обеспечения совмести мости новых моделей со старыми, чтобы не отпугивать потенциального покупателя перспективой полной замены освоенного или разработанного им программного обеспечения. В результате современные микропроцессоры типа Pentium, обеспечивая такие возможности, как 32-битную адресацию почти неограниченных объемов памяти, многозадачный режим с одновременным выполнением нескольких программ, аппаратных средства защиты операционной системы и прикладных программ друг друга, богатый набор дополнительных эффективных команд и способе адресации, в то же время могут работать (и часто работают) в режиме первых микропроцессоров типа 8086, используя всего лишь 1 мегабайт оперативной памяти, 16-разрядные операнды (т. е. числа в диапазоне до 216 - 1 = 65535) и ограниченный состав команд. Поскольку программирование на языке ассемблера напрямую затрагивает аппаратные возможности микропроцессора, прежде всего следует выяснить, в какой степени программист может использовать новые возможности микропроцессоров в своих программах и какие проблемы программной несовместимости могут при этом возникнуть.

Введение
Реальный и защищенный режимы прежде всего принципиально различаются способом обращения к оперативной памяти компьютера. Метод адресации памяти, используемый в реальном режиме, позволяет адресовать память лишь в пределах 1 Мбайт; в защищенном режиме используется другой механизм (из-за чего, в частности, эти режимы и оказались полностью несовместимыми), позволяющий обращаться к памяти объемом до 4 Гбайт.

Распределение адресного пространства
При обсуждении содержимого многобайтового данного приходится ссылаться на составляющие его байты; эти байты условно нумеруются от нуля и располагаются (при их изображении на бумаге) в порядке возрастания номера справа налево, так что слева оказываются байты с большими номерами, а справа - байты с меньшими номерами. Крайний слева байт принято называть старшим, а крайний справа - младшим. Такой порядок расположения байтов связан с привычной для нас формой записи чисел: в многоразрядном числе слева указываются старшие разряды, а справа - младшие

Взаимодействие оперативной
Взаимодействие оперативной - 2
Взаимодействие оперативной - 3
Распределение адресного пространства
Распределение адресного пространства - 2
Распределение адресного пространства - 3
Распределение адресного пространства - 4
Регистры процессора
Регистры процессора - 2
Регистры процессора - 3

Процесс подготовки и отладки программы
Рассматривая листинг, можно отметить ряд полезных моментов общего характера. Предложения программы с операторами assume, segment, ends, end, как уже отмечалось ранее, не транслируются в какие-либо машинные коды и не находят отражения в памяти. Они нужны лишь для передачи транслятору служебной информации о способе трансляции команд (assume), границах сегментов (segment и end) и строке, на которой следует завершить обработку исходного текста (end).

Процесс подготовки и отладки программы
Процесс подготовки и отладки программы - 2
Процесс подготовки и отладки программы - 3
Процесс подготовки и отладки программы - 4
Процесс подготовки и отладки программы - 5
Процесс подготовки и отладки программы - 6
Процесс подготовки и отладки программы - 7
Процесс подготовки и отладки программы - 8
Представление данных
Представление данных - 2

Организация приложений MS-DOS
Как уже отмечалось выше, язык ассемблера является отражением архитектуры процессора, и изучение языка в сущности означает изучение системы команд и способов адресации, реализуемых процессором. Одна ко любой язык программирования полезен лишь постольку, поскольку на нем можно написать какие-то работоспособные программы. В то же время трудно представить себе реальную программу, которая выполняет чисто логические или вычислительные действия, ничего не вводя и не выводя и не взаимодействуя с другими программами. Однако такие вопросы, как организация выполнимой программы, ее запуск, взаимодействие с разнообразными аппаратными и программными объектами вычислительной системы (клавиатурой, дисками, таймером, памятью, системными драй верами и проч.) и, наконец, завершение являются прерогативой операционной системы.

Организация приложений MS-DOS
Организация приложений MS-DOS - 2
Организация приложений MS-DOS - 3
Организация приложений MS-DOS - 4
Организация приложений MS-DOS - 5
Организация приложений MS-DOS - 6
Организация приложений MS-DOS - 7
Организация приложений MS-DOS - 8
Организация приложений MS-DOS - 9
Организация приложений MS-DOS - 10

Архитектурные особенности
Операционная система MS-DOS, язык ассемблера МП 86 и методы программирования микропроцессоров корпорации Intel разрабатывались применительно к 16-разрядному процессору 8086 и тому режиму, который впоследствии получил название реального. Появление процессора 80386 знаменовало собой начато нового этапа в развитии операционных систем и прикладного программирования - этапа многозадачных графических операционных систем защищенного режима типа Windows и 32-разрядных прикладных программ. При этом, как уже отмечалось во введении, все архитектурные средства 86-го процессора входят в состав любого современного процессора, который, таким образом, можно условно разделить на две части - МП 86 и дополнительные средства, обеспечивающие защищенный режим, 32-разрядную адресацию и прочее.

Архитектурные особенности
Архитектурные особенности - 2
Дополнительные режимы адресации
Дополнительные режимы адресации - 2
Использование 32-разрядных процессоров
Использование 32-разрядных процессоров - 2
Использование 32-разрядных процессоров - 3
Использование 32-разрядных процессоров - 4
Использование 32-разрядных процессоров - 5
Использование 32-разрядных процессоров - 6

Система команд процессоров Intel
В разделах статей, начинающихся с обозначения 386+, описываются отличия действия рассматриваемой команды в современных 32-разрядных процессорах (80386, i486, Pentium). Как правило, эти отличия заключаются в возможности использования не только 8- и 16-разрядных, но и 32-разрядных операндов, а также расширенных режимов адресации памяти. Обычные 16-разрядные программы реального режима вполне могут использовать расширенные регистры процессора (ЕАХ, ЕВХ и проч.), 32-битовые ячейки памяти и варианты команд для их обработки.

Команды предназначены для ввода
INT Программное прерывание
INT Программное прерывание - 2
INT Программное прерывание - 3
MP Безусловный переход
MP Безусловный переход - 2
MP Безусловный переход - 3
MP Безусловный переход - 4
LEAVE Выход из процедуры высокого уровня
Регистр таблицы дескрипторов

Cамоучитель по Assembler (2)

В настоящее время на персональных компьютерах типа IBM PC используются в основном два класса операционных систем (оба - разработки корпорации Microsoft): однозадачная текстовая система MS-DOS и многозадачная графическая система Windows. Операционная система MS-DOS является системой реального режима; другими словами, она использует только средства процессора 8086, даже если она установлена на компьютере с процессором Pentium. Система Windows - это система защищенного режима; она значительно более полно использует возможности современных процессоров, в частности, многозадачность и расширенное адресное пространство. Разумеется, система Windows не могла бы рабо-тать с процессором 8086, так как в нем не был реализован защищенный режим.
Соответственно двум типам операционных систем, и все программное обеспечение персональных компьютеров подразделяется на два класса: программы, предназначенные для работы под управлением MS-DOS (их часто называют приложениями DOS) и программы, предназначенные для системы Windows (приложения Windows). Естественно, приложения DOS могут работать только в реальном режиме, а приложения Windows - только в защищенном.
Таким образом, выражения "программирование в системе MS-DOS", "программирование в реальном режиме" и "программирование 86-го процессора" фактически являются синонимами. При этом следует подчеркнуть, что хотя процессор 8086, как микросхема, уже давно не используется, его архитектура и система команд целиком вошли в современные процессоры. Лишь относительно небольшое число команд современных процессоров специально предназначены для организации защищенного режима и распознаются процессором, только когда он работает в за щенном режиме. Поэтому изучение языка ассемблера целесообразно начинать с изучения архитектуры процессора 8086 или, точнее, того гипотетического процессора, который как бы объединяет часть архитектур средств современных процессоров, предназначенных для использования в реальном режиме, и соответствующих архитектуре процессора 8086. будем называть этот гипотетический процессор МП 86. Изучению архитектуры и программирования МП 86 посвящены первые три главы.
Деление программ на приложения DOS и приложения Windows исчерпывают вопроса о возможных типах программ. Дело в том, что ряд дополнительных средств, имеющихся в современных процессорах, вполне можно использовать и в реальном режиме (хотя сама операционная система MS-DOS, разработанная еще в эпоху процессора 8088, ими пользуется). К этим средствам относится расширенный состав команд процессоров и, главное, их 32-разрядная архитектура.

Архитектура реального режима
Среди устройств и узлов, входящих в состав компьютера, наиболее важными для выполнения любой программы катаются оперативная память и центральный микропроцессор, который мы для краткости будем в дальнейшем называть просто процессором. В оперативной памяти хранится выполняемая программа вместе с принадлежащими ей данными; процессор выполняет вычисления и другие действия, описанные в программе.

Память и процессор
Байт, слово и двойное слово.
Нумерация байтов в многобайтовых данных.
Образование физ. адреса из сегментного
Распределение адресного пространства
Регистры процессора
Сегментная структура программ
Образ программы в памяти.
Стек
Система прерываний

Основы программирования
Рассматривая листинг, можно отметить ряд полезных моментов общего характера. Предложения программы с операторами assume, segment, ends, end, как уже отмечалось ранее, не транслируются в какие-либо машинные коды и не находят отражения в памяти. Они нужны лишь для передачи транслятору служебной информации о способе трансляции команд (assume), границах сегментов (segment и end) и строке, на которой следует завершить обработку исходного текста (end).

Листинг трансляции программы
Расположение сегментов программы в памяти
Начальный кадр отладчика с текстом
Окно процессора с внутренними окнами.
После выполнения двух первых команд.
Дополнительное меню окна дампа памяти.
Представление данных
Образование отрицательных чисел
Представление 16-битовых чисел
Представление 8-битовых чисел

Команды и алгоритмы
Как уже отмечалось выше, язык ассемблера является отражением архитектуры процессора, и изучение языка в сущности означает изучение системы команд и способов адресации, реализуемых процессором. Одна ко любой язык программирования полезен лишь постольку, поскольку на нем можно написать какие-то работоспособные программы. В то же время трудно представить себе реальную программу, которая выполняет чисто логические или вычислительные действия, ничего не вводя и не выводя и не взаимодействуя с другими программами.

Организация приложений MS-DOS
Циклы и условные переходы
Обработка строк
Таблица 3.1.
Использование подпрограмм
Состояние стека в подпрограмме
Двоично-десятичные числа
Алгоритм работы подпрограммы conv.
Программирование аппаратных средств
Регистр маски ведущего контроллера прерываний.

Расширенные возможности
Операционная система MS-DOS, язык ассемблера МП 86 и методы программирования микропроцессоров корпорации Intel разрабатывались применительно к 16-разрядному процессору 8086 и тому режиму, который впоследствии получил название реального. Появление процессора 80386 знаменовало собой начато нового этапа в развитии операционных систем и прикладного программирования - этапа многозадачных графических операционных систем защищенного режима типа Windows и 32-разрядных прикладных программ.

Архитектурные особенности
Основные регистры 32-разрядных процессоров.
Дополнительные режимы адресации
Адресация 32-разрядных регистров
Адресация 16-разрядных регистров.
32-разрядные процессоры в программировании
Основы защищенного режима
Дескрипторы сегментов и их селекторы.
Цепочка преобразований виртуального адреса
Страничная трансляция адресов.

Приложение
Ниже приводится алфавитный перечень команд процессоров Intel с кратким описанием действия каждой команды и примерами ее использования. В разделах статей, начинающихся с обозначения 386+, описываются отличия действия рассматриваемой команды в современных 32-разрядных процессорах (80386, i486, Pentium). Как правило, эти отличия заключаются в возможности использования не только 8- и 16-разрядных, но и 32-разрядных операндов, а также расширенных режимов адресации памяти.

Система команд процессоров Intel
HLT Останов
IDIV Деление целых чисел со знаком
П3. Состояние стека после
INS Ввод строки из порта
INT Программное прерывание
INTO Прерывание по переполнению
MP Безусловный переход
LAHF Загрузка флагов в регистр АН
86+ LEAVE Выход из процедуры высокого уровня

Основы языка Ассемблера

Современные процессоры (начиная с 80386), в отличие от своего предшественника 8086, являются 32-разрядными. Это дает возможность программисту использовать в программе 32-разядные операнды (т. е. числа в диапазоне до 232-1=4 294 967 295), что во многих случаях позволяет упростить алгоритм программы и повысить ее быстродействие. Программа, предполагающая работать с 32-разрядными операндами, должна иметь в своем составе одну из директив .386, .486 или .586, которые разрешают транс тору использовать дополнительные средства соответствующего процессе. Включение в программу этой директивы одновременно открывает доступ и к дополнительным командам и способам обращения к памяти, отсутствующим в процессоре 8086, что также расширяет возможности программирования. Эти средства описаны в главе, посвященной расширенным возможностям современных процессоров.

Введение
Микропроцессоры корпорации Intel и персональные компьютеры на их базе прошли не очень длинный во времени, но значительный по существу путь развития, на протяжении которого кардинально изменялись и возможности и даже сами принципы их архитектуры. В то же время, внос в микропроцессор принципиальные изменения, разработчики были вынуждены постоянно иметь в виду необходимость обеспечения совмести мости новых моделей со старыми, чтобы не отпугивать потенциального покупателя перспективой полной замены освоенного или разработанного им программного обеспечения.

Подготовка и отладка программы
Подготовка исходного текста программы выполняется с помощью любого текстового редактора, хотя бы редактора, встроенного в программу Norton Commander, или еще более удобного редактора Norton Editor. При использовании одного из более совершенных текстовых процессоров, вроде Microsoft Word, следует иметь в виду, что эти программы добавляют в выходной файл служебную информацию о формате (размер страниц, тип шрифта и др.), которая будет непонятна транслятору. Однако практически все текстовые редакторы и процессоры позволяют вывести в выходной файл "чистый текст", без каких-либо служебных символов. Именно таким режимом и надлежит воспользоваться в нашем случае.

Подготовка и отладка программы
Подготовка и отладка программы - 2
Подготовка и отладка программы - 3
Подготовка и отладка программы - 4
Подготовка и отладка программы - 5
Подготовка и отладка программы - 6
Подготовка и отладка программы - 7
Подготовка и отладка программы - 8
Подготовка и отладка программы - 9
Представление данных

Циклы и условные переходы
Циклы, позволяющие выполнить некоторый участок программы многократно, в любом языке являются одной из наиболее употребительных конструкций. В системе команд МП 86 циклы реализуются, главным образом, с помощью команды loop (петля), хотя имеются и другие способы организации циклов. Во всех случаях число шагов в цикле определяется содержимым регистра СХ, поэтому максимальное число шагов составляет 64 К. Рассмотрим простой пример организации цикла. Пусть в программе зарезервировано место для массива размером 10000 слов, и этот массив надо заполнить натуральным рядом чисел от 0 до 9999.

Циклы и условные переходы
Циклы и условные переходы - 2
Циклы и условные переходы - 3
Циклы и условные переходы - 4
Циклы и условные переходы - 5
Обработка строк
Обработка строк - 2
Обработка строк - 3
Обработка строк - 4
Использование подпрограмм

Использование средств 32-разрядных процессоров в программировании
Следует заметить, что возможности использования в программах реального режима дополнительных средств 32-разрядных процессоров, хотя и кажутся привлекательными, в действительности весьма ограничены. Новых команд не так уж много, и они не имеют принципиального характера; 32-разрядные данные используются в прикладных программах относительно редко (если не касаться вычислительных программ, содержащих действительные числа, но такие программы редко пишут на языке ассемблера); расширенные возможности адресации в полной мере проявляются лишь в 32-разрядных программах, не работающих в DOS. Тем не менее в каких-то случаях привлечение средств 32-разрядных процессоров может оказаться полезным и в 16-разрядных программах, и мы приведем несколько примеров их использования.

32-разрядные процессоры в программировании
32-разрядные процессоры в программировании - 2
32-разрядные процессоры в программировании - 3
32-разрядные процессоры в программировании - 4
32-разрядные процессоры в программировании - 5
32-разрядные процессоры в программировании -6
32-разрядные процессоры в программировании -7
32-разрядные процессоры в программировании -8
32-разрядные процессоры в программировании -9
32-разрядные процессоры -10

ААА ASCII-коррекция регистра АХ после сложения
Команда ааа используется вслед за операцией сложения add в регистре AL двух неупакованных двоично-десятичных (BCD) чисел, если в АХ находится двухразрядное неупакованное двоично-десятичное число. Команда не имеет параметров. Она преобразует результат сложения в неупакованное двоично-десятичное число, младший десятичный разряд которого находится в AL. Если результат превышает 9, выполняется инкремент содержимого регистра АН. Команда воздействует на флаги AF и CF.

ААА ASCII-коррекция регистра АХ после сложения
AAD ASCII-коррекция регистра АХ перед делением
AAM ASCII-коррекция регистра АХ
AAS ASCII-коррекция регистра AL после вычитания
ADC Целочисленное сложение с переносом
ADD Целочисленное сложение
AND Логическое И
+ ARPL
BOUND
BSF Прямое сканирование битов

Статьи по Assembler

Минимальное приложение имеет множество достоинств: очень быстро пишется, занимает минимум ресурсов, не требует сопровождения, работает с такой скоростью, что его не видно. Недостаток у него один: оно совершенно никому не нужно. Именно этим оно и интересно настоящему ассемблерщику.

Статьи
Каждый программист, как хомячок, любовно обустраивает среду своего обитания. Developer Studio, конечно, нельзя назвать идеальным домиком для бедного маленького одинокого ассемблерщика. Где-то мокро, где-то поддувает. Но в принципе жить можно

Статьи
Статьи - 2

Рунет : win32asm
Несколько небольших статей об основах работы в win32: структура программы, создание окна, "Hello, world!" Статья "Контекст устройства". Концепция. Контекст дисплея, принтера, памяти, информационный. Статья "Ресурсы". Концепция. Приемы. Примеры. Советы. Способы создания меню. Работа с .rc - файлом ресурсов. Статья "Полосы прокрутки". Описание применения на конкретном примере. Статья "Рисование графических примитивов". Создание пера Рисование пикселя, прямой, прямоугольника, эллипса, дуги. Заполнение объектов.

Рунет : win32asm
Рунет : win32asm - 2
Рунет : win32asm - 3
Рунет : ассемблер
Рунет : ассемблер - 2
Рунет : ассемблер - 3
Рунет : ассемблер - 4
Рунет : ассемблер - 5
Рунет : братские сайты
Рунет : братские сайты - 2

Mycall (c++)
Разрешено свободное распространение. Распространение на возмездной основе любого вида запрещено. Любая модификация разрешена только в целях личного пользования. Распространение в модифицированном виде запрещено. Распространение исполняемого модуля без документации запрещено. Пользователь применяет программу под собственную ответственность. Автор не несет ответственности за проблемы, которые могут возникнуть у пользователя в связи с применением программы.

Mycall (c++)
Mycall (c++) - 2
Mycall (ассемблер)
Mycall (ассемблер) - 2
Пакет logcount
Пакет logcount - 2
Пакет logcount - 3
Пакет logcount - 4
Пакет logcount - 5
Пакет logcount - 6

Ms devstudio - среда разработки asm
Настоящие ассемблерщики - народ неприхотливый, хорошая находка для рачительной хозяйки. Едят, как правило, мало, и не особо разбираясь, что (одного моего друга жена, большая любительница животных, накормила как-то ради эксперимента педигрипалом. Очень хвалил). Место в помещении почти не занимают: не более двух кв.м вместе с компьютером. Линяют не чаще раза в год. В спячку, правда, не впадают, зато гон непродолжительный и тихий. В совокупности представляют собой прекрасный вторичный рынок для компьютеров 386 серии.

Ms devstudio - среда разработки asm
Ms devstudio - среда разработки asm - 2
Ms devstudio - среда разработки asm - 3
Ms devstudio - среда разработки asm - 4
Ms devstudio - среда разработки asm - 5
Ms devstudio - среда разработки asm - 6
Минимальное приложение
Минимальное приложение - 2
Минимальное приложение - 3
Минимальное приложение - 4

Настоящий ли вы ассемблерщик?
Допустим, вас привлекло на assembler.ru нечто, заслуживающее сохранения на локальном диске. Вы вызываете диалог "Сохранить как" и делаете все, что положено в подобных случаях. Впоследствии, пожелав оффлайново испытать однажды уже испытанное удовольствие, вы обнаруживаете, что загруженная с диска страница радикально отличается от того, что привело вас в восхищение в онлайне.

Настоящий ли вы ассемблерщик?
Настоящий ли вы ассемблерщик? - 2
Как смотреть assembler.ru локально
Лептонный стиль программирования
Лептонный стиль программирования - 2
Лептонный стиль программирования - 3
Лептонный стиль программирования - 4
Лептонный стиль программирования - 5
Лептонный стиль программирования - 6
Лептонный стиль программирования - 7

Можно ли зарабатывать на жизнь shareware?
Я представляю собой в настоящее время довольно существенное исключение, так как собираюсь получить в этом году около $20000. Главным образом - от уже лицензированных версий, нежели от новых продаж.

Сколько зарабатывают программисты?
Впечатления от "сегоднячко"
Впечатления от "сегоднячко" - 2
Правильная история компьютера
Правильная история компьютера - 2
Так в каком же веке мы живем?
Так в каком же веке мы живем? - 2
Так в каком же веке мы живем? - 3
Так в каком же веке мы живем? - 4
Классификация информации

О формате pcx
О формате файлов PCX написано довольно много. Это совершенно различная по своему характеру и содержанию литература. Краткие описания формата, подробнейшее изложение способов работы с огромным количеством всеохватывающих функций в фирменных пакетах, библиотеках и многое, многое другое. Вся эта немалая по объему информация хранится на тот случай, когда может возникнуть необходимость создать что-нибудь красочное и впечатляющее для глаз пользователя, желающего украсить экран своего дисплея изображениями, схожими по красоте и точности воспроизведения с фотографическим отпечатком.

О формате pcx
О формате pcx - 2
О формате pcx - 3
О формате pcx - 4
О формате pcx - 5
О формате pcx - 6
О формате pcx - 7
О формате pcx - 8
О формате pcx - 9
О формате pcx - 10

Программирование на Ассемблере

В настоящее время нет языка, полностью удовлетворяющего этим свойствам. Всем требованиям, кроме последнего, удовлетворяет машинный язык и близкий к нему язык Ассемблера. Последнему требованию удовлетворяют языки высокого уровня, но они не удовлетворяют первым трем требованиям, поэтому при создании системных программ используют и язык Ассемблер и язык высокого уровня (язык С, С++). И, хотя для систем, поддерживающих работу с процессорами разных типов, например, WINDOWS NT, драйверы пишутся на языке высокого уровня, значимость ассемблера не падает, так как знание принципов выполнения команд и их хранение в памяти помогает писать «хорошие» программы на любом языке.

Характеристика языков системного программирования
Системное программное обеспечение (СПО)– комплекс программ для увеличения производительности вычислительной системы и пользователя. Примером СПО является операционная система. Компонентом СПО является системная программа.

Структура 4-х адресной команды
Структура 2-х адресной команды
Структура 1 адресной команды.
Структура безадресных команд
Сравнительный анализ команд
Пример программирования в машинных кодах.
Система команд
Распределение памяти
Программа вычисления
Характеристика языков ассемблерного типа

Обработка ошибок с помощью функции GetLastError
Для формирования требуемого сообщения по номеру ошибки, который возвращает функция GetLastError. Для этой функции задается адрес буфер, а функция выделяет буфер в куче и записывает сформированное сообщение; тип формируемого сообщения (для нас – сообщение ОС - FORMAT_MESSAGE_FROM_SYSTEM и язык, принятый по умолчанию – макрос MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);

Пользовательские функции с обработкой ошибок
Системные вызовы для ввода-вывода
Функции ввода-вывода для устройств
Функция MessageBox
Функции и константы для консоли
Функции и константы для консоли - 2
Функции и константы для консоли - 3
Функции и константы для консоли - 4
Ввод/вывод числовых данных
Ввод/вывод числовых данных - 2

Assembler для начинающих

Почему вас могло бы заинтересовать программирование на языке ассемблера? Cегодня повсюду используются такие языки высокого уровня как Бэйсик, Фортран и Паскаль . Возможно, вы уже знакомы по крайней мере с одним языком высокого уровня. Если вы постоянно пльзуютесь персональным компьютером IBM, то вы знаете, что интерпритатор Бэйсика является частью системы. Зачем же возиться еще с одним языком программирования, тем более с таким, который сулит определенные трудности? Очевидно, даже располагая современными могучими языками, вы все еще нуждаетесь в ассемблере из-за его эффективности и точности.
Ассемблерные программы могут быть очень эффективными. Из программистов, с равными навыками и способностями, работающий на языке ассемблера создаст программу более компактную и быстродействущую, чем такая же программа, написанная на языке высокого уровня. Это так практически для всех небольших или средних программ. К сожалению, по мере возрастания размеров, программы на языке ассемблера теряют часть своих преимуществ. Это происходит из-за необходимого в ассемблерной программе внимания к деалям. Как вы увидите, язык ассемблера требует от вас планирования каждого действия компьютера. В небольших программах это позволяет оптимизировать работу программы с аппаратными средствами. В больших же программах огромное количество деталей может помешать вам эффективно работать над самой программой, даже если отдельные компоненты программы окажутся очень неплохими. Безусловно, программирование на языке ассемблера отвечает потребностям не каждой программы.

Программирование на языке Ассемблера
Почему в этом тексте IBM PC берется в качестве базовой для изучения программирования на языке ассемлера? Для этого есть несколько причин. Во-первых, IBM PC - новая и мощная машина. Как персональный компьютер она обладает расширенными возможностями выходящими за рамки возможностей более ранних ПК. Как вы подробнее увидете дальше, PC использует микропроцессор Intel 8088. Этот процессор может выполнять 16-битовую арифметику и адресацию над более чем миллионом символов памяти. Эти возможности ставят его ближе по мощности к большим ЭВМ, чем к ранним персональным компьютерам.

Программирование на языке Ассемблера
Персональный компьютер фирмы IBM (IBM PC)

Основы компьютерных вычислений
В этой главе разъясняются свойства компьютеров. Она расскажет вам как компьютеры работают и почему они делают это именно так. Некоторые положения могут оказаться знакомыми вам. Если у вас нет опыта программирования на языке ассемблера, то многие операции будут для вас новыми.

Двоичная арифметика
Принципы работы компьютера
Процедуры
Стек
Прерывания
Двоичное дополнение
Шестнадцатиричное представление
Машинный язык и язык Ассемблера
Синаксис языка Ассемблера
Принципы работы Ассемблера

Модель программирования 8088
Регистры 8088 сохранять данные-операнды или адреса памяти. Поскольку регистры расположены внутри самого процессора, он имеет очень быстрый доступ к находящимся в них данным, намного более быстрый, чем к данным в памяти. Если в программе требуется быстрыый доступ к какой-либо переменной, то хранение ее значения в регистре ускоряет выполнение. Набор регистров 8088 состоит из нескольких групп.

Сегментные регистры
Предназначение сегментов
Оператор Segment
Оператор Assume
Управляющие рагистры
Указатель команд
Флаг захвата
Флаг прерываний
Флаг направления
Указатель стека

Команды управления микропроцессором
Есть три команды, которые непосредственно управляют состоянием флага переноса. Команды STC, CLC, CMC соответственно могут устанавлмвать, сбрасывать и изменять флаг переноса. Этот флаг - единственный, которому уделено такое внимание, и в первую очередь, благодаря важности флага переноса при операциях с повышенной точностью. Флаг переноса критичен на промежуточных шагах любых многословных операций. Возможность сбрасывать или устанавливать флаг переноса может помочь при циклической обработке с повышенной точностью. На Фиг. 4.31 показан пример использования команды CLC. Цикл внутри примера складывает отдельные байты двух 10-разрядных упакованных десятичных чисел.

Установка флагов
Специальные команды
Пересылка данных
Команда пересылки
Команда замены
Команды ввода и вывода
Загрузка исполнительного адреса
Загрузка указателя
Пересылка флагов
Перекодировка

Dos и Ассемблер
В этой главе излагаются все детали, необходимые для ассемблирования и выполнения программ. В предыдущих главах объяснялось, как работает микропроцессор 8088. Теперь время проверить полученные знания, так как только самостоятельное составление и успешная прогонка программ могут дать полное представление о системе команд микропроцессора 8088.

Дисковая операционная система
Редактор связей
Многомодульность
EXTRN и PUBLIC
Операция редактирования связей
Карта связей
Отладчик DEBUG
Преодразование файла типа exe в файл типа com
Файловая система
Имена файлов

Свойства Макроассемблера
В этой части будут описаны некоторые свойства макроассемблера, разработанного в фирме IBM. Хотя мы уже рассмотрели все команды процессора 8088, в ассемблере имеются и другие команды. Мы уже обсудили некоторые из этих псевдокоманд, например, операторы определения данных DB и DW. В этой главе будут введены более мощные средства языка ассемблера. Их объединяет то, что их использование делает написание программ на языке ассемблера более простым и легким.

Макроопределения
Аргументы макрокоманд
Ассемблирование по условию
Макрокоманды повторения
Макрооператоры
Команды INCLUDE
Сегменты
Структуры

Математический сопроцессор 8087
Конструкторы микропроцессора Intel 8088 предусмотрели для него уникальную возможность, характерную лишь для семейства микропроцессоров 8086/8088. Конструкции микропроцессора позволяет иметь в системе сопроцессор. Сопроцессор - это устройство, расширяющее возможности центрального процессора. Арифметический сопроцессор 8087 является сопроцессором центрального микропроцессора 8088, добавляющий команды числовой обработки и регистры с плавающей точкой. Эти дополнительные арифметические возможности расширяют набор команд микропроцессора 8088, и значительно увеличивают вычислительную мощность в тех случаях, когда программа выполняет операции с плавающей точкой и повышенной точности.

Работа 8087
Типы данных 8087
Представление данных с плавающей точкой
Форматы действительных чисел
Определение действительных чисел
Модель программирования 8087
Регистровый стек
Управляющее слово
Слово состояния
Набор команд сопроцессора 8087

Персональный компьютер IBM
Эта глава описывает устройство персонального компьютера фирмы IBM (IBM PC). Поскольку данная книга посвящена программированию на языке ассемблера для IBM PC, вполне уместно рассмотреть аппаратное обеспечение машины. Эта глава не предназначена для инженеров и техников; она скорее для тех, кто пишет на языке ассемблера программы, которые выполняются на IBM PC.

Системное оборудование
Адаптер дисковода
Прямой доступ у памяти
Динамик
Клавиатура
Время суток
Возможности системы
Видеоадаптеры
Адаптер монохромного дисплея и принтера
Адаптер цветного графического монитора

Базовая система ввода/вывода
В предыдущей главе изучалась аппаратура IBM PC. Фирма IBM поставляет стандартные управляющие программы для рассмотренных выше аппаратных компонент. Эти программы находятся в ПЗУ на системной плате и носят название BIOS (Basic Input/Output System, базовая система ввода-вывода). В этой главе объясняются функции, обеспечиваемые BIOS. Материалом этой главы нужно пользоваться вместе с гл.3 и приложением A технического описания IBM PC. В гл.3 описана базовая системы ввода-вывода, в частности некоторые ее функции, а в приложении A приведен полный ассемблерный листинг BIOS IBM PC.

Замечания по листингу ROM BIOS
Кассета
Дискета
Области данных драйвера BIOS дискеты
Команды чтения и записи
Команда проверки
Команда форматирования
Дисплей
Области данных дисплея
Функции ввода вывода дисплея

Расширения системы и подпрограммы на языке Ассемблера
В этой главе рассказывается о способе использования программ на языке ассемблера в больших программах. Приведенные ранее примеры были автономными программами на языке ассемблера. Ни один из других языков программирования не позволяет так, как язык ассемблера, управлять техническими средствами. Однако во многих случаях выбор языка ассемблера в качестве языка программирования может оказаться неправильным. Часто лучше всего бывает применять язык высокого уровня в сочетании с подпрограммами на языке ассемблера.

Расширение системы BIOS
Расширение системы BIOS
Возврат программы в DOS
Загрузка в верхнюю часть памяти
Процедуры на языке Ассемблера
Процедура Бэйсика BLOAD
Вставка короткой программы
Компилируемые языки высокого уровня

Заключение
Язык ассемблера - мощное средство программирования. Он позволяет программисту осуществлять всестороннее управление аппаратными средствами ЭВМ. Однако такое управление заставляет программиста вникать в детали, далекие от основного содержания программы. Все преимущества языка ассемблера оборачиваются подчас пустой тратой времени на многочисленные детали.

Как написать игру для ZX Spectrum на ассемблере

Эта книга адресована в первую очередь тем, кого уже перестал удовлетворять несколько ограниченный и неповоротливый Бейсик и кто мечтает наконец научиться писать программы на ассемблере. Книга рассчитана на достаточно подготовленного читателя, прошедшего «боевое крещение» Бейсиком, а новичкам в программировании мы можем порекомендовать первую книгу из серии «Как написать игру для ZX Spectrum». Надеемся также, что и профессионалы смогут найти здесь для себя некоторые зерна истины.
Как и в предшествующей книге, речь здесь пойдет преимущественно об игровых программах, однако хотим вас предупредить заранее, что ассемблер - штука серьезная и нам не раз придется погружаться в пучины мудреных понятий и терминов. Но со своей стороны мы обещаем сделать эти погружения не слишком головокружительными, смягчив суровую необходимость занимательными примерами.
Возможно, вас несколько смутили только что прочитанные строки, да и раньше вам, быть может, не раз приходилось слышать, мол, писать программы на ассемблере невероятно сложно. Но, право, не так страшен ассемблер, как его малюют, а что касается сложностей, так вспомните свои первые шаги в том же Бейсике.

Загрузочная картинка к игре JUGGERNAUT
Часто только это изображение и называют заставкой, хотя на самом деле это лишь первая ее часть, помогающая игроку морально подготовиться к тяготам предстоящего сражения или лишениям, связанным с поисками сокровищ. Однако в солидных игровых программах заставка чаще всего разбивается на несколько частей, именуемых кадрами. Объясняется это очень просто: перед началом игры на экране должно появиться столь большое количество информации, что впихнуть ее в один кадр практически невозможно.

Меню программы EAGLES NEST
Игровое пространство
Игровое пространство программы DIZZY4
Взаимодействие с играющим
Оценка игровой ситуации
Оценка игровой ситуации в игре GUN FRIGHT
Звуковое сопровождение игры
Машинные коды и ассемблер

Спрайт из игры FIST
Рассмотрим пример вывода спрайта произвольной конфигурации (7.1). Не правда ли, многие узнали в нем одного из персонажей игры FIST. Все дело в том, что этот спрайт как нельзя лучше демонстрирует эффективность предложенной нами процедуры PTBL, поскольку его форма заметно отличается от прямоугольной. Управляющая часть программы получилась довольно короткой

Спрайт-генератор
Спрайт-генератор - 2
Спрайт-генератор - 3
Спрайт-генератор - 4
Спрайт-генератор - 5
Мультипликация
Перемещение спрайта скроллингом окна
Перемещение спрайта скроллингом окна - 2
Перемещение спрайта скроллингом окна - 3
Перемещение спрайта скроллингом окна - 4

Ассемблер Это просто! Учимся программировать

Когда мы вызываем какую-нибудь подпрограмму командой call, процессор кладет в стек адрес следующей за командой call инструкции. Следить за стеком позволяет пара регистров SS:SP. Многие уже, наверное, заметили, что при запуске какой-нибудь com-программы регистр SP равен 0FFFEh, а сегментный регистр SS, как уже упоминалось в предыдущих главах, равен нашему единственному сегменту (CSEG) (как и CS, DS, ES).

Программа из прошлой главы
Немного теории
Немного теории - 2
Программка для практики
Программа из прошлого выпуска
Программа из прошлого выпуска - 2
Программка для практики
Ассемблирование программ
Ошибки при ассемблировании программы
Регистры данных (Таблица № 1)

Справочное руководство по языку Ада-83

Огромное внимание к языку Ада объясняется тем обстоятельством, что в нем формализовано около 40 современных методов программирования доступными техническими и лексическими средствами. Это, с одной стороны, усложняет реализацию языка, а с другой стороны, упрощает его использование во многих областях применения ЭВМ.
Стандарт описания языка Ада обеспечивает совместимость систем программирования на уровне исходных текстов программ. Внедрение единого языка программирования должно привести к существенному сокращению количества дублирующих работ и учебных курсов по применению ЭВМ, а также будет способствовать взаимопониманию различных участников создания программ (заказчиков, программистов и пользователей). Так, например, в США стандарт описания языка Ада за последние три года обеспечил разработку 160 совместимых по языку компиляторов, из которых 70 прошли аттестацию как компиляторы, соответствующие полному описанию языка. В СССР существует более 20 групп, реализующих системы программирования на основе языка Ада. Назрела необходимость в стандартизации описания языка в СССР и в странах - членах СЭВ. Публикация перевода этой книги будет способствовать достижению совместимости по исходным текстам программ всех систем программирования на различных типах ЭВМ.
Перевод книги существенно осложнялся большим объемом описания языка (63 зарезервированных слова, 180 синтаксических понятий, 1000 семантических понятий, 5000 общеупотребительных повествовательных слов) и ряд противоречивых требований к терминологии: учет контекста, независимость, уникальность, краткость, отсутствие синонимии. Переводчики стремились придерживаться терминологических традиций отечественной литературы по программированию, чему способствовала пятилетняя дискуссия по терминологии в Рабочей группе по языку программирования Ада Комиссии по языкам и системам программирования при ГКНТ СССР.
Книга может быть использована как пособие по проектированию, разработке, отладке и сопровождению больших и сверхбольших программ. Ее изучение позволит программистам уточнить свои знания языка Ада и более эффективно осуществлять поиск ошибок в текстах программ.

Введение
Ада — это язык программирования, разработанный в соответствии с так называемыми стилмановскими требованиями, определенными МО США. Более того, эти требования определили язык с мощными выразительными возможностями, пригодный для широкого класса задач. Вследствие этого языку Ада присущи как свойства классических языков, подобных языку Паскаль, так и свойства, характерные для специализированных языков.

Область действия стандарта
Структура справочного руководства
Цели и источники разработки
Обзор свойств языка
Метод описания и синтаксические обозначения
Классификация ошибок

Лексика
Текст программы состоит из текстов одной или нескольких компиляций. Текст компиляции — это последовательность лексических элементов (лексем), каждая из которых состоит из символов. В этой главе приведены правила составления лексем. Кроме того, в ней описаны прагмы, задающие определенную информацию для компилятора.

Набор символов
Лексемы, разделители и ограничители
Идентификаторы
Числовые литералы
Примечание.
Примечание. 2
Символьные литералы
Строковые литералы
Комментарии
Примечание

Описания и типы
В языке определены понятия, объявляемые явно или неявно описаниями. К таким понятиям относятся, например: числовой литерал, объект, дискриминант, компонента записи, параметр цикла, исключение, тип, подтип, подпрограмма, пакет, задачный модуль, настраиваемый модуль, одиночный вход, семейство входов, формальный параметр (подпрограммы, входа, настраиваемой подпрограммы), формальный параметр настройки, именованный блок или цикл, помеченный оператор, а также операция

Объекты и именованные числа
Примечание
Типы и подтипы
Производные типы
Примечание
Скалярные типы
Примечание
Примечание 2
Примечание 3
Примечание 4

Имена и выражения
Имена могут обозначать понятия, описанные явно или неявно (см. 3.1). Имена могут обозначать также объекты, указанные ссылочными значениями, подкомпоненты и отрезки объектов и значений, одиночные входы, семейства входов и входы семейства входов. Наконец, имена могут обозначать атрибуты этих понятий и объектов.

Имена
Литералы
Примечание 1
Агрегаты
Выражения
Операции и вычисление выражения
Примечание 2
Примечание 3
Примечание 4
Преобразование типа

Операторы
Оператор определяет действие, которое предстоит выполнить; процесс реализации этого действия называется выполнением оператора. В данной главе описываются общие правила, применимые ко всем операторам, и некоторые операторы. Оператор вызова процедуры описывается в гл. 6. Операторы вызова входа, задержки, принятия, отбора и прекращения описываются в гл. 9, оператор возбуждения — в гл. 11, а оператор кода — в гл. 13.

Простые и составные операторы
Операторы присваивания
Примечание 1
Примечание 2
Условные операторы
Примечание 3
Операторы выбора
Примечание 4
Операторы цикла
Операторы блока

Подпрограммы
Подпрограмма — это программный модуль, выполнение которого инициируется вызовом подпрограммы. Существуют две формы подпрограмм: процедуры и функции. Вызов процедуры — это оператор; вызов функции является выражением. Вызов функции возвращает значение. Определение подпрограммы может состоять из двух частей: описания подпрограммы, определяющего соглашения о ее вызове, и тела подпрограммы, определяющего ее выполнение.

Описание подпрограммы
Виды формальных параметров
Тела подпрограмм
Вызовы подпрограмм
Функции
Совмещение операций

Пакеты
Пакеты допускают спецификацию групп логически связанных понятий. Простейшие формы пакета специфицируют совокупность общих объектов и описаний типов. Вообще пакеты могут использоваться для спецификации групп взаимосвязанных понятий, включающих также подпрограммы, которые могут быть вызваны извне пакета, тогда как действие внутри пакета остается скрытым и защищенным от внешних пользователей.

Структура пакета
Спецификации и описания пакетов
Тела пакетов
Описания личных типов и субконстант
Пример пакета работы с таблицами
Пример пакета обработки текстов

Правила видимости
В этой главе описаны правила, определяющие область действия описания, и правила, определяющие видимость идентификаторов в различных точках текста программы. Формулировка правил видимости использует понятие зоны описания.

Зона описания
Области действия описаний
Видимость
Описания переименования
Примечание
Стандартный пакет

Задачи
Выполнение программы без задач определено в терминах последовательного выполнения ее действий в соответствии с правилами, сформулированными в других главах данного руководства. Можно предположить, что эти действия выполняет один логический процессор. Под параллельным выполнением задач понимают следующее. Предполагается, что каждую задачу выполняет отдельный логический процессор. Различные задачи (на различных логических процессорах) выполняются независимо, за исключением точек их синхронизации.

Спецификации задач и тела задач
Заданные типы и задачные объекты
Примечание
Выполнение и активизация задачи
Зависимость задач. Завершение задач
Входы, вызовы входов и операторы принятия
Операторы задержки, длительность и время
Примечание
Операторы отбора
Условные вызовы входов

Структура программы и результат компиляции
В этой главе описываются общая структура программы и средства раздельной компиляции. Программа представляет собой набор из одного или нескольких компилируемых модулей, подаваемых на вход компилятора в виде одной или нескольких компиляций. Каждый компилируемый модуль определяет раздельную компиляцию некоторой конструкции. Ею может быть описание или тело подпрограммы, описание или тело пакета, описание или тело настраиваемого модуля или же конкретизация настройки. Кроме того, компилируемый модуль может быть субмодулем, т.е. телом подпрограммы, пакета, задачи, или настраиваемым модулем, описанным внутри другого компилируемого модуля.

Компилируемые модули. Библиотечные модули
Субмодули компилируемых модулей
Порядок компиляции
Программная библиотека
Предвыполнение библиотечных модулей
Оптимизация программы

Исключения
В этой главе определяются средства обработки ошибок или других исключительных ситуаций, которые возникают при выполнении программы. Такая ситуация называется исключением. Возбуждение исключения следует понимать как прекращение нормального выполнения программы для обработки соответствующей ситуации. Ответное действие на возбуждение исключения называется обработкой исключения.

Описания исключений
Обработчики исключений
Операторы возбуждения
Примечание
Обработка исключений
Исключения, возбуждаемые при взаимодействии
Исключения и оптимизация
Подавление проверок

Настраиваемые модули
Настраиваемый модуль — это программный модуль, являющийся настраиваемой подпрограммой или настраиваемым пакетом, это также шаблон с параметрами или без них, по которому могут быть получены соответствующие (ненастраиваемые) подпрограммы или пакеты. Итоговые программные модули называются экземплярами исходного настраиваемого модуля.

Описание настройки
Настраиваемые тела
Конкретизация настройки
Пример настраиваемого пакета

Спецификаторы представления и особенности, зависящие от реализации
В этой главе описываются спецификаторы представления, зависящие от реализации особенности, а также некоторые возможности, используемые в системном программировании.

Спецификаторы представления
Спецификаторы длины
Примечание
Спецификаторы представления перечисления
Спецификаторы представления записей
Спецификаторы адреса
Изменение представления
Системный пакет
Вставки машинных кодов
Связь с другими языками

Ввод-вывод
Ввод-вывод в языке обеспечивается предопределенными пакетами. Настраиваемые пакеты SEQUENTIAL_IO и DIRECT_IO определяют операции ввода-вывода, которые применимы для файлов с элементами данного типа. В пакете TEXT_IO даны дополнительные операции ввода-вывода текстов. В пакете IO_EXCEPTIONS определены исключения, необходимые при работе трех указанных пакетов. Наконец, пакет LOW_LEVEL_IO позволяет осуществлять непосредственное управление периферийными устройствами.

Внешние файлы и файловые объекты
Файлы последовательного и прямого доступа
Ввод-вывод текстов
Примечание 1
Примечание 2
Примечание 3
Исключения при вводе-выводе
Спецификация пакета исключений ввода-вывода
Ввод-вывод низкого уровня
Пример ввода-вывода

Приложения
Атрибуты, предопределенные в языке
Прагмы, предопределенные в языке
Предопределенное окружение языка
Термины и определения
Сводка синтаксиса
Характеристики, зависящие от реализации

"Адское" программирование Ada-95 -Компилятор GNAT

Характерной особенностью языка программирования Ада является то, что он специально проектировался как инструмент разработки больших программных комплексов реального времени для встроенных компьютерных систем, к которым предъявляются высокие требования надежности. В первую очередь, такие требования предъявляются к системам военного предназначения. Однако, это не исключает применение языка Ада для решения всевозможных задач вычислительного характера, параллельной обработки, моделирования промышленных и технологических процессов в реальном масштабе времени, системного программирования и т.д. Более того, язык Ада часто рассматривается как язык общего назначения.
К сожалению, существующая на русском языке литература, посвященная языку программирования Ада, в большинстве случаев, относится к старому стандарту языка Ада (Ada-83). Таким образом, основной целью данной книги является попытка ликвидировать образовавшийся информационный пробел. Данная работа рассматривает средства языка программирования Ада в соответствии с действующим в настоящее время стандартом Ada-9 Представленный материал может быть полезен и интересен широкому кругу специалистов, чья работа связана с вычислительной техникой и программированием.

Основное содержание материала логически разделено на четыре части:
Первая часть посвящена обзору средств и возможностей языка Ада, в соответствии с действующим в настоящее время стандартом Ada-9
Вторая часть служит дополнением к первой части, и ее цель - дать некоторое представление об идеологии программирования на языке Ада.
Третья часть посвящена инструментальным средствам, и она рассматривает поставку компилятора GNAT, поскольку он является свободно доступным (включая исходные тексты).
Четвертую часть составляют приложения, которые содержат некоторый справочный и информационный материал.

Следует заметить, что представленный материал не можт расцениваться как исчерпывающий. Так, ввиду ограниченности объема книги, опущено обсуждение целого ряда самостоятельных тем, примерами которых могут служить: "Спецификация семантического интерфейса Ады" (ASIS - Ada Semantic Interface Specification), программирование распределенных систем (Distributed Systems), программирование систем реального времени (Real-Time Systems)...
Необходимо также заметить, что данная работа не может расцениваться как перевод стандарта, поэтому, в случае возникновения каких-либо конфликтных ситуаций, которые могут возникнуть при реальной работе, необходимо непосредственно обращаться к Ada-95 Reference Manual, который всегда является истиной в последней инстанции.

Введение
В 1974 году в Министерстве Обороны США (US Department of Defence / US DoD) осознали, что они теряют много времени, усилий и денег на разработку и сопровождение встроенных компьютерных систем (например, систем наведения ракет).
В это время использовалось около 450 различных языков программирования и/или их расширений. Это увеличивало затраты времени и средств на разработку новых систем и на постоянную техническую переподготовку персонала для обслуживания уже созданных систем. Кроме того, сопровождению существующих систем мешало отсутствие стандартизации в инструментах поддержки (редакторы, компиляторы и т.д.). Все эти факторы привели к тому, что в Министерстве Обороны США осознали необходимость в едином мощном языке программирования, который должен был бы использоваться всеми поставщиками встроенных компьютерных систем.

Сюрпризы переводной терминологии
Давайте детально рассмотрим из каких частей состоит текст этой программы.Строка "procedure Hello is" является заголовком процедуры и она указывает имя нашей процедуры.Далее, между зарезервированными словами begin и end, располагается тело процедуры Hello.В этом примере тело процедуры очень простое и состоит из единственной инструкции "Put_Line("Hello World!");".Эта инструкция осуществляет вывод приветствия на экран, вызывая процедуру Put_Line.Процедура Put_Line располагается в пакете текстового ввода/вывода Ada.Text_IO, и становится доступной благодаря спецификации контекста в инструкциях "with Ada.Text_IO;" и "use Ada.Text_IO;" (спецификация контекста необходима для указания используемых библиотечных модулей). Здесь, спецификатор контекста состоит из двух спецификаторов: спецификатора совместности with и спецификатора использования use.

Библиотека и компилируемые модули
Лексические соглашения
Комментарии
Идентификаторы
Литералы
Зарезервированные слова
Методы Ады: подпрограммы, операции и знаки
Инструкции, выражения и элаборация
Директивы компилятора
Скалярные типы данных языка Ада.

Пакет Ada.Direct_IO
Прежде чем приступить к непосредственному знакомству с Адой, есть необходимость заметить, что в англоязычной литературе, посвященной вычислительной технике в целом и программированию в частности, достаточно часто встречаются такие английские термины как operator, operation и statement.

Пакет Ada.Direct_IO
Потоки ввода/вывода
Параметры командной строки
Переменные окружения программы
Ссылочные типы (указатели)
Ссылочные типы для динамической памяти
Элементарные сведения: описание, создание
Структуры данных со ссылками на себя
Освобождение пространства памяти
Пулы динамической памяти

Язык Ада - взгляд "сверху вниз"
Знакомство с языком программирования Ада можно осуществлять несколькими различными путями.Первая часть рассматривает большинство синтаксических конструкций языка программирования Ада и представляет материал по принципу "снизу вверх", демонстрируя конструкции языка Ада с постепенно возрастающей структурой и/или семантической сложностью.

Абстракция данных
Объектно-ориентированное программирование
Сущность абстрактного типа данных
Структура абстрактного типа данных
Средства для работы с абстрактными типами
Пакеты как средство абстракции данных
Сравнение пакетов и классов
Абстракция стека
Абстракция очереди
Еще один пример стека

Доступность средств разработки
Практическое использование любого языка программирования требует наличия соответствующих средств разработки, и язык программирования Ада в этом случае не является исключением. В настоящее время существует целое множество фирм, которые предлагают различные средства для ведения разработки программного обеспечения с использованием языка программирования Ада.

Система Ада-компилятора GNAT
Установка GNAT
Установка GNAT на Windows
Установка GNAT на Linux
Установка бинарных файлов от ACT
Установка RPM-пакетов ALT
Общие правила наименования файлов
Использование других имен файлов
Альтернативные схемы именования
Сборка первой программы

Директивы компилятора
В данном приложении приводится краткое описание директив компилятора. Более подробное описание использования этих директив содержится в справочных руководствах по языку программирования Ада и по реализации компилятора GNAT.

Стандартные директивы Ады
Директивы определенные в GNAT
Атрибуты типов.
Стандартно определенные атрибуты типов
Атрибуты типов в GNAT
Спецификация пакета System.
Спецификация пакета Standard.
Пакет Ada.Text_IO
Пакет Ada.Text_IO.Integer_IO
Пакет Ada.Text_IO.Modular_IO

Программирование на языке Пролог для искусственного интеллекта

В средние века знание латинского и греческого языков являлось существенной частью образования любого ученого. Ученый, владеющий только одним языком, неизбежно чувствовал себя неполноценным, поскольку он был лишен той полноты восприятия, которая возникает благодаря возможности посмотреть на мир сразу с двух точек зрения. Таким же неполноценным ощущает себя сегодняшний исследователь в области искусственного интеллекта, если он не обладает основательным знакомством как с Лиспом, так и с Прологом - с этими двумя основополагающими языками искусственного интеллекта, без знания которых невозможен более широкий взгляд на предмет исследования.
Сам я приверженец Лиспа, так как воспитывался в Массачусетском технологическом институте, где этот язык был изобретен. Тем не менее, я никогда не забуду того волнения, которое я испытал, увидев в действии свою первую программу, написанную в прологовском стиле. Эта программа была частью знаменитой системы Shrdlu Терри Винограда. Решатель задач, встроенный в систему, работал в "мире кубиков" и заставлял руку робота (точнее, ее модель) перемещать кубики на экране дисплея, решая при этом хитроумные задачи, поставленные оператором.
Решатель задач Винограда был написан на Микропленнере, языке, который, как мы теперь понимаем, был своего рода Прологом в миниатюре. Любой прологоподобный язык заставляет программиста мыслить в терминах целей, поэтому, несмотря на все недостатки Микропленнера, достоинством этой программы было то, что в ее структуре содержались многочисленные явные указания на те или иные цели. Процедуры-цели "схватить", "освободить", "избавиться", "переместить", "отпустить" и т.п. делали программу простой и компактной, а поведение ее казалось поразительно разумным.
Решатель задач Винограда навсегда изменил мое программистское мышление. Я даже переписал его на Лиспе и привел в своем учебнике по Лиспу в качестве примера - настолько эта программа всегда поражала меня мощью заложенной в ней философии "целевого" программирования, да и само программирование в терминах целей всегда доставляло мне удовольствие.

Язык Пролог
Пролог - это язык программирования, предназначенный для обработки символьной нечисловой информации. Особенно хорошо он приспособлен для решения задач, в которых фигурируют объекты и отношения между ними. На рис. 1.1 представлен пример - родственные отношения. Тот факт, что Том является родителем Боба, можно записать на Прологе так...

Дерево родственных отношений.
Отношение родитель родителя
Упражнения
Расширение программы-примера
Графы отношений родитель родителя
Определение отношения сестра.
Упражнения
Рекурсивное определение правил
Пример отношения предок
Пары предок-потомок

Синтаксис и семантика Пролог программ
В данной главе дается систематическое изложение синтаксиса и семантики основных понятий Пролога, а также вводятся структурные объекты данных.

Объекты данных
Обьекты данных пролога.
Обьекты данных пролога 2
Обьекты данных пролога 3
Обьекты данных пролога 4
Обьекты данных пролога 5
Обьекты данных пролога 6
Структуры
Дата - пример структурного объекта:
Простые геометрические объекты.

Списки, операторы, арифметика
В этой главе мы будем изучать специальные способы представления списков. Список - один из самых простых и полезных типов структур. Мы рассмотрим также некоторые программы для выполнения типовых операций над списками и, кроме того, покажем, как можно просто записывать арифметические выражения и операторы, что во многих случаях позволит улучшить "читабельность" программ. Базовый Пролог (глава 2), расширенный этими тремя добавлениями, станет удобной основой для составления интересных программ.

Представление списков
Представление списка в виде дерева.
Некоторые операции над списками
Конкатенация списков.
Процедура находит элемент
Упражнения
Отношения принадлежит и подсписок.
Один из способов построения перестановки
Упражнения
Операторная запись (нотация)

Использование структур: примеры
Структуры данных вместе с сопоставлением, автоматическими возвратами и арифметикой представляют собой мощный инструмент программирования. В этой главе мы расширим навыки использования этого инструмента при помощи следующих учебных программных примеров: получение структурированной информации из базы данных, моделирование недетерминированного автомата, планирование маршрута поездки и решение задачи о расстановке восьми ферзей на шахматной доске.

Получение информации из базы данных
Структурированная информация о семье.
Описания объектов по их структурным
Упражнения
Абстракция данных
Упражнение
Моделирование недетерминированного автомата
Пример недетерминированного автомата.
Допущение цепочки при чтении
Упражнения

Управление перебором
Мы уже видели, что программист может управлять процессом вычислений по программе, располагая ее предложения и цели в том или ином порядке. В данной главе мы рассмотрим еще одно средство управления, получившее название "отсечение" (cut) и предназначенное для ограничения автоматического перебора.

Ограничение перебора
Двухступенчатая функция
В точке, помеченной словом "отсечение"
Примеры, использующие отсечение
Упражнения
Отрицание как неуспех
Упражнения
Программа для решения задачи о 8 ферзях.
Трудности с отсечением и отрицанием
Резюме

Ввод и вывод
В этой главе мы рассмотрим некоторые встроенные средства для записи данных в файл и считывания их из файла. Такие средства можно также применять и для форматирования объектов данных программы, чтобы получить желаемую форму их внешнего представления. Одновременно мы рассмотрим и средства синтеза и декомпозиции атомов.

Связь с файлами
Связь между пролог-программой и файлами.
Обработка файлов термов
Улучшенный формат вывода термов
Программа, обеспечивающая вывод в формате
Упражнения
Обработка символов
Упражнение
Создание и декомпозиция атомов
Процедура для преобразования предложения

Другие встроенные процедуры
В данной главе мы изучим некоторые другие, не упоминавшиеся ранее встроенные процедуры, предназначенные для более серьезного программирования на Прологе. Эта новые процедуры дают возможность запрограммировать операции, которые известными нам средствами запрограммировать невозможно. Один набор таких процедур касается обработки термов: эти процедуры проверяют, была ли некоторая переменная конкретизирована целым числом, они разбирают термы на части, конструируют новые термы и т.д.

Проверка типов термов
Поразрядное сложение
Программа для арифметических ребусов.
Упражнения
Создание и декомпозиция термов
Процедура подстановки в терм
Упражнения
Различные виды равенства
Работа с базой данных
Упражнения

Стиль и методы программирования
В этой главе мы рассмотрим некоторые общие принципы хорошего программирования и обсудим, в частности. следующие вопросы: "Как представлять себе прологовские программы? Из каких элементов складывается хороший стиль программирования на Прологе? Как отлаживать пролог - программы? Как повысить их эффективность?"

Общие принципы хорошего программирования
Как представлять себе программы на прологе
Стиль программирования
Отладка
Эффективность
Конкатенация списков в виде разностных пар.
Вычисление 6-го числа фибоначчи
Вычисление 6-го числа фибоначчи -2
Отношения в последовательности фибоначчи
Упражнения

Пролог в искусственном интеллекте
В главе 3 была введена специальная система обозначений для списков (специальная прологовская нотация), которую мы и использовали в последующем изложении. Разумеется, это был всего лишь один из способов представления списков на Прологе.

Сортировка списка процедурой быстрсорт.
Быстрая сортировка.
Эффективная реализация процедуры быстрсорт
Упражнения
Представление множеств двоичными деревьями
Двоичное дерево.
Представление двоичных деревьев.
Двоичный справочник. Элемент 6 найден
Поиск элемента х в двоичном справочнике.
Дерево д

Усовершенствованные методы представления множеств деревьями
В данной главе мы рассмотрим усовершенствованные методы представления множеств при помощи деревьев. Основная идея состоит в том, чтобы поддерживать сбалансированности или приближенную сбалансированность дерева, с тем чтобы избежать вырождения его в список. Механизмы балансировки деревьев гарантируют, даже в худшем случае, относительно быстрый доступ к элементам данных, хранящихся в дереве, при логарифмическом порядке времени доступа.

Двоично - троичные справочники
Разбалансированный двоичный справочник.
Отмеченный путь показывает процесс поиска
Вставление нового элемента в справочник
Объекты, показанные на рисунке
Некоторые из случаев работы отношения
Вставление элемента в 2-3 справочник
Упражнения
Приближенно сбалансированное дерево
Задача вставления элемента в avl-справочник

Основные стратегии решения задач
В данной главе мы сосредоточим свое внимание на одной общей схеме для представления задач, называемой пространством состояний. Пространство состояний - это граф, вершины которого соответствуют ситуациям, встречающимся в задаче ("проблемные ситуации"), а решение задачи сводится к поиску пути в этом графе. Мы изучим на примерах, как формулируются задачи в терминах пространства состояний, а также обсудим общие методы решения задач, представленных в рамках этого формализма.

Предварительные понятия и примеры
Задача перестановки кубиков.
"Игра в восемь" в форме графа.
Стратегия поиска в глубину
Пример простого пространства состояний
Поиск в глубину заканчивается
Отношение вглубину( путь, в, решение).
Программа поиска в глубину без зацикливания.
Программа поиска в глубину с ограничением
Упражнения

Поиск с предпочтением: эвристический поиск
Один из путей использования эвристической информации о задаче - это получение численных эвристических оценок для вершин пространства состояний. Оценка вершины указывает нам, насколько данная вершина перспективна с точки зрения достижения цели. Идея состоит в том, чтобы всегда продолжать поиск, начиная с наиболее перспективной вершины, выбранной из всего множества кандидатов. Именно на этом принципе основана программа поиска с предпочтением, описанная в данной главе.

Поиск с предпочтением
Построение эвристической оценки стоимости
Поиск кратчайшего маршрута
Программа поиска с предпочтением.
Отношение расширить: расширение дерева
Связь между g-оценкой вершины
Упражнение
Поиск c предпочтением
Процедуры для головоломки "игра в восемь",
Три стартовых позиции для "игры в восемь"

Сведение задач к подзадачам
Представление в виде И / ИЛИ-графов наиболее хорошо приспособлено для задач, которые естественным образом разбиваются на взаимно независимые подзадачи. Примерами таких задач могут служить поиск маршрута, символическое интегрирование, а также игровые задачи, доказательство теорем и т.п. В этой главе мы разработаем программы для поиска в И / ИЛИ-графах, в том числе программу поиска с предпочтением, управляемого эвристиками.

Представление задач в виде и / или-графов
Поиск маршрута из а в z на карте дорог
И / или-представление задачи поиска маршрута
Решить р - это значит решить р1 или р2
Пример и / или-графа: d, g и h...
Примеры и/или-представления задач
Решающее дерево минимальной стоимости
Задача о ханойской башне
Формулировка игровой задачи для...
Базовые процедуры поиска в и / или-графах

Экспертные системы
Экспертная система - это программа, которая ведет себя подобно эксперту в некоторой проблемной области. Она должна иметь способность к объяснению своих решений и тех рассуждений, на основе которых эти решения были приняты. Часто от экспертной системы требуют, чтобы она могла работать с неточной и неполной информацией.

Функции, выполняемые экспертной системой
Грубая структура экспертной системы
Структура экспертной системы.
Правила типа "если-то"
"Если-то"-правило медицинской
Два правила из демонстрационной
Правило уточнения плана из системы al3
Простая база знаний для идентификации
Соединения между предохранителями
Определение степени правдоподобия гипотезы

Игры
В этой главе мы рассмотрим методы программирования игр двух лиц с полной информацией (таких, как шахматы). Для игр, представляющих интерес, деревья возможных продолжений слишком велики, чтобы можно было говорить о полном переборе, поэтому необходимы какие-то другие подходы. Один из таких методов, основанный на минимаксном принципе, имеет эффективную реализацию, известную под названием "альфа-бета алгоритм". В дополнение к этому стандартному методу, мы разработаем в этой главе программу на основе Языка Советов

Игры двух лиц с полной информацией
Сложность игровых деревьев в шахматах
Проект
Минимаксный принцип
Статические (нижний уровень)
Упрощенная реализация минимаксного принципа.
Альфа-бета алгоритм: эффективная реализация
Дерево 15.2 после применения
Реализация альфа-бета алгоритма.
Проект

Программирование в терминах типовых конфигураций
В этой главе мы будем заниматься системами, ориентированными на типовые конфигурации ("образцы"), рассматривая их как некоторый специальный подход к программированию. Языком, ориентированным на образцы, можно считать и сам Пролог. Мы реализуем небольшой интерпретатор для простых программ этого типа и постараемся передать дух такого "конфигурационной" программирования на нескольких примерах.

Архитектура типовых конфигураций
Система, управляемая типовыми конфигурациями
Основной цикл работы системы
Процесс вычисления делителя
Простой интерпретатор программ
Программа, управляемая образцами
Простой интерпретатор для программ
Докаэательства теорем
Доказательство теоремы (а=b)(b=с)=(a=с)
Автоматическое доказательство теорем


Linux mini-HOWTO
Язык программирования C++. Вводный курс
Документация по Clarion
Классика баз данных
Классика баз данных - статьи
Основы построения объединенных сетей по технологиям CISCO
Беспроводные сети
Самоучитель по Corel 11
Работа с цветом
Введение в японскую анимацию
Цвет и линия
Технологии COM
Сущность технологии COM
Справочник параметров командной строки
Параметры командной строки
Руководство по выработке правил разграничения доступа к ЭВМ
Подключение приставочного джойстика к PC
Разработка компиляторов
Сети компьютеров в вашем офисе
Стратегическое планирование сетей масштаба предприятия