Фельдман Системное Программирование

Фельдман Системное Программирование Rating: 4,9/5 3703 votes

Название: Системное программирование на персональном компьютере Автор: Сергей Фельдман Издательство: Новый издательский дом Год: 2004 Язык: русский Тип файла: PDF Размер: 1.01 Мб Количество страниц: 512 Описание: В пособии описываются классические модели, различные алгоритмы программирования. Приводяться основы теории системного программирования. В пособии большое количество приведено примеров приложение на языке Ассемблер. Скачав книгу, вы узнаете как использовать эти знания на практике. Материал книги разделен на главы, в которых есть теория и лабораторные работы в конце.

Купить книгу «Системное программирование на персональном компьютере» автора Сергей Фельдман и другие произведения в разделе Книги. Название: Системное программирование на персональном компьютере Автор: Фельдман С.К. Издательство: Новый издательский дом Страниц: 512.

Системное

Вас интересует Системное программирование? К Вашему вниманию 16 фриланс проектов,.

Это издание можно использовать в качестве учебника. Другие новости.

УДК 004.42 ББК 32.973.26 018.2 Ф39 Рецензент: кандидат технических наук В. Райков доктор технических наук С. Валенчик Фельдман С. Ф39 Системное программирование на персональном компьютере. – М.: Бук пресс, 2006.— 512.

ISBN 5 9643 0027 8 В этом курсе лекций излагаются классические модели, методы и алго ритмы языка программирования высокого уровня, дается строгое изложение основ теории системного программирования, приводятся примеры программ на языке Ассемблер. Главное внимание уделяется объяснению того, как ис пользовать на практике полученные знания. Курс разбит на лекции, включа ющие теоретический материал и лабораторные работы. Данное издание рекомендуется в качестве дополнительного учебного пособия студентам высших учебных заведений по дисциплине «Системное программирование» и по специальности 351400 «Прикладная информатика». УДК 004.42 ББК 32.973.26 018.2. Содержание 503 Содержание Лекция 1. Основные понятия и определения Программы и программное обеспечение.3 Системное программирование.5 Этапы подготовки программы.7 Лекция 2.

Ассемблеры Программирование на языке Ассемблера. 11 Предложения языка Ассемблера. 12 Регистры.

15 Биты и байты. 15 ASCII. 16 Двоичные числа.

17 Шестнадцатеричное представление. 20 Сегменты.

21 Расширение набора команд. 23 Способы адресации.

27 Директивы. 29 Директивы определения данных. 30 Директива определения байта (DB). 33 Директива определения слова (DW). 33 Директива определения двойного слова (DD). 34 Директива определения учетверенного слова (DQ).

34 Директива определения десяти байт (DT). 35 Непосредственные операнды. 35 Директива EQU. 504 Содержание Лекция 3. Регистры Сегментные регистры: CS, DS, SS и ES.38 Регистры общего назначения: AX, BX, CX и DX.39 Регистровые указатели: SP и BP.40 Индексные регистры: SI и DI.40 Регистр командного указателя: IP.41 Флаговый регистр.41 Лекция 4.

Арифметические операции Обработка двоичных данных.43 Беззнаковые и знаковые данные. 44 Умножение. 46 Сдвиг регистровой пары DX:AX.

49 Деление. 50 Преобразование знака. 53 Обработка данных в форматах ASCII и BCD. 55 Двоично десятичный формат (BCD). 57 Сдвиг и округление.

Команды обработки строк Свойства операций над строками. 61 REP: Префикс повторения цепочечной команды. 62 MOVS: Пересылка строк.

Программирование

63 LODS: Загрузка строки. 64 STOS: Запись строки. 64 CMPS: Сравнение строк. 65 SCAS: Сканирование строк.

66 Сканирование и замена. 66 Альтернативное кодирование. 67 Дублирование образца. Содержание 505 Лекция 6. Обработка таблиц Определение таблиц.70 Прямой табличный доступ. 71 Табличный поиск.

72 Транслирующая команда XLAT. 73 Операторы типа, длина и размеры. Свойства операторов работы с экраном Команда прерывания INT. 76 Установка курсора.

Инструкция пользователя

77 Очистка экрана. 78 Использование символов возврата каретки, конца строки и табуляции для вывода на экран. 79 Расширенные возможности экранных операций. 80 Расширенный ASCII код. 85 Другие операции ввода/вывода. 86 Ввод с клавиатуры по команде BIOS INT 16H. 87 Функциональные клавиши.

89 Цвет и графика. Требования языка Комментарии в программах на Ассемблере. 93 Формат кодирования. 93 Директивы.

