Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Документ'
Систематика - распределение микроорганизмов в соответствии с их происхождением и биологическим сходством. Систематика занимается всесторонним описание...полностью>>
'Памятка'
Новогодние и Рождественские праздники - замечательное время для детей и взрослых. Почти в каждом доме устанавливают и украшают красавицу-елку. Для тог...полностью>>
'Документ'
Представитель НП Центр содействия и консультирования в области создания электронного правительства региона , член общественного совета министерства ин...полностью>>
'Урок'
4. Напомнить о синтаксической роли наречий. Объяснить на примерах, со словами какой части речи можно перепутать наречия, и выстроить алгоритм рассужде...полностью>>

Главная > Пояснительная записка

Сохрани ссылку в одной из сетей:
Информация о документе
Дата добавления:
Размер:
Доступные форматы для скачивания:

Пояснительная записка

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

Контрольная работа – один из важнейших видов самостоятельной работы студентов. Ее выполнение позволяет:

- углубить и закрепить знания по технологии разработки программных продуктов;

- приобщить студентов к научно – исследовательской работе;

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

- привить умение применять на практике полученные знания;

- закрепить знания по курсу;

- осознать процесс трансляции как важнейший процесс информатизации;

- реализовать на практике полученные знания;

- научить самостоятельно решать задачи на составление алгоритмов и писать программы по результатам анализа составленного алгоритма.

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

Выбор задания для контрольной работы осуществляется по порядковому номеру в журнале для группы ПСЗ-01-08 и по порядковому номеру в журнале плюс 12 для группы ПСЗ-02-08

Задания контрольнойработы

Задание 1. Программирование прямого обращения к оперативной памяти

1.1. ОПЕРАТИВНАЯ ПАМЯТЬ. СТРУКТУРА АДРЕСНОГО ПРОСТРАНСТВА ОП

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

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

Так как IBM/PC использует ячейки памяти длиной восемь бит или один байт, в памяти могут храниться значения, которые можно выразить восемью битами. Это значения до двух в восьмой степени или 256.

Для удобства манипулирования символьными данными компьютеру необходимо, чтобы коды символов преобразовывались в байтовые величины. Большинство компьютеров, включая IBM/PC, используют код ASCII, американский стандартный код для обмена информации.

В коде ASCII числовые значения присваиваются всем обычно используемым символам, таким как буквы алфавита, строчные и заглавные, цифры, знаки пунктуации. Несколько кодов зарезервированы для управления, например, чтобы указать конец строки символов

Таблицы стандартных кодов ASCII и расширенных кодов ASCII для IBM/PC можно найти во многих справочниках.

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

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

Сегмент - это участок памяти, имеющий длину 64 кБ и начинающийся с физических адресов (0,16,32,48,..). Смещение указывает, сколько байт от начала сегмента надо пропустить, чтобы добраться до нужного адреса. Фрагмент памяти в 16 байт называется параграфом. Таким образом, сегменты могут пересекаться.

Вычисление абсолютного адреса происходит на основе адреса сегмента и адреса смещения.

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

Микропроцессор имеет четыре шестнадцатиразрядных регистра общего назначения, называемых AX, BX, CX и DX. Каждый из них может быть разделен на два восьмиразрядных регистра, указанием старшей (H-high) или младшей (L-low) части полного (X) регистра. Таким образом, восьмиразрядные регистры называются AH, AL,BH, BL, CH, CL, DH и DL.

1.2. ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ DOS

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

Адрес видеопамяти в текстовом режиме для цветного графического дисплея равен B800:0000. Размер видеопамяти:80*25*2=4000 байт. Одна строка дисплея описывается 2*80=160 байтами видеопамяти.

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

Формирование байта-атрибута происходит по следующему правилу:

Мерцание цвет фона цвет символа 7 6 5 4 3 2 1 0

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

1.3. ПРОГРАММИРОВАНИЕ ПРЯМОГО ОБРАЩЕНИЯ К ОП В TC

Пример 1: сформировать в переменной vid_mem начальный адрес области видеопамяти.

char far *vid_mem;

vid_mem = (char far *) 0xB8000000;

Пример 2: организовать перемещение на экране курсора, используя глобальные ячейки DOS (адреса ячеек хранящих вертикальную и горизонтальную координаты курсора, даны в примере).

Пример 3: используя прямое обращение к видеопамяти, вывести на экран

произвольную вертикальную строку.

Задание: Разработать функцию, реализующую горизонтальное меню в верхней строке экрана:

вход: массив строк;

выход: номер выбранной строки.

Замечание 1. Число строк неограниченно. Если строки меню не размещаются на строке экрана, то формируется меню с меньшим числом строк. Остальная часть строк остается за кадром и доступ к ним осуществляется с помощью навигационных клавиш (т.е. осуществляется скроллинг строки).

Замечание 2. Разместить строки меню так, чтобы они занимали полную строку экрана.

Функция должна реагировать на клавиши: ←, →, Home, end, Enter.

1.4. ВАРИАНТЫ ЗАДАНИЙ

В заданиях 1-24 вывод на экран осуществлять с помощью прямого обращения к видеопамяти. Библиотечные функции, реализующие вывод на экран (conio.h), к программному файлу не подключать. Содержательную часть задачи реализовать с помощью функции пользователя. Программа должна вызвать данную функцию несколько раз с различным набором аргументов.

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

всплытия окна) реагировать на клавиши: ←, →, ↑, ↓ и обеспечивать изменение размера окна, enter - "центрирование" окна после изменения его размеров.

2.1. ПОНЯТИЕ ПРЕРЫВАНИЯ. ТИПЫ ПРЕРЫВАНИЙ

Компьютер должен обладать способностью реагировать на события, происходящие вне его микропроцессора, например воспринимать информацию, вводимую с клавиатуры.

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

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

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

Механизм прерывания работает следующим образом: каждому из основных типов прерываний присвоен свой номер. Например, прерывание таймера имеет номер 8, гибкие диски, используют номер 14. В самом начале оперативной памяти IBM/PC хранится таблица с адресами программ, которые должны вызываться при возникновении различных прерываний. Эти адреса иногда называются векторами прерываний. Прерывание с номером 0 имеет вектор, хранящийся в ячейке с нулевым адресом, прерывание 1 имеет

свой вектор в ячейке 4 и так далее. Когда происходит прерывание номер "X", вектор, хранящийся по адресу 4*X, загружается в регистры адреса программы, т.е., регистры CS и IP, и компьютер начинает выполнять программу обслуживания прерывания, которая размещается по этому адресу.

Когда обработка прерывания заканчивается, программа обработки возвращает управление программе, которая выполнялась в момент возникновения прерывания, с помощью специальной команды IRET или "возврат из прерывания". Чтобы такой возврат мог быть выполнен, необходимо сохранить в стеке текущие адреса программы до загрузки в регистры CS и IP вектора прерывания. В компьютере PC имеется 256 различных прерываний, с номерами от 0 до 0хff. Для хранения их адресов зарезервирована память с адресами от 0 до 0х400.

Некоторые из прерываний определены для использования процессором. Например, прерывание 0 возникает при делении на 0. Другие определены для вызова функций BIOS, третьи - для использования ДОС.

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

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

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

Аппаратные прерывания вырабатываются устройствами, требующими внимания процессора. В IBM/PC таких прерываний несколько. Во-первых, имеется так называемое немаскируемое прерывание, используемое для сообщения об отказе питания, оно имеет номер 2. Далее, прерывание 8 используется таймером, номер 9 - клавиатурой и 14 - контролером гибких дисков.

Имеется также семь зарезервированных номеров прерываний, 6, 7, с 10 по 13 и 15, которые могут быть использованы в дальнейшем, если возникнет необходимость в дополнительных аппаратных прерываниях. Два из этих семи прерываний уже нашли свое назначение, прерывание 12 зарезервировано для адаптера связи, а прерывание 15 - для интерфейса устройства печати.

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

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

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

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

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

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

2.2. ПРЕРЫВАНИЯ СИСТЕМЫ ROM-BIOS.

BIOS (Basic Input/Output System - базовая система ввода/вывода) расположена в ROM (read-only memory - постоянное запоминающее устройство - ПЗУ) и частично в файле, который загружается при загрузке компьютера (загружаемый BIOS). Доступными для пользователя является область памяти ROM_BIOS.

Существует всего 12 прерываний ROM-BIOS, распадающихся на 5 групп: шесть из двенадцати прерываний обслуживают определенные периферийные устройства, два дают отчет об оборудовании компьютера, одно работает с часами и календарем, одно выполняет операции по печати экрана и два прерывания переводят компьютер в совершенно иное состояние, запуская ROM-BIOS и системную программу начального запуска. Как мы в дальнейшем увидим, большинство прерываний относятся к группе служебных подфункций, которые выполняют большую часть работы. Например, прерывание 16 (16-ричное 10), связанное с выдачей изображения, имеет 16 подфункций, выполняющих все от установки режима изображения до изменения размеров курсора. Подфункция вызывается с помощью обращения к прерыванию, управляющему ею, и задания в регистре АН

номер подфункции. Как правило, если подпрограмма-прерывание возвращает какой-либо простой результат, то этот результат остается в регистре АХ; это применимо как к BIOS, так и к языкам программирования.

Обработка изображений реализована прерыванием с номером 16 или 10h. Это многофункциональное прерывание. Каждая функция этого прерывания имеет свой номер, по которому она может быть вызвана. Номер функции при вызове прерывания заносится в регистр AH.

Таблица 2.1. Служебные функции выдачи изображения

Правила вызова этих функций приведены в следующих таблицах.

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

Таблица 2.3. Регистры, используемые для чтения положения курсора с помощью служебной функции 3

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

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

2.3 ИСПОЛЬЗОВАНИЕ ПРЕРЫВАНИЙ BIOS ДЛЯ РАБОТЫ С КЛАВИАТУРОЙ

Функции для работы с клавиатурой вызываются с помощью прерывания 22(16). Этих функций всего три; они имеют номера от 0 до 2. Как и для всех других функций ROM-BIOS, при вызове функции номер для работы с клавиатурой задается в регистре АН.

Процедура 0 возвращает очередной набранный на клавиатуре символ. Если символ уже находится в буфере ROM-BIOS, то он возвращается немедленно. В противном случае процедура ожидает, пока он не будет набран. Каждый символ клавиатуры возвращается в виде пары байтов, называемых главным и вспомогательным байтами. Главный байт, возвращаемый в AL, равен либо 0 для специальных символов, соответствующих, например, функциональным клавишам, либо коду ASCII для обычных ASCII-символов. Вспомогательный байт, возвращаемый в АН, представляет собой либо идентификатор специального символа, либо скэн-код стандартной клавиатуры PC для ASCII-символов (см табл.2.17).

Таблица 2.6. Три служебных функции ROM-BIOS доступа к клавиатуре

Если при вызове процедуры 0 в буфере клавиатуры нет ни одного символа, то процедура ждет, пока он не появится, что, естественно, приостанавливает программу. Следующая рассматриваемая нами процедура, позволяет программе проверять ввод с клавиатуры, не приостанавливая своего исполнения. В противоположность тому, что излагается в некоторых версиях технического руководства IBM, процедуры 0 и 1 можно использовать для ввода как обычных ASCII-символов, так и специальных символов, отвечающих, например, функциональным клавишам.

2.4 ПРОГРАММНЫЕ СРЕДСТВА ДЛЯ ОБРАЩЕНИЯ К ПРЕРЫВАНИЯМ

Для описания регистров, используемых при обращении к прерываниям, в пользовательской ТС-программе в библиотеке DOS.H создан специальный тип REGS.

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

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

Таким образом, каждый байт двухбайтного регистра, например AX, имеет свое имя и доступен для самостоятельного обращения. Пример обращения к полям регистровой переменной r:

r.x.ax=5;

r.h.ah=2;

Замечание. ТС позволяет обращение к регистрам без предварительного описания соответствующих переменных. Имена таких регистров необходимо записывать большими буквами и предварять символом подчеркивания.

Например,

_AX=5;

_Ah=2;

Для обращения к прерыванию в TC (библиотека Dos.h) существует несколько

функций. Рассмотрим их синтаксис.

1) void geninterrupt(int intr_num)

Макрокоманда geninterrupt вызывает программное прерывание, номер которого задан параметром intr_num. Состояние всех регистров после вызова прерывания зависит от конкретного прерывания.

Пример 1: Вывод символа * в позицию 80,25.

2) int int86(int intno,union REGS *inregs, union REGS *outregs);

Функция int86 вызывает программное прерывание процессора 8086, номер прерывания указан в аргументе intno. Перед выполнением программного прерывания функция копирует содержимое регистров из inregs в сами регистры. После возврата из прерывания функция копирует текущие значения регистров в outregs. Если установлен флаг переноса, то это значит, что произошла ошибка. Отметим, что inregs может указывать на ту же структуру, что и outregs. Функция int86 возвращает значение регистра AX после завершения программного прерывания. Если флаг переноса установлен (outregs -> x.cflag != 0), то есть произошла ошибка, то данная функция присваивает глобальной переменной _doserrno код ошибки.

Пример 2: Вывод слова “Привет”.

Рассмотрим еще несколько примеров вызова прерываний.

Пример 3: Установить курсор в положение (14,1) на экране дисплея.

Пример 4: Прочитать символ с экрана, расположенный под курсором. Алгоритм реализован с помощью пользовательской функции.

Пример 5: Вывести символ 'a' на экран на место, указанное курсором. Алгоритм реализован с помощью пользовательской функции.

Пример 6: Очистить экран.

Пример 7: Составить функцию вывода строки в центре экрана, красными буквами на зеленом фоне с мерцанием, вертикально.

Пример 8: Ввести символ с клавиатуры.

Фрагмент программы c использованием функции getch() из библиотеки

2.5 ВАРИАНТЫ ЗАДАНИЙ

Решить задачи, приведенные в задании 1, с использованием прерываний ROM-BIOS. Библиотеки Crt и Conio.h к программному файлу не присоединять.

СПИСОК ЛИТЕРАТУРЫ

  1. Язык "СИ" для пpофессионалов/ По матеpиалам книги Г.Шилдта - М.: И.В.К.-СОФТ, 2008.

  2. Меркулова Т.А., Ярушкина Н.Г. Программирование на языках высокого уровня с использованием прерываний MS-DOS: Учебное пособие для студентов учебных направлений – Ульяновск: УлГТУ, 2009.



Похожие документы:

  1. Основная образовательная программа высшего профессионального образования подготовки специальности по специальности 070503. 65 «Музейное дело и охрана памятников»

    Основная образовательная программа
    ... , различных видов памяти, воображения и т.д.), так и с организацией самостоятельной работы и активизацией самостоятельной познавательной деятельности студентов по овладению языком ...
  2. Методические указания по организации самостоятельной работы студентов по дисциплине «Электротехника и электроника» по специальности среднего профессионального образования

    Методические указания
    ... закрепить неправильный алгоритм. Самостоятельная работа студентов при выполнении практических работ Выполнение практических работ является проверкой знаний студентов по определенной теме. Студент должен самостоятельно ...
  3. Литература для самостоятельной работы 21

    Литература
    ... ­заться на выполнении контрольной работы. По этой же причине недо­пустимо проведение нескольких контрольных работ в один день ... одновременно для углуб­ления знаний по физике, химии, математике, географии, и по каж­дому из этих ...
  4. Задачи воспитания Пути реализации задач воспитания Организация воспитания Этапы педагогического процесса Закономерности педагогического процесса

    Учебник
    ... таблица в виде памятки. Один из главных видов самостоятельной работы в начальной школе ... знаний по разным предметам, подчиненные одной теме. Поэтому чрезвычайно важно ... образования». Технология позволяет получить педагогический продукт заданного ...
  5. Аннотации к рабочим программам дисциплин по специальности 080109. 65 «Бухгалтерский учет, анализ и аудит»

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

Другие похожие документы..