Аналоговые часы
Область применения языка программирования ассемблер, выбор видеорежима средствами BIOS. Принципы создания графических изображений на экране для EGA-адаптеров. Функции часов реального времени и системного таймера, алгоритм программы "Аналоговые часы".
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 18.12.2012 |
Размер файла | 49,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
Брянский государственный технический университет
Кафедра: « Информатики и программного обеспечения»
Курсовая работа
«Аналоговые часы»
по дисциплине «Организация ЭВМ»
Выполнила:
Студентка группы 06- САПР
Крохина Н.Ю.
Проверил:
Статутов А.Г.
Брянск 2007
Задание на курсовой проект по дисциплине «Организация ЭВМ»
Студент Крохина Н.Ю. группа 06-САПР
Тема Аналоговые часы
Техническое задание
Отображение аналоговых часов реального времени в графическом режиме.
Руководитель Статутов А.Г.
Оглавление
Введение
1. Теоретическая часть
1.1 Средства BIOS
1.2 Графическое программирование
1.3 Часы реального времени и системный таймер
2. Описание логической структуры
2.1 Алгоритм программы
2.2 Структура программы с описанием основных процедур
3. Инструкция пользователю
3.1 Запуск программы
3.2 Порядок работы
Заключение
Список использованной литературы
Введение
Первый вопрос, который задает себе человек, впервые услышавший об этом языке программирования, -- а зачем он, собственно, нужен? Особенно теперь, когда все пишут на C/C++, Delphi или других языках высокого уровня? Ведь очень многое можно создать на С, но ни один язык, даже такой популярный, не может претендовать на то, чтобы на нем можно было написать действительно «все».
Итак, на ассемблере пишут:
· все, что требует максимальной скорости выполнения: основные компоненты компьютерных игр, ядра операционных систем реального времени и просто критические участки программ;
· все, что взаимодействует с внешними устройствами: драйверы, программы, работающие напрямую с портами, звуковыми и видеоплатами;
· все, что использует полностью возможности процессора: ядра многозадачных операционных систем, DPMI-серверы и вообще любые программы, переводящие процессор в защищенный режим;
· все, что полностью использует возможности операционной системы: вирусы и антивирусы, защиты от несанкционированного доступа, программы, обходящие эти защиты, и программы, защищающиеся от этих программ;
· и многое другое.
Стоит познакомиться с ассемблером поближе, как оказывается, что многое из того, что обычно пишут на языках высокого уровня, лучше, проще и быстрее написать на ассемблере.
1. Теоретическая часть
1.1 Средства BIOS
Функции DOS вывода на экран позволяют перенаправлять вывод в файл, но не позволяют вывести текст в любую позицию экрана и не позволяют изменить цвет текста. DOS предполагает, что для более тонкой работы с экраном программы должны использоваться видеофункции BIOS. BIOS (базовая система ввода-вывода) -- это набор программ, расположенных в постоянной памяти компьютера, которые выполняют его загрузку сразу после включения и обеспечивают доступ к некоторым устройствам, в частности к видеоадаптеру. Все функции видеосервиса BIOS вызываются через прерывание 10h. Рассмотрим функции, которые могут быть полезны для вывода текстов на экран (полностью видеофункции BIOS описаны в приложении 2).
Выбор видеорежима
BIOS предоставляет возможность переключения экрана в различные текстовые и графические режимы. Режимы отличаются друг от друга разрешением (для графических) и количеством строк и столбцов (для текстовых), а также количеством возможных цветов.
INT 10h, АН = 00 -- Установить видеорежим
Ввод: |
AL = номер режима в младших 7 битах |
|
Вывод: |
Обычно никакого, но некоторые BIOS (Phoenix и AMI) помещают в AL 30Н для текстовых режимов и 20h для графических |
Вызов этой функции приводит к тому, что экран переводится в выбранный режим. Если старший бит AL не установлен в 1, экран очищается.
Номера текстовых режимов -- 0, 1, 2, 3 и 7. 0 и 1 -- 16-цветные режимы 40x25 (с 25 строками по 40 символов в строке), 2 и 3 -- 16-цветные режимы 80x25, 7 -- монохромный режим 80x25.
Мы не будем пока рассматривать графические режимы, хотя функции вывода текста на экран DOS и BIOS могут работать и в них.
Существует еще много текстовых режимов с более высоким разрешением (80x43, 80x60, 132x50 и т.д.), но их номера для вызова через эту функцию различны для разных видеоадаптеров (например, режим 61h -- 132x50 для Cirrus 5320 и 132x29 для Genoa 6400). Однако, если видеоадаптер поддерживает стандарт VESA BIOS Extention, в режимы с высоким разрешением можно переключаться, используя функцию 4Fh.
INT 10h, АН = 4Fh, AL = 02 -- Установить SuperVGA-видеорежим
Ввод: |
ВХ = номер режима в младших 13 битах |
|
Вывод: |
AL = 4Fh, если эта функция поддерживается АН = 0, если переключение произошло успешно АН = 1, если произошла ошибка |
Если бит 15 регистра ВХ установлен в 1, видеопамять не очищается. Текстовые режимы, которые можно вызвать с использованием этой функции: 80x60 (режим 108h), 132x25 (109h), 132x43 (10Ah), 132x50 (10Bh), 132x60 (10Ch).
1.2 Графическое программирование
Рассмотрим основные принципы создания графических изображений на экране для EGA-адаптеров.
Операционная система MS DOS в отличие от Windows, к сожалению, не поддерживает доступ к графическим возможностям компьютера. В BIOS есть не слишком эффективный графический интерфейс - подфункции прерывания 10Н. Из-за нее приходится программировать видеоадаптер самому. Это приводит к непереносимости программ на различных типах компьютеров. Кроме того, программировать видеоадаптер - достаточно сложная задача. Однако если вы пишите коммерческую программу, то решающее слово здесь за потребителем. Ему же необходимы: быстрота программирования, удобство пользования и совместимость.
Для языков высокого уровня существуют графические библиотеки, которые решают большинство задач, необходимых для успешной работы с графическим экраном. Кроме того, стандартные библиотеки, как правило, рассчитаны на работу с разными адаптерами и в разных графических режимах. Однако никакая библиотека не может охватить всех возможностей графических адаптеров (особенно VGA и SVGA). Кроме того, часто требуются специальные эффекты, добиться которых можно лишь, работая с адаптером напрямую.
Прежде чем перейти к программированию на низком уровне, рассмотрим графические возможности BIOS, которые будут касаться только VGA.
Перечислим основные графические функции прерывания 1ОН.
Установка режима.
Вход:
АН - О, AL- номер режима.
Режимы для ЕGА и VGA-адаптеров изменяются в промежутке 14-19 (режимы 17-19 только для VGA).
Доступ к регистрам палитры.
АН-10Н
AL - 0 - изменить регистры палитры.
BL-номер регистра, ВН-цвет (6 бит). AL-1 - изменить регистры бордюра. ВН- регистр бордюра.
AL - 2 - изменить регистры палитры и бордюра.
ES:BX - 17 байт (регистры палитры 16,17-й бордюра).
AL - 3 - интенсивность.
BL - 0 интенсивный фон (16 - цветов).
BL - 1 мерцание (8 цветов + мерцание пер. плана).
Структура байта палитры имеет следующий вид:
x |
x |
R |
G |
B |
r |
a |
b |
Последние два бита в байте не используются. Биты Rr определяют интенсивность красного цвета (red), биты Gg - интенсивность зеленого цвета (green), биты ВЬ - интенсивность синего цвета (blue). Таким образом, любой цвет получается смешением трех чистых цветов, причем каждый цвет представлен с определенной интенсивностью (от 0 до 3).
Поставить точку. АН-ОСН
ВН - номер видеостраницы.
DX- строка.
СХ- столбец.
AL - значение цвета.
Читать точку.
AH-0DH.
Регистры работают аналогично предыдущему случаю, в AL возвращается цвет.
Выбрать активную страницу (переключение страниц).
АН-5
AL - номер активной страницы (для рассматриваемого нами режима их всего 2).
При запуске программы вывод точки работает чрезвычайно медленно. То же самое можно сказать о выводе символа, поскольку символ выводится как набор точек. Однако такая функция, как смена активной страницы, работает практически мгновенно. Этот механизм часто используют в играх и мультипликации. Заметим, что в графическом режиме нет курсора в обычном понимании (мы его не видим). Однако именно в его позицию выводится символ. Причем позицию графического курсора можно изменить при помощи обычных функций установки курсора. Использование русского текста возможно лишь в том случае, если это обеспечивает используемый драйвер экрана. Как правило, хорошие графические библиотеки для языков высокого уровня содержат наборы шрифтов, а также функции управления их выводом.
Работа с VGA-режимами
Функция 00 прерывания BIOS 10h позволяет переключаться не только в текстовые режимы, использовавшиеся в предыдущих главах, но и в некоторые графические. Эти видеорежимы стандартны и поддерживаются всеми видеоадаптерами (начиная с VGA), см. табл. 19.
Таблица 1. Основные графические режимы VGA
Номер режима |
Разрешение |
Число цветов |
|
11h |
640x480 |
2 |
|
12h |
640x480 |
16 |
|
13h |
320x200 |
256 |
Существуют еще несколько видеорежимов, использовавшихся более старыми видеоадаптерами CGA и EGA (с номерами от 4 до 10h).BIOS также предоставляет видеофункции чтения и записи точки на экране в графических режимах, но эти функции настолько медленно исполняются, что никогда не используются в реальных программах.
INТ 10h АН = 0Ch -- Вывести точку на экран
Ввод: |
АН = 0Ch ВН = номер видеостраницы (игнорируется для режима 13h, поддерживающего только одну страницу) DX = номер строки СХ = номер столбца AL = номер цвета (для режимов 10h и llh, если старший бит 1, номер цвета точки на экране будет результатом операции «исключающее ИЛИ») |
|
Вывод: |
Никакого |
INТ 10h AH = 0Dh -- Считать точку с экрана
Ввод: |
АН = 0Dh ВН = номер видеостраницы (игнорируется для режима 13h, поддерживающего только одну страницу) DX = номер строки СХ = номер столбца |
|
Вывод: |
AL = номер цвета |
Работа с SVGA-режимами
В режиме VGA 320x200 с 256 цветами для отображения видеопамяти на основное адресное пространство используется 64 000 байт, располагающихся с адреса A000h:0000h. Дальнейшее увеличение разрешения или числа цветов приводит к тому, что объем видеопамяти превышает максимальные границы сегмента в реальном режиме (65 535 байт), а затем и размер участка адресного пространства, отводимого для видеопамяти (160 Кб, от A000h:0000h до B800h:FFFFh. С адреса C800h:0000h начинается область ROM BIOS). Чтобы вывести изображение, используются два механизма -- переключение банков видеопамяти для реального режима и LFB (линейный кадровый буфер) для защищенного.
Во втором случае вся видеопамять отображается на непрерывный кусок адресного пространства, но начинающегося не с адреса 0A0000h, а с какого-нибудь другого адреса, так чтобы весь образ видеопамяти, который может занимать несколько мегабайтов, отобразился в один непрерывный массив. В защищенном режиме максимальный размер сегмента составляет 4 гигабайта, поэтому никаких сложностей с адресацией этого буфера не возникает. Буфер LFB можно использовать, только если видеоадаптер поддерживает спецификацию VBE 2.0.
В реальном режиме вывод на экран осуществляется по-прежнему копированием данных в 64-килобайтный сегмент, обычно начинающийся с адреса A000h:0000h, но эта область памяти соответствует только части экрана. Чтобы вывести изображение в другую часть экрана, требуется вызвать функцию перемещения окна (или, что то же самое, переключения банка видеопамяти), изменяющую область видеопамяти, которой соответствует сегмент A000h. Например, в режиме 640x480 с 256 цветами требуется 307 200 байт для хранения всего видеоизображения. Заполнение сегмента A000h:0000h - A000h:FFFFh приводит к закраске приблизительно 1/5 экрана, перемещение окна А на позицию 1 (или переключение на банк 1) и повторное заполнение этой же области приводит к закраске следующей 1/5 экрана, и т.д. Перемещение окна осуществляется подфункцией 05 видеофункции 4Fh или передачей управления прямо на процедуру, адрес которой можно получить, вызвав подфункцию 01, как будет показано ниже. Некоторые видеорежимы позволяют использовать сразу два таких 64-килобайтных окна, окно А и окно В, так что можно записать 128 Кб данных, не вызывая прерывания.
Стандартные графические режимы SVGA могут быть 4-, 8-, 15-, 16-, 24- и 32-битными.
4-битные режимы (16 цветов):
VGA
012h: 640x480 (64 Кб)
VESA VBE 1.0
102h: 800x600 (256 Кб)
104h: 1024x768 (192 Кб)
106h: 1280x1024 (768 Кб)
Каждый пиксель описывается одним битом, для вывода цветного изображения требуется программирование видеоадаптера на уровне портов ввода-вывода.
Видеоадаптер может поддерживать и собственные нестандартные видеорежимы. Список их номеров можно получить, вызвав подфункцию 00h, а получить информацию о режиме по его номеру -- вызвав подфункцию 01h видеофункции 4Fh. Более того, для стандартных режимов также следует вызывать подфункцию 01h, чтобы проверить реальную доступность режима (например, режим может быть в списке, но не поддерживаться из-за нехватки памяти). VBE 2.0 разрешает видеоадаптерам не поддерживать никаких стандартных режимов вообще.
INT 10h АН = 4Fh, AL = 00 -- Получить общую SVGA-информацию
Ввод: |
AX = 4F00h ES:DI = адрес буфера (512 байт) |
|
Вывод: |
AL = 4Fh, если функция поддерживается АН = 01, если произошла ошибка АН = 00, если данные получены и записаны в буфер |
1.3 Часы реального времени и системный таймер
ассемблер программирование аналоговый системный таймер
Начиная с IBM AT, персональные компьютеры содержат два устройства для управления процессами -- часы реального времени (RTC) и собственно системный таймер. Часы реального времени получают питание от аккумулятора на материнской плате и работают даже тогда, когда компьютер выключен. Это устройство можно использовать для определения/установки текущих даты и времени, установки будильника с целью выполнения каких-либо действий и для вызова прерывания IRQ8 (INT 4Ah) каждую миллисекунду. Системный таймер используется одновременно для управления контроллером прямого доступа к памяти, для управления динамиком и как генератор импульсов, вызывающий прерывание IRQ0 (INT 8h) 18,2 раза в секунду. Таймер предоставляет богатые возможности для препрограммирования на уровне портов ввода-вывода, но на уровне DOS и BIOS и часы реального времени, и системный таймер используются только как средство определения/установки текущего времени и организации задержек.
Функция DOS 2Ah -- Определить дату
Ввод: |
AX = 2Ah |
|
Вывод: |
СХ = год (1980 - 2099) DH = месяц DL = день AL = день недели (0 -- воскресенье, 1 -- понедельник...) |
Функция DOS 2Ch -- Определить время
Ввод: |
AX = 2Ch |
|
Вывод: |
СН = час CL = минута DH = секунда DL = сотая доля секунды |
Эта функция использует системный таймер, так что время изменяется только 18,2 раза в секунду и число в DL увеличивается сразу на 5 или 6.
Функция DOS 2Bh -- Установить дату
Ввод: |
АН = 2Bh СХ = год (1980 - 2099) DH = месяц DL = день |
|
Вывод: |
АН = FFh, если введена несуществующая дата, АН = 00h, если дата установлена |
Функция DOS 2Dh -- Установить время
Ввод: |
АН = 2Dh СН = час CL = минута DH = секунда DL = сотая доля секунды |
|
Вывод: |
AL = FFh, если введено несуществующее время, AL = 00h, если время установлено |
Функции 2Bh и 2Dh устанавливают одновременно как внутренние часы DOS, которые управляются системным таймером и обновляются 18,2 раза в секунду, так и часы реального времени. BIOS позволяет управлять часами напрямую:
INT 1Ah АН = 04h -- Определить дату RTC
Ввод: |
АН = 04h |
|
Вывод: |
CF = 0, если дата прочитана СХ = год (в формате BCD, то есть 1998h для 1998-го года) DH = месяц (в формате BCD) DL = день (в формате BCD) CF = 1, если часы не работают или попытка чтения пришлась на момент обновления |
INT 1Ah АН = 02h -- Определить время RTC
Ввод: |
АН = 02h |
|
Вывод: |
CF = 0, если время прочитано СН = час (в формате BCD) CL = минута (в формате BCD) DH = секунда (в формате BCD) DL = 01h, если действует летнее время, 00h, если нет CF = 1, если часы не работают или попытка чтения пришлась на момент обновления |
INT 1Ah АН = 05h -- Установить дату RTC
Ввод: |
АН = 05h СХ = год (в формате BCD) DH = месяц DL = день |
INT 1Ah АН = 03h -- Установить время RTC
Ввод: |
АН = 03h СН = час (в формате BCD) CL = минута (в формате BCD) DH = секунда (в формате BCD) DL = 01h, если используется летнее время, 0 -- если нет |
2. Описание логической структуры
2.1 Алгоритм программы
1. Очистка экрана
2. Вывод текущего времени в виде часов, оснащенных окружностью и тремя стрелками (часовой, минутной, секундной).
3. Выход в ОС осуществляется при нажатии клавиши ESC.
Блок-схема1
Запуск программы
Сохранение исходного видеорежима
Установка нового видеорежима
Рисование окружности
Отрисовка текущего времени
Проверка нажатия клавиши Esc
Да Нет
Выход
2.2 Структура программы с описанием основных процедур
ClrScr - Очистка экрана
PressAnyKey - Ожидание нажатия клавиши
GoToCursor - Переход в нужную позицию экрана
PutPixel - Рисует окружность
OutCros - Затирает старые стрелки и отображает на новом месте
CurUgols - Устанавливает углы для стрелок в зависимости от текущего времени
GradToRad - Переводит радианы в градусы
SinCos - Вычисляет синус и косинус
Plot - Отображает точку на экране
Line - Отображает линию по начальной точке, углу и радиусу
Time - Загружает текущие время в поля данных.
3. Инструкция пользователю
3.1 Запуск программы
Запуск программы осуществляется путем вводу в командной строке (Пуск / Программы / Стандартные / Командная строка):
1. Tasm.exe Prog.asm
2. Tlink.exe Prog.obj
3. Prog.exe
3.2 Порядок работы
После запуска программы на экране появятся аналоговые часы с тремя стрелками: часовой, минутной и секундной, отличающимися между собой по длине и цвету.
При нажатии клавиши ESC произойдет выход из программы.
Рис.1 Отображение аналоговых часов
Заключение
Итак, подводим вывод о проделанной работе. Мы реализовали на языке ассемблер программу «Аналоговые часы» в том представлении, каком мы себе представляли вначале. Проделав такую работу, мы не только узнали, что такое язык низкого уровня, но и познакомились с ним на практике. Этот процесс расширил наш кругозор, а так же усовершенствовал наши навыки в работе с системами счисления. Благодаря языку ассемблер мы улучшили свои знания по программированию, которые ранее были приобретены в процессе изучения более высокого уровня языка.
Этот язык заинтересовал многих учащихся и не думаю, что хоть кто-нибудь из тех, кто изучал этот язык остался равнодушным к нему.
Список использованной литературы
В. Юров, С. Хорошенко “Ассемблер. Учебный курс.”, С.-П. “Питер”, 1999г.
Зубков “Язык Ассемблера для DOS, WINDOWS, UNIX”, М. “ДМК”, 2000г.
П.В. Беспалов, С.В. Горин, С.М. Коновалов «Программирование на языке Ассемблер», М. “Высшая школа”, 1993г.
П. Нортон , «Персональный компьютер фирмы IBM и операционная система M-DOS», М. “Радио и связь”, 1991г.
Питер Абель «Язык Ассемблера для IBM PC и программирования», М. “Высшая школа”, 1992г.
П. Нортон , «Язык Ассемблера для IBM PC», М. “Радио и связь”, 1990г.
Размещено на Allbest.ru
Подобные документы
Особенности разработки и представления проекта программы, представляющей собой аналоговые часы с циферблатом, часовой, минутной и секундной стрелкой. Применение MS Visual Studio 2010, языка С++ для ее написания и компилирования. Специфика библиотеки MFC.
курсовая работа [440,2 K], добавлен 17.03.2014Техника создания графики при помощи API функций, экспортируемых библиотекой GDI32.DLL. Разработка на языке программирования С++ в среде программирования Microsoft Visual C++ программы для отображения часов реального времени в цифровом и аналоговом виде.
курсовая работа [2,8 M], добавлен 27.01.2010Отображение графики с помощью Canvas, представляющей собой область компонента, на которой можно рисовать или отображать готовые изображения. Операторы, применяемые в программе создания аналоговых часов, ее интерфейс и алгоритм решения на языке Delphi.
курсовая работа [2,3 M], добавлен 20.01.2016Программа по созданию стрелочных часов. Минимальные требования к составу и параметрам технических средств программы. Выбор и обоснование системы программирования Microsoft Visual Studio. Общее описание алгоритма. Руководство пользователя и программиста.
контрольная работа [1017,1 K], добавлен 11.12.2012Проведение сравнительного анализа языков программирования. Создание алгоритма и специфика составления математической модели программы "Механические часы, показывающие текущее время" в среде Microsoft Visual Studio 2010, на базе языка программирования С++.
курсовая работа [408,9 K], добавлен 11.03.2013Особенности проектирования часов со звуковым сигналом с использованием однокристального микроконтроллера семейства МК51. Разработка функциональной схемы устройства. Функции, выполняемые клавиатурой. Разработка алгоритма работы и управляющей программы.
курсовая работа [460,5 K], добавлен 16.05.2013Требования по разработке программы часов, особенности и преимущества языка Delphi 7. Разработка блок-схем алгоритмов и описание процесса программирования. Основные процедуры для реализации, назначение, функционирование и условие работы с программой.
курсовая работа [1,2 M], добавлен 14.07.2012Выполнение Java-программы. Набор программ и классов JDK. Объектно-ориентированное программирование в Java. Принципы построения графического интерфейса. Компонент и контейнер графической системы. Апплеты как программы, работающие в среде браузера.
курсовая работа [42,3 K], добавлен 08.02.2011Область применения данной программы. Распределение ставок средствами визуального программирования. Сообщения оператору. Текст программы. Графическое отображение передвижения наездников на экране. Возможность случайного распределения номеров наездников.
курсовая работа [57,0 K], добавлен 20.11.2013История развития графических адаптеров и их характеристики. Конкуренция изготовителей ATI и NVIDIA как "двигатель прогресса" графических адаптеров. Обзор основных моделей: ATI Radeon, Nvidia GeForce FX. Критерии выбора графических адаптеров при покупке.
реферат [134,7 K], добавлен 14.11.2013