95 Память и регистры. 99 Инициализация программы. Ввод и выполнение программ Ввод программы. 102 Подготовка программы для выполнения.

506 Содержание Ассемблирование программы.104 Компоновка программы.106 Выполнение программы.107 Файл перекрестных ссылок.108 Лекция 10. Алгоритмы работы Ассемблеров Двухпроходный Ассемблер — первый проход.110 Структура таблиц Ассемблера. 117 Двухпроходный Ассемблер — второй проход. 118 Некоторые дополнительные директивы. 125 Директивы связывания. 126 Одно и многопроходный Ассемблер.

127 Лекция 11. Логика и организация программы Команда JMP. 129 Команда LOOP. 130 Флаговый регистр.

131 Команды условного перехода. 133 Процедуры и оператор CALL. 134 Сегмент стека.

136 Команды логических операций: AND, OR, XOR, TEST, NOT. 137 Изменение строчных букв на заглавные.

139 Команды сдвига и циклического сдвига. 139 Организация программ. 142 Лекция 12. Компоновка программ Межсегментные вызовы.145 Атрибуты EXTRN и PUBLIC.147 Компоновка программ на языке С и Ассемблере.148 Выполнение COM программы.149. Содержание 507 Выполнение EXE программы.149 Функции загрузки и выполнения программы.

152 Лекция 13. Выполнение программ Начинаем работать.155 Определение данных.159 Машинная адресация.160 Определение размера памяти.162 Специальные средства отладчика.163 Лекция 14. Макросредства Простое макроопределение.166 Использование параметров в макрокомандах. 167 Комментарии. 168 Использование макрокоманд в макроопределениях.

169 Директива LOCAL. 170 Использование библиотек макроопределений. 170 Конкатенация (&). 172 Директивы повторения: REPT, IRP, IRPC.

172 Условные директивы. 174 Директива выхода из макроса EXITM. 175 Макрокоманды, использующие IF и IFNDEF. 176 Макрос, использующий IFIDN условие. 177 Лекция 15. Макропроцессоры Основные понятия. 179 Сравнение макросредств и подпрограмм.

182 Некоторые возможности Макроязыка. 183 Локальные переменные макроопределения. 185 Присваивание значений переменным макроопределения. 186 Глобальные переменные макроопределения. 187 Уникальные метки.

508 Содержание Операторы повторений.189 Выдача сообщения.190 Завершение обработки.191 Комментарии макроопределения.191 Макрорасширения в листинге.192 Алгоритм работы Макропроцессора.193 Библиотеки макроопределений.204 Вложенные макровызовы. Вложенные макроопределения.205 Качественное расширение возможностей.207 Структурный Ассемблер.208 Объектно ориентированный Ассемблер.208 Переносимый машинный язык.209 Лекция 16. Загрузчики и редакторы связей Основные понятия.210 Формат объектного модуля.214 Алгоритм работы Непосредственно Связывающего Загрузчика.216 Лекция 17. КроссJсистемы Вычислительные системы.223 Модель регистров.226 Модель оперативной памяти.227 Модель процессора.229 Лекция 18. Ошибки программирования Классификация ошибок программирования.240 Ошибки при задании необходимых начальных условий для отдельных программ.242 Распознавание ошибок Ассемблером.243 Распространенные ошибки в драйверах ввода вывода.244 Распространенные ошибки в программах прерывания.245. Содержание 509 Лекция 19.

Введение в макроассемблер Состав пакета.247 Общие сведения. 248 Запуск макроассемблера. 249 Опции MASM. 251 LINK: линкер модулей. 254 SYMDEB: символьный отладчик программ.

265 CREF: утилита перекрестных ссылок. 295 LIB: утилита обслуживания библиотек. 296 MAKE: утилита сопровождения программ. 302 Сегментация программы.

306 Условные директивы. 314 Директивы условной генерации ошибок. 317 Макросредства.

319 Макродирективы. 320 Блоки повторений. 324 Макрооператоры. 327 Директивы определения памяти. 329 Скалярные данные. 329 Записи. 332 Структуры.

334 Описание символических имен. 336 Директивы управления файлами. 339 Управление листингом. 341 Другие директивы. 344 Глобальные объявления. 345 Инструкции процессоров. 346 Инструкции пересылки данных.

348 Инструкции общего назначения. 349 Ввод/вывод. 350 Адресные операции. 351 Операции с флагами. Содержание 511 Лабораторная работа №9.

