47621 (Мова програмування Assembler)

2016-07-30СтудИзба

Описание файла

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

Онлайн просмотр документа "47621"

Текст из документа "47621"

Лекція 1 Вступна лекція

  1. Загальний огляд дисципліни

  2. Основні аспекти створення системних програм

  3. Типи мов програмування: інтерпретатори, транслятори, компілятори та компоновщики

  4. Моделі пам’яті та компонування програм

1. Загальний огляд дисципліни

Дисципліна "системне програмування" зазвичай викладається в технічних вузах як курс якоїсь окремої мови програмування, частіше всього - це асемблер або С. Насправді ж ця дисципліна не є черговим курсом з методики створення програм, а є курсом з тонкощів операційної системи, які можна використовувати в будь-якій мові програмування, де є можливість підключення або зовнішніх модулів або асемблерних вставок безпосередньо до програмного коду.

Отже, сформулюємо чітке визначення курсу:

Системне програмування – дисципліна, яка вивчає засоби та функції операційної системи, пов’язані з керуванням нею, периферійними пристроями та обміну даними між ними.

Історично склалось так, що існують дві мови, які використовуються для роботи на рівні операційної системи – асемблер та С. Перша мова бере свій початок від найпершого компілятора – Автокоду (1952), розробленого Аліком Гленні для комп'ютера Манчестер Марко I. Цей компілятор вперше використовував мнемонічне (у вигляді команд та відповідних операндів) позначення основних операцій, які здатна виконувати машина, які потім перетворювались на коди, зрозумілі машині. Цей процес був названий трансляцією. А мови, похідні від Автокоду, були названі асемблерами (від слова assembly – "збирати", адже програми збирались з окремих "цеглинок", мнемонічних команд). Ці мови працювали фактично на найнижчому рівні, на рівні процесора та його функцій, а пізніше – на рівні функцій операційної системи.

