">
Информатика Программирование
Информация о работе

Тема: Программирование на языке Assembler

Описание: Состав и назначение ОС. Характеристики современных. ОС, MS, DOS. Понятие ассемблера Разработка программы на этом языке. Этапы разработки. Прерывание. Регистры. Задание. Умения программирования никогда не будут лишними. Файловая система. Администраторы систем.
Предмет: Информатика.
Дисциплина: Программирование.
Тип: Курсовая работа
Дата: 31.08.2012 г.
Язык: Русский
Скачиваний: 95
Поднять уникальность

Похожие работы:

КУРСОВАЯ РАБОТА

По дисциплине: «Основы системы программирования»

На тему: «Программирование на языке Assembler»

2012

Содержание

Введение………………………………………………………………………….3

Состав и назначения ОС…………………………………………………………4

Характеристики современных ОС………………………………………………6

ОС MS DOS………………………………………………………………...…….7

Язык Ассемблера…………………………………………………………...…....8

Разработка программы на языке ассемблер……………………………………..9

Прерывание…………………………………………………………….……….10

Регистры…………………………………………………………………………12

Задание..……………………………………………………………...……..…..13

Заключение……………………………………………………………..…...…..14

Список литературы…………………………………….……………….………15

Введение

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

Актуальность

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

1. На других языках программирования не всегда возможно написать приложение, которое полно бы удовлетворяло требованиям. А в некоторых случаях полностью невозможно. На языке программирования Ассемблер можно написать любое приложение.

2. Иногда языки программирования высокого уровня не могут обеспечить требуемое быстродействие. А приложение созданное на Ассемблере всегда быстродействующее.

3. Размер приложений созданных на языках высокого уровня имею гораздо больший размер, чем приложения созданные на Ассемблере.

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

5. Знание языка Ассемблер дает большее преимущество перед теми, кто программирует только на языках высокого уровня. Знающий Ассемблер знает и структуру компьютера, и структуру аппаратных устройств.

Состав и назначение ОС

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

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

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

Задачи ОС заключаются в том, чтобы:

- облегчить проектирование, программирование, отладку и сопровождение программ, обеспечить их взаимодействие с аппаратурой;

- распределить ресурсы ЭВМ таким образом, чтобы обеспечить эффективную работу всех ее компонентов (центрального процессора, устройств ввода/вывода и т.п.);

- предоставить пользователям возможности общего управления машиной.

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

Главное назначение ОС – управление ресурсами компьютера. Операционная система управляет следующими основными ресурсами: процессорами, памятью, устройствами ввода/вывода, данными. При этом операционная система реализует следующие функции:

определяет интерфейс пользователя;

обеспечивает разделение аппаратных средств между пользователями;

планирует доступ пользователей к общим ресурсам;

обеспечивает эффективное выполнение операций ввода-вывода;

осуществляет восстановление информации и вычислительного процесса в случае ошибок;

обеспечивает сохранность данных и защиту одной программы от другой;

Операционная система взаимодействует с: операторами ЭВМ, прикладными программистами, системными программистами, административным персоналом, программами, аппаратными средствами, пользователями.

Операторы ЭВМ – это специально подготовленные люди, которые контролируют работу ОС и в случае необходимости (поступление запроса) вмешиваются в работу компьютера для устранения каких-либо препятствий.

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

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

Программы обращаются к ОС при помощи специальных команд (вызов монитора, супервизора и т.п.), не нарушающих ее целостности и работоспособности.

Пользователи – это абоненты вычислительной сети.

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

Пользователь взаимодействует ПК через внешний интерфейс, организуемый ОС. Он вводит задания (команды) и получает результаты их выполнения. Существует два типа диалоговых интерфейсов – текстовый (MS DOS) и графический (Windows). В графических интерфейсах информация и команды представляются в виде пиктограмм (значков), и пользователь выполняет те или иные действия, указывая на эти пиктограмм и совершая с ними определенные действия.

Характеристики современных ОС

Современные операционные системы имеют следующие особенности:

дружественный интерфейс, ориентированный на неподготовленного пользователя и при помощи меню предоставляющий пользователю ряд альтернатив, выраженных на естественном языке;

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

распределенная обработка данных: гораздо целесообразнее иметь вычислительные мощности там, где они необходимы, вместо того, чтобы передавать данные для обработки в вычислительные центры.

Различные ОС обладают теми или иными возможностями по обслуживанию компонентов компьютера и организации диалога с пользователем. К числу основных характеристик ОС относят: разрядность поддержка многопроцессорности, многозадачность, поддержка многопользовательского режима.

Разрядность ОС определяет, какую разрядность внутренней шины данных ЦП может поддерживать ОС. Все современные ОС поддерживают 32-разрядный интерфейс прикладных программ. ОС может поддерживать два режима работы ЦП: реальный и защищенный. В реальном режиме, характерном для системы MS-DOS, все программы и данные располагаются в одной области ОП. Таким образом пользователь может войти в любую системную программу и испортить ее. 32-разрядные ОС поддерживают защищенный режим работы ЦП, который позволяет хранить программы и данные раздельно, в соответствии с их важностью в системе.

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

Переносимость ОС – это возможность ОС работать на компьютерах, базирующихся на ЦП с различной архитектурой.

ОС MS DOS

Операционная система MS-DOS за годы своего существования прошла путь от простого загрузчика до универсальной системы для персональных компьютеров, построенных на базе микропроцессоров Intel 8086/8088.

Операционная система MS-DOS была разработана компанией Microsoft в 1981 г. и впервые использована фирмой IBM для персональных компьютеров – тогда она была названа PC DOS 1.0. В последующие годы MS-DOS многократно перерабатывалась и приобретала новые важные функции (версии 2.0 в 1983 г., 3.0 в 1984 г., 3.2 в 1986 г., 3.3 в 1987 г., 4.0 в 1988 г., 5.0, …, 6.22). Например, в версии 4.0 появилась графическая оболочка пользователя DOS-Shell, в версии 5.0 – целый ряд сервисных программ (редактор командной строки DOSKEY, страничный редактор EDIT, и т.д.).

MS-DOS является однозадачной однопользовательской системой. Она требует относительно небольшого объема памяти, легко адаптируется к разнообразным аппаратным конфигурациям и поэтому достаточно популярна среди пользователей. Кроме того, ее можно считать основой для изучения операционных систем и их возможностей – знакомство с общей структурой системы MS-DOS очень полезно для понимания поведения вычислительной системы в целом. Многие ОС, созданные позднее, имеют пользовательский интерфейс, совместимый с MS-DOS. Например, это система MS OS/2, в которой реализованы многозадачный и защищенный режим, система виртуальной памяти.

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

BIOS (базовая система ввода-вывода),

Ядро системы DOS,

Командный процессор (оболочка).

Модуль BIOS индивидуален для каждой вычислительной системы и поставляется ее изготовителем. В этом модуле по умолчанию резидентно содержатся аппаратно-зависимые драйверы следующих устройств:

Консольный дисплей с клавиатурой (CON);

Устройство построчной печати (PRN);

Последовательный канал связи (AUX);

Часы/календарь (CLOCK$);

Дисковое устройство начальной загрузки.

Ядро системы MS-DOS взаимодействует с драйверами этих устройств с помощью пакетов запросов ввода-вывода. Затем драйверы переводят эти запросы в сами команды для различных аппаратных контроллеров.

Ядро DOS реализует MS-DOS, как она видится прикладным программам. Ядро – это специальная программа, которая включает набор аппаратно-независимых сервисных программ, называемых системными функциями. К ним можно отнести следующие функции:

управление файлами и записями;

управление памятью;

символьно-ориентированное устройство ввода-вывода;

порождение других задач;

доступ к часам реального времени.

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

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

Язык ассемблера

Понятие ассемблера

Язык ассемблера позволяет лучше понять взаимодействие всех функциональных узлов компьютера с операционной системой. Язык ассемблера – это специфический язык программирования со взаимно однозначным соответствием между его операторами и командами процессора. Язык ассемблера существует для каждого типа процессоров или целого семейства процессоров, поскольку команды на языке ассемблера должны иметь взаимно однозначное соответствие с системой машинных команд и должны быть согласованы с архитектурой компьютера. В данном курсе рассматривается система команд для 16-разрядного 8086-88 процессоров производства Intel. Микропроцессоры 8086-88 характеризуются основным адресным пространством объемом 1 (MB) мегабайт, из которого первые 640 KB (килобайт) отведены под основную память (RAM) и адресным пространством ввода/вывода объемом 65536 байтов.

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

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

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

Разработка программы на языке ассемблера

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

постановка задачи и составление проекта программы;

создание файла с текстом программы с помощью любого текстового редактора;

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

преобразование результата работы ассемблера в исполняемый модуль с помощью компоновщика;

запуск программы на исполнение;

проверка результатов. В случае не соответствия необходимо найти ошибки с помощью отладчика.

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

Для создания программ на языке ассемблера в данном курсе используются программный продукт Турбо Ассемблер фирмы Borland Int. Компилятор Турбо Ассемблера – это выполняемая программа, размещенная в файле TASM.EXE, а компоновщик содержится в файле TLINK.EXE. Отладчик содержится в файле TD.EXE. Процесс компиляции и компоновки программы на языке ассемблера выглядит следующим образом.

Рисунок 1 Этапы разработки программы на языке ассемблера

Прерывание

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

Программные

Аппаратные

Устройств всяких много - клавиатура, монитор, дисковод и так далее. Если не пользоваться прерываниями, то постоянно операционная система должна опрашивать устройства, нажата ли клавиша, хотите ли вывести данные на монитор и так далее. Намного проще оговорить некоторый механизм который и будет обращаться внимание операционной системы и процессора на необходимость проведения некоторых действий. Как все это работает в динамике? Ваша программа что то считает. В этот момент нажимается клавиша. Программа должны быть прервана. И это будет сделано, управление будет передано специальному коду (процедура обработки прерывания) а потом Ваша программа будет выполняться дальше. То же самое когда мы вызываем прерывание для вывода символов на монитор (int 21h 04Ch) то сами генерируем прерывание. Зачем? В этот момент может происходить считывание с дисковода или вывод других символов на экран. А в это время мы вызываем прерывание вывода символов. Так как прерывания могут наступать одновременно, то есть приоритет их обработки. Есть прерывание, которые выполняться в любом случае даже если идет обработка другого прерывания. Процедура обработки прерывания это программа. Вопрос в том только где она храниться. Базовая обработка прерывания храниться в BIOS и в самих микросхемах оборудования. Но использовать их довольно тяжело. Для того, что бы записать файл нужно завести двигатель дисковода, установить головку, дать команду перейти в тот сектор прочитать таблицу файлов, проверить что там нет файла и так далее так далее. Все эти задачи облегчает операционная система, которая предоставляет Вам прерывания более высокого уровня. Используя эти прерывания, Вы можете одним заходом создать файл, например. Различают прерывания по номерам:

21h - прерывание DOS

13h - прерывание BIOS

Вот когда Вы вызываете прерывание (INT) Вы указываете еще и номер (21h) то есть, кто будет выполнять это действие.

Регистры

Регистры это специальные ячейки памяти. Это самое главное. Вся их прелесть в том, что обращение к регистрам производиться значительно быстрее чем к оперативной памяти ПК. Именно по этой причине регистры используются для команд процессора. От туда процессору удобно и быстро получать информацию. Если говорить o ПК с типом процессоров 286.

Каждый регистр имеет имя и свое назначение. Они бывают следующие по типам. Регистры общего назначения AX, BX, CX, DX, BP, SI, DI, SP  Сегментные регистры CS, DS, SS, ES  Счетчик команд IP  Регистр флагов Flags  Таблица 1. Типы регистров

Каждое имя регистра несет некоторый смысл. A Accumulator Аккумулятор  B Base База  C Counter Счетчик  D Data Данные  BP Base pointer Указатель базы  SI Source index Индекс источника  DI Destination index Индекс приемника  SP Stack pointer Указатель стека  CS Code segment Сегмент команд  DS Data segment Сегмент данных  SS Stack segment Сегмент стека  ES Extra segment Дополнительный сегмент  IP Instruction pointer Счетчик команд  Таблица 2. Расшифровка названий регистров

Регистры AX, BX, CX и DX позволяют обращаться не к регистру, а к старшему и младшему байту.

Задание

Написать программу, которая будет выводить на экран надпись “Hello world”.

Напишем текст программы

sdata segment сегмент данных

Hellostr DB Hello World!

scode segment сегмент кода

start:

mov ax, sdata поместить в ax данные

mov ds, ax поместить в ds ax

mov bx,1 поместить в bx 1

mov cx,12 поместить в cx 21

mov dx, offset Hellostr поместить в dx смещение строки

mov ah,40h функция вывода строки

int 21h вывести строку

mov ah, 04Ch функция завершения программы

int 21h закрыть программу

end start

Заключение

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

Несмотря на то, что Ассемблер является машинно-ориентированным языком, то есть языком низкого уровня, программист может применять его для работы, как на высоком.

К преимуществам Ассемблера можно отнести:

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

2. Язык Ассемблера позволяет программисту выполнять действия, которые либо вообще нельзя реализовать на других языках и в частности на языках высокого уровня, либо выполнение которых займет слишком много машинного времени в случае привлечения дорогих средств языка высокого уровня.

К недостаткам языка следует отнести:

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

2. Для программирования на данном языке необходимо очень хорошо знать структуру компьютера и работу аппаратных устройств, так как Ассемблер работает непосредственно с устройствами.

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

Список литературы:

“Методическое пособие” - Е. П. Мачикина, Новосибирск 2005 г

“Ассемблер на примерах – Базовый курс” – Рудольф Марек, Санкт-Петербург 2005 г

http://citforum.ru/programming/tasm3/index.shtml