Дисковые структуры данных DOS. 437 Лабораторная работа N10. Управление программами. 452 Что нужно знать для экзамена Функции прерывания DOS INT 21H. 461 Порты. 466 Что нужно знать для семинара Справочник по директивам языка Ассемблера. 468 Справочник по командам языка Ассемблера.

477 Список использованной литературы. Основные понятия и определения 3 Лекция 1. Основные понятия и определения Программы и программное обеспечение Программа — это данные, предназначенные для управления кон кретными компонентами системы обработки информации (СОИ) в це лях реализации определенного алгоритма. Обратить внимание: программа — это данные. Один из основных принципов машины фон Неймана — то, что и программы, и данные хранятся в одной и той же памяти. Сохраняемая в памяти программа представляет собой некоторые коды, которые могут рассматриваться как данные.

Системное

Возможно, с точки зрения программиста программа — активный компонент, она выполняет некоторые действия. Но с точки зрения процессора команды программы — это данные, кото рые процессор читает и интерпретирует. С другой стороны программа — это данные с точки зрения обслуживающих программ, например, с точ ки зрения компилятора, который на входе получает одни данные — про грамму на языке высокого уровня (ЯВУ), а на выходе выдает другие дан ные — программу в машинных кодах. Программное обеспечение (ПО) — совокупность программ СОИ и программных документов, необходимых для их эксплуатации Существенно, что ПО — это программы, предназначенные для многократного использования и применения разными пользователями. В связи с этим следует обратить внимание на ряд необходимых свойств ПО. Маша бабко торрент. 4 Основные понятия и определения Необходимость документирования По определению программы становятся ПО только при наличии документации. Конечный пользователь не может работать, не имея доку ментации.

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

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

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

Модификация предполагает изменение спецификаций на ПО. При этом, как правило, должны поддерживаться и старые специфика ции. Эволюционное развитие ПО экономит вложения пользователей. Системное программирование Системная программа — программа, предназначенная для поддер жания работоспособности СОИ или повышения эффективности ее ис пользования. Прикладная программа — программа, предназначенная для реше ния задачи или класса задач в определенной области применения СОИ.

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

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

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

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

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

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

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

Фельдман Системное Программирование

Так, если Макропроцессор заменил в программе некоторый текст A на текст B, то транслятор уже видит только текст B, и не знает, был этот текст написан программистом «своей рукой» или подставлен Макропро цессором. Следующим этапом является трансляция. Трансляция — преобразование программы, представленной на од ном языке программирования, в программу на другом языке программи рования, в определенном смысле равносильную первой. Как правило, выходным языком транслятора является машинный язык целевой вычислительной системы. (Целевая ВС — та ВС, на кото рой программа будет выполняться.) Машинный язык — язык программирования, предназначенный для представления программы в форме, позволяющей выполнять ее не посредственно техническими средствами обработки информации. Трансляторы — общее название для программ, осуществляющих трансляцию. Они подразделяются на Ассемблеры и Компиляторы — в зависимости от исходного языка программы, которую они обрабатыва ют.

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

Это создает принци пиальную возможность создавать программы из модулей, написанных на разных языках. Специфика исходного языка, однако, может сказываться на физическом представлении базовых типов данных, способах обраще ния к процедурам/функциям и т.п. Для совместимости разноязыковых модулей должны выдерживаться общие соглашения. Большая часть объ ектного модуля — команды и данные машинного языка именно в той форме, в какой они будут существовать во время выполнения програм мы. Однако, программа в общем случае состоит из многих модулей.

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

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

Загрузочный модуль сохраняется в виде файла на внешней памя ти. Для выполнения программа должна быть перенесена (загружена) в оперативную память.

Иногда при этом требуется некоторая дополни тельная обработка (например, настройка адресов в программе на ту об ласть оперативной памяти, в которую программа загрузилась). 10 Основные понятия и определения ция выполняется Загрузчиком, который обычно входит в состав опера ционной системы.

Возможен также вариант, в котором редактирование связей выполняется при каждом запуске программы на выполнение и совмещается с загрузкой. Это делает Связывающий Загрузчик. Вариант связывания при запуске более расходный, т.к. Затраты на связывание ти ражируются при каждом запуске. Но он обеспечивает: большую гибкость в сопровождении, так как позволяет менять отдельные объектные модули программы, не меняя остальных модулей; экономию внешней памяти, т.к. Объектные модули, используемые во многих программах не копируются в каждый загрузочный модуль, а хранятся в одном экземпляре.

Вариант интерпретации подразумевает прямое исполнение исход ного модуля. Интерпретация — реализация смысла некоторого синтаксически законченного текста, представленного на конкретном языке.

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

Фельдман Системное Программирование На Персональном Компьютере

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