Саме тоді було закладено основи дисципліни системного програмування і закладено основні задачі, які і нині розв'язуються за допомогою його методів. Це насамперед керування процесором та керування периферійними пристроями, які під’єднані до загальної шини, і керуються цим процесором. З винайденням операційної системи, на яку покладалися загальні задачі обміну даними між процесором, пам'яттю та периферійними пристроями, основна задача системного програмування змінилась – оскільки керування обміну даними між периферійними пристроями перебрала на себе операційна система, до задач системного програмування увійшло завдання керування ресурсами, які контролює операційна система. Саме такою основна задача системного програмування є і по сьогодні. Отже, сформулюємо основну задачу системного програмування: створення програм для керування безпосередньо процесором та ресурсами операційної системи (пам'яттю та периферійними пристроями).

2. Основні аспекти створення системних програм

Перед тим, як ввести поняття системної програми, розглянемо спрощену архітектуру комп’ютерної системи:

На рівні мікрокоду як правило, працюють прошиті в мікросхемі програми, наприклад, MMX (MultiMedia Extended Set) чи SSE (Sequenced and Structured Extensions/Поширення для роботи з послідовностями та структурами), які фактично є програмами, зашитими в процесор. Ними системне програмування майже не займається, хоч може використовувати їх ресурси, чи викликати такі програми.

На рівні команд процесора працюють такі базові пакети, як BIOS та операційна система. Загалом, системне програмування займається написанням і того, і іншого, але останнім часом у світі існує тенденція щодо виділення їх в окремі наукові дисципліни. На рівні команд процесора також працюють так звані програми нульового рівня, тобто такі програми, які реалізовують основні функції операційної системи – обробники переривання, драйвери тощо.

На рівні операційної системи працює більшість користувацьких програм. Коди програм базуються на використанні переривань, драйверів, функцій операційної системи, написаних рівнем нижче. Слід розрізняти інтерфейс програміста та функції операційної системи. Перше – це набір вже написаних програм на певній мові програмування, і сформованих у так звану бібліотеку, якою може користуватись програміст. Друге – це прошитий у ядро операційної системи програмний код, який виконується в залежності від того, які переривання були збуджені, і які значення регістрів при цьому були. Інтерфейс програміста прийнято називати рівнем користувача, а функції операційної системи – рівнем операційної системи.

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

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

3. Типи мов програмування: інтерпретатори, транслятори, компілятори та компоновщики

Більшість системних програм, як вже говорилося вище, пишеться на мовах асемблер та С. Загалом, системні програми можна писати на будь-якій мові, де є можливість працювати безпосередньо з процесором, пам'яттю та функціями операційної системи. Всі такі мови поділяються на два великі класи: інтерпретовані та трансльовані.

Інтерпретовані – це мови, програми на яких перетворюються на машинний код тільки під час виконання. Загальна схема роботи програм на таких мовах має вигляд:

На цій діаграмі ми бачимо, що між програмою та операційною системою є ще "перетворювач" (інтерпретатор), який послідовно читає програмний код, і послідовно на льоту перетворює його на машинний код. Прикладом такої мови є мова Rexx, розроблена IBM для операційної системи PCDOS. Такі програми, зазвичай, повільніші за трансльовані, але їх простіше редагувати, оскільки виконується не машинний код, а безпосередньо текст програми: рядок за рядком.

Трансльовані – це такі мови, програмний код яких цілком може бути безпосередньо перетворений у машинний код, і поширюватись у вигляді цілісного двійкового (виконуваного) модуля. Такий підхід дозволяє аналізувати код, і оптимізувати його, враховуючи при перетворенні не лише поточний рядок, а й попередні, і наступні. Такий процес називається компіляцією:

Перші два етапи називаються компіляцією, тобто утворення певного кістяку, за якими буде будуватись вихідний програмний код. Третій етап називається трансляцією, а останній – компоновкою.

Таким чином утворюється двійковий файл, який містить машинний код, і може бути зрозумілий операційній системі та безпосередньо процесору. Це значно пришвидшує програму, і тоді виконання програми має вигляд.

Як видно, ніяких проміжних програм при цьому немає, тобто програма безпосередньо працює з системою, а відтак – швидше.

4. Моделі пам’яті та загальна структура програм

Кожна системна програма обов'язково повинна відповідати певному типу пам'яті. Цим визначається, яким чином ця програма завантажуватиметься в пам'ять, які на неї накладатимуться обмеження, та які ресурси їй доступні. Ці моделі пам'яті однакові як в асемблері, так і в С, тому доцільніше їх розглянути тут. Програми складаються з сегментів (частин). Кожна з яких може бути не більша за 64 Кб. Сегмент може містити код або дані, відповідно до термінів Фон Неймана. Програма може мати сегментів трьох типів: коду, даних та стеку. Відповідно, існує 6 типів моделей пам’яті, які задають співвідношення та обмеження на ці сегменти:

Tiny (дуже малий). Дані та код знаходяться в один та тільки одному сегменті як у двійковому, так і програмному коді.

Small (малий) – Дані та код по замовчанню знаходяться в одному і тому ж самому сегменті після компіляції, але в програмному коді small можуть бути розділені на сегмент даних.

Compact (компактний). Код знаходиться в одному сегменті, але кожна змінна – фактично у своєму власному сегменті, оскільки адресується не за локальним посиланням, а шляхом точного вказання комірки. Така структура застосована, коли змінні містять великі обсяги даних.

Medium (середній) – протилежний попередньому. Дані знаходяться в одному сегменті, а кожна процедура – у своєму власному. Ця модель пам’яті дає оптимізацію при великих обсягах програмного коду в процедурах.

Large (великий)позначає тип пам’яті, де розподіл програмного коду по сегментах відбувається за вибором програміста.

Flat (плоский) – програма взагалі не поділяється на сегменти, але може містити обсяг коду даних, більше за 64 Кбайт. Деякі операційні системи такої моделі пам'яті не підтримують, однак це можна обійти за допомогою драйвера-розширювача (наприклад, dos2gw). Така модель пам’яті використовується для великих програм: Windows, Linux тощо.

Лекція 2 Класифікація мов програмування, основні поняття програмування

  1. Класифікація мов програмування за семантикою, за призначенням, за рівнем використання, за способом компіляції

  2. Поняття "транслятор", "компілятор", "інтерпретатор", "компоновщик"

  3. Загальний алгоритм створення програми

1. Класифікація мов програмування за семантикою, за призначенням, за рівнем використання, за способом компіляції

Мови програмування можна класифікувати за декількома параметрами. Найбільш поширеними є класифікація за семантикою, за призначенням, за рівнем використання та за способом компіляції. Отже, розглянемо їх:

1. За семантикою мови поділяються на імперативні та декларативні. Імперативні мови програмування є детальним викладенням якогось процесу обчислення або дій, які повинен виконати процесор або периферійний пристрій, або ж програмний засіб. Прикладом імперативних мов може слугувати будь-яка сучасна мова програмування, наприклад, C чи Assembler. На відміну від них, декларативні мови передбачають насамперед формулювання мети, тобто кінцевого результату. До декларативних мов належать спеціалізовані мови, такі як Prolog або Occam, але найбільш поширеними мовами цього типу є так звані "оболонки", себто командні інтерпретатори, які існують у кожній сучасній операційній системі, і в яких користувач дає операційній системі виконати певні дії над ресурсом.

2. За призначенням мови поділяються на алгоритмічні, математичні, логічні, функціональні, об’єктно-орієнтовані та спеціалізовані. До алгоритмічних належать всі мови, головним завданням яких є виконання певних задач, які піддаються формалізації. Такі мови містять ключові слова для утворення основних елементів алгоритмів – розгалужень, точок вибору, циклів, функцій тощо та відповідних структур даних. Це знову ж таки С, C++, Pascal, Ada тощо. До математичних мов належать такі мови, головною задачею в яких визнається формалізація та розв'язок математичних рівнянь. Чисто математичною мовою прийнято вважати мову Fortran. Ця мова містить виключно засоби для створення складних математичних виразів, але не містить жодного елементу алгоритму. Однак на сьогодні, більшу популярність набули так звані мішані мови, які також увібрали в собі елементи алгоритмічних мов, зберігаючи засоби для відображення математичної нотації. До таких мов належить, зокрема, MathLab. Логічні мови сконцентровані на відображенні логічних тверджень та автоматичному доказі висновків з цих тверджень. Прикладом такої мови може слугувати Prolog, створений для автоматичного доведення теорем. Функціональні мови призначені для моделювання процесів, і хоч вони містять елементи алгоритмічних мов, але їх основною задачею все-таки є процеси фактично без звертання до даних. Прикладом такої мови є Haskell - університетська розробка. Об'єктно-орієнтовані є протилежними за архітектурою. Подібно до концентрації функціональних мов на функціях та процесах, ці мови концентруються на маніпуляції даними та відносинами між ними, до яких прив'язуються відповідні дії. Класичними об'єктно-орієнтованими мовами є SmallTalk та C++. Спеціалізовані мови можуть містити будь-які конструкції та засоби, відповідно до специфіки сфери, для яких їх призначено. Так, мови розмітки документів XML та HTML містять способи вказання способу відображення даних у Web-браузері, а мова APL – методи для обробки векторних даних.

3. За рівнем використання мови поділяються на низькорівневі, високорівневі, надвисокорівневі та мішані. Низькорівневі мови працюють на рівні операційної системи та команд процесора. Найчастіше це асемблери різних типів. Високорівневі мови – на рівні так званого інтерфейсу програміста, написаного на низькорівневих мовах для забезпечення виконання певних типових задач, як, наприклад, звертання до файлової системи за допомогою більш універсальних засобів, ніж переривання або функції ОС. До цих мов можна віднести C++, Perl, Ada або Pascal. Надвисокорівневі мови, як правило, розширюють можливості певного комплексного програмного засобу, або ж побудовані на бібліотеках так званих компонентів – готових "цеглинок" для побудови кінцевого продукту. Такі мови (а точніше – діалекти, оскільки чистих мов такого типу на сьогодні не існує) – Object Pascal, Visual C++. Мішаними називають такі мови, які здатні працювати на кількох рівнях у межах однієї програми. Класичною мовою такого типу є C, яка містить засоби роботи як на низькому, так і високому рівнях.

4. За типом компіляції мови поділяються на інтерпретовані, трансльовані та мішані. Інтерпретовані мови, як вже здавалося вище, існують у вигляді відкритого програмного коду, який при виконанні рядок за рядком перетворюється в машинний код проміжною програмою-інтерпретатором. Прикладом такої мови є Rexx, Objective (діалект мови З) та Forth. Трансльовані мови цілком перетворюються в машинний код після аналізу програмного коду. Прикладами таких мов можуть слугувати більшість алгоритмічних мов на сьогодні. Мішаними називаються такі мови, які поєднують у собі кращі риси обох цих типів. Першою такою мовою була створена Sun Microsystems мова Java, яка компілюється в кросплатформений байт-код, а потім інтерпретується віртуальною машиною, яка транслює цей проміжний код у машинний код для поточного процесора. На сьогодні існує ще дві такі мови: C# та Python.

2. Поняття "транслятор", "компілятор", "інтерпретатор", "компоновщик"

Транслятор – програма, яка перетворює програмний код, викладений на певній мові програмування, у машинний код.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее