Разработка программы генерации звука
Разработка программы, позволяющей генерировать звук, воспроизводимый внутренним динамиком. Разработка алгоритма работы программы, команды ввода–вывода в порт, работа с файлами. Описание использованных команд и используемых директив. Текст программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 20.11.2012 |
Размер файла | 25,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Задание
Введение
Разработка алгоритма работы программы
Команды ввода - вывода в порт
Работа с файлом
Описание использованных команд
Список используемых директив
Блок-схема программы
Текст программы
Литература
Задание
Разработать программу, позволяющую генерировать звук, воспроизводимый внутренним динамиком. Мелодия, используемая при воспроизведении, считывается из специально создаваемого файла.
Введение
Сердце персонального компьютера - микропроцессор, выполняющий арифметические, логические и вспомогательные операции, необходимые для решения задач. Каждое семейство процессоров имеет собственный уникальный набор инструкций, используемый для выполнения операций, например, для ввода с клавиатуры, вывода данных на экран и выполнения арифметических вычислений. Этот набор инструкций (машинный язык) слишком сложен для понимания и непосредственного использования при создании программ. Поэтому для процессоров существуют языки ассемблеров, представляющие инструкции машинных языков в более доступной для человеческого понимания символьной форме.
Машинный язык - представляет собой совокупность машинных инструкций, непосредственно исполняемых процессором. Последовательность таких инструкций составляет операционную систему и встроенное в аппаратную часть компьютера программное обеспечение. Низкоуровневые языки программирования (ассемблеры) - предназначаются для конкретных семейств процессоров. Символьные инструкции этих языков непосредственно соответствуют инструкциям машинных языков, и программы на ассемблере легко транслируются в машинный код.
Написание программы на языке ассемблера требует знания об аппаратуре компьютера (его архитектуре) и деталях его набора инструкций. Основные составляющие аппаратной части компьютера - процессор, память и регистры (регистры - специальные компоненты процессора, предназначенные для хранения адресов и данных). Внешние устройства компьютера (периферия) - это клавиатура, дисплей, винчестер, привод компакт дисков и другие устройства. Программное обеспечение состоит из операционной системы, различных прикладных программ и файлов данных, хранящихся на диске.
Для выполнения (или запуска) программа копируется с диска во внутреннюю (оперативную) память компьютера. Процессор выполняет инструкции программы, используя регистры для хранения исходных данных и результатов требуемых арифметических, логических операций и адресации.
Определенные события могут вынудить процессор приостановить выполнение текущей программы и заставить его отреагировать на эти события. Обычно эти события нормальны и предсказуемы, как, например, запрос на ввод с клавиатуры. Процессор прерывает текущую операцию, вызывает BIOS - подпрограмму для обработки запроса с клавиатуры и возвращается к выполнению прерванной программы. Другой тип прерываний - программные прерывания. Их вызывает программа, например, для вывода информации на экран.
Программы типа .COM.
Преимущества программ типа .COM - меньший размер по сравнению с программами типа .EXE и более легкая адаптация к применению в качестве резидентных программ. Формат программ .COM возник на раннем этапе развития микрокомпьютеров, когда размер программы был ограничен 64 килобайтами.
Программа типа .COM использует единый сегмент для инструкций и данных, изначально ограниченный размером 64 Кб, включая префикс сегмента программы (PSP). PSP - это 256-байтный блок, который загрузчик программ вставляет непосредственно перед программами при загрузке в память с диска. Программа .COM - точное отображение исполняемой программы без информации о перемещаемых адресах.
Таймеры и звук.
Установка и чтение таймера.
Все IBM PC используют микросхему таймера 8253 (или 8254) для согласования импульсов от микросхемы системных часов. Число циклов системных часов преобразуется в один импульс, а последовательность этих импульсов подсчитывается для определения времени, или они могут быть посланы на громкоговоритель компьютера для генерации звука определенной частоты. Микросхема 8253 имеет три идентичных независимых канала, каждый из которых может программироваться.
Микросхема 8253 работает независимо от процессора. Процессор программирует микросхему и затем обращается к другим делам. Таким образом 8253 действует как часы реального времени - она считает свои импульсы независимо от того, что происходит в компьютере. Однако, максимальный программируемый интервал составляет приблизительно 1/12 секунды. Для подсчета интервалов времени в часы и минуты нужны какие-то другие средства. Именно по этой причине импульсы от нулевого канала микросхемы таймера накапливаются в переменной, находящейся в области данных BIOS. Этот процесс показан на рис. 2-1. Это накопление обычно называется подсчетом времени суток. 18.2 раза в секунду выход канала 0 обрабатывается аппаратным прерыванием (прерыванием таймера), которое ненадолго останавливает процессор и увеличивает счетчик времени суток. Число 0 соответствует полночи 12:00; когда счетчик достигает значения эквивалентного 24 часам, он сбрасывается на ноль. Другое время в течение суток легко определяется делением показателя счетчика на 18.2 для каждой секунды. Счетчик времени суток используется в большинстве операций, связанных со временем.
Программирование микросхемы таймера 8253/8254.
Каждый из трех каналов микросхемы таймера 8253 (8254 для AT) состоит из трех регистров. Доступ к каждой группе из трех регистров осуществляется через один порт; номера портов от 40H до 42H соответствуют каналам 0 - 2. Порт связан с 8-битным регистром ввода/вывода, который посылает и принимает данные для этого канала. Когда канал запрограммирован, то через этот порт посылается двухбайтное значение, младший байт сначала. Это число передается в 16-битный регистр задвижки (latch register), который хранит это число и из которого копия помещается в 16-битный регистр счетчика. В регистре счетчика число уменьшается на единицу каждый раз, когда импульс от системных часов пропускается через канал. Когда значение этого числа достигает нуля, то канал выдает выходной сигнал и затем новая копия содержимого регистра задвижки передвигается в регистр счетчика, после чего процесс повторяется. Чем меньше число в регистре счетчика, тем быстрее ритм. Все три канала всегда активны: процессор не включает и не выключает их. Текущее значение любого из регистров счетчика может быть прочитано в любой момент времени, не влияя на счет.
Каждый канал имеет две входные и одну выходную линии. Выходная линия выводит импульсы, возникающие в результате подсчета. Назначение этих сигналов варьируется в зависимости от типа IBM PC:
Канал 0 используется системными часами времени суток. Он устанавливается BIOS при старте таким образом, что выдает импульсы приблизительно 18.2 раза в секунду. 4-байтный счетчик этих импульсов хранится в памяти по адресу 0040:006C (младший байт хранится первым). Каждый импульс инициирует прерывание таймера (номер 8) и именно это прерывание увеличивает показание счетчика. Это аппаратное прерывание, поэтому оно обрабатывается всегда, независимо от того, чем занят процессор, если только разрешены аппаратные прерывания (см. обсуждение в [1.2.2]). Выходная линия используется также для синхронизации некоторых дисковых операций, поэтому если Вы изменили ее значение, то Вам необходимо восстановить первоначальное значение перед обращением к диску.
Канал 1 управляет обновлением памяти на всех машинах кроме PCjr, поэтому его лучше не трогать. Выходная линия этого канала связана с микросхемой прямого доступа к памяти [5.4.2] и ее импульс заставляет микросхему DMA обновить всю память. На PCjr канал 1 служит для преобразования входных данных с клавиатуры из последовательной в параллельную форму. PCjr не использует микросхему прямого доступа к памяти, поэтому когда он вместо этого прогоняет данные через процессор, то прерывание от таймера заблокировано. Канал 1 используется для подсчета заблокированных импульсов часов времени суток, с тем чтобы можно было обновить значение счетчика после завершения дисковых операций.
Канал 2 связан с громкоговорителем компьютера и он производит простые прямоугольные импульсы для генерации звука. Программисты имеют больший контроль над вторым каналом, чем над остальными. Простые звуки могут генерироваться одновременно с другими программными операциями, а более сложные звуковые эффекты могут быть достигнуты за счет использования процессора. Канал 2 может быть отсоединен от громкоговорителя и использоваться для синхронизации. Наконец, выходная линия канала 2 связана с динамиком компьютера. Однако динамик не будет генерировать звук до тех пор пока не сделаны определенные установки микросхемы интерфейса с периферией 8255.
Две входные линии для каждого канала состоят из линии часов, которая передает сигнал от микросхемы системных часов и линии, называемой воротами (gate), которая включает и выключает сигнал от часов. Ворота всегда открыты для сигналов часов по каналам 0 и
1. Но они могут быть закрытыми для канала 2, что позволяет некоторые специальные манипуляции со звуком. Ворота закрываются установкой младшего бита порта с адресом 61H, который является регистром микросхемы 8255; сброс этого бита снова открывает ворота. Эта микросхема обсуждается в [1.1.1]. Отметим что - как и выход канала 2 - бит 1 порта 61H связан с динамиком и также может использоваться для генерации звука. На рис. 2-2 приведена диаграмма микросхемы таймера 8253.
Микросхема таймера может использоваться непосредственно для временных операций, но это редко бывает удобным. Ввод с часов производится 1.19318 миллионов раз в секунду (даже на AT, где системные часы идут быстрее, микросхема таймера получает сигнал с частотой 1.19 Мгц). Поскольку максимальное число, которое может храниться в 16 битах, равно 65535 и поскольку это число делится на частоту импульсов от часов, равную 18.2, то максимальный возможный интервал между импульсами равен приблизительно 1/12 секунды. Поэтому большинство временных операций используют счетчик времени суток BIOS. Для подсчета времени читается значение времени суток и сравнивается с некоторым ранее запомненным значением для определения числа импульсов, прошедших с того момента. Специальный способ, описанный в [2.1.7], позволяет использовать счетчик времени суток для операций в реальном времени.
8253 предоставляет разработчикам оборудования 6 режимов работы для каждого канала. Программисты обычно ограничиваются третьим режимом, как для канала 0 при синхронизации, так и для канала 2 для синхронизации или генерации звука. В этом режиме, как только регистр задвижки получает число, он немедленно загружает копию в регистр счетчика. Когда значение в счетчике достигает нуля, регистр задвижки мгновенно перезагружает счетчик и т.д. В течение половины отсчета выходная линия включена, а в течение половины - выключена. В результате получаются прямоугольные волны, которые одинаково пригодны как для генерации звука, так и для подсчета.
8-битный командный регистр управляет способом загрузки чисел в канал. Адрес порта для этого регистра равен 43H. Командному регистру передается байт, который говорит какой канал программировать, в каком режиме, а также один или оба байта регистра задвижки должны быть переданы. Он показывает также, будет ли число в двоичной или BCD (двоично-кодированной десятичной) форме. Значение битов этого регистра таково:
бит 0если 0, двоичные данные, иначе BCD
3-1номер режима, 1 - 5 (000 - 101)
5-4тип операции:
00 = передать значение счетчика в задвижку
01 = читать/писать только старший байт
10 = читать/писать только младший байт
11 = читать/писать старший байт, потом младший 7-6 номер программируемого канала, 0 - 2 (00 -10)
Короче говоря, для программирования микросхемы 8253 надо выполнить три основных шага. После того как третий шаг завершен, запрограммированный канал немедленно начинает функционировать по новой программе.
1. Послать в командный регистр (43H) байт, представляющий цепочку битов, которые выбирают канал, статус чтения/записи, режим операции и форму представления чисел.
2. Для канала 2 надо разрешить сигнал от часов, установив в 1 бит 0 порта с адресом 61H. (Когда бит 1 этого регистра установлен в 1, то канал 2 управляет динамиком. Сбросьте его в 0 для операций синхронизации.)
3. Вычислите значение счетчика от 0 до 65535, поместите его в AX, и пошлите сначала младший, а затем старший байт в регистр ввода/вывода канала (40H - 42H).
Каналы микросхемы 8253 работают всегда. По этой причине программы всегда должны восстанавливать начальные установки регистров 8253 перед завершением. В частности, если при завершении программы генерируется звук, то он будет продолжаться даже после того, как MS DOS получит управление и загрузит другую программу. Имейте это ввиду при написании процедуры выхода по Ctrl-Break [3.2.8].
Низкий уровень.
В данном примере канал 0 программируется на другое значение, чем установлено BIOS при старте. Причина изменения установки состоит в том, чтобы изменить интервал изменения счетчика времени суток на большую величину, чем 18.2 раза в секунду. Частота обновления счетчика изменяется, скажем, на 1000 раз в секунду, с целью проведения точных лабораторных измерений. Значение задвижки должно быть 1193 (1193180 тактов в секунду / 10000). Как читать текущее значение регистра счетчика см. в примере [2.1.8]. Перед дисковыми операциями оригинальное значение задвижки должно быть восстановлено, поскольку канал 0 используется для синхронизации дисковых операций. Максимально возможное значение - 65535 тактов часов между импульсами от канала - может быть достигнуто засылкой 0 в регистр задвижки (0 немедленно превращается в 65535 при уменьшении на единицу.
;---установка регистров ввода/вывода
COMMAND_REG EQU 43H;адрес командного регистра
CHANNEL_0EQU 40H;адрес канала 0
MOV AL,00110110B ;установка битов для канала
2 OUT COMMAND_REG,AL ;засылка в командный регистр
;---посылка счетчика в задвижку
MOV AX,1193;счетчик для 100 импульсов/сек.
OUT CHANNEL_2,AL ;посылка младшего байта
MOV AL,AH;готовим для посылки старший байт
OUT CHANNEL_2,AL ;посылка старшего байта
Разработка алгоритма работы программы
Команды ввода - вывода в порт
Каждое устройство ввода/вывода, каждое системное устройство имеет один или несколько регистров, доступ к которым осуществляется через адресное пространство ввода/вывода. Физически независимо от пространства оперативной памяти и имеет ограниченный объем, составляющий 65536 адресов ввода/вывода. Вся работа системы с устройствами на самом низком уровне выполняется с использованием портов ввода-вывода.
Управление оборудованием компьютера на самом нижнем уровне осуществляется при помощи BIOS, на котором работа с оборудованием ведется напрямую через порты. Тем самым реализуется концепция независимости от оборудования. При замене оборудования необходимо будет лишь подправить соответствующие функции BIOS, переориентировав их на новые адреса и логику работы портов.
Принципиально управлять устройствами напрямую через порты несложно. Для этого достаточно всего двух команд, присутствующих в системе команд микропроцессора:
In аккумулятор, номер_порта - ввод в аккумулятор из порта с номером номер_порта;
Out порт,аккумулятор - вывод содержимого аккумулятора в порт с номером номер_порта.
У компьютера есть внутренний динамик, но специальной схемы генерации звука для него нет. Сигнал для управления динамиком формируются в результате совместной работы микросхем:
программируемого периферийного интерфейса (ППИ);
таймера.
Основная работа по генерации звука производится микросхемой таймера. Микросхема таймера имеет три канала с совершенно одинаковой внутренней структурой и принципом работы. На каналы таймера подаются импульсы от микросхемы системных часов, которые, по сути, представляют собой генератор импульсов, работающий с частотой 1,19 МГц. Каждый канал имеет два входа и один выход. Выходы канала замкнуты на вполне определенные устройства компьютера. Так, канал 0 замкнут на контроллер прерываний, и является источником аппаратного прерывания от таймера, которое возникает 18,2 раза в секунду. Канал 1 связан с микросхемой прямого доступа к памяти (DMA). Канал 2 выходит на динамик компьютера. Регистр ввода-вывода (разрядностью 8 бит) канала 2 имеет номер порта ввода-вывода 42h. Помещаемые в него значения немедленно попадают в регистр-защелку или, как его еще называют, регистр-фиксатор (размерностью 16 бит). Для согласования регистра ввода-вывода с регистром-фиксатором предназначен регистр управления (ему соответствует порт 43р), который является частью механизма управления всей микросхемой таймера. Он содержит слово состояния, с помощью которого производится выбор канала, задание режима работы канала, и тип операции передачи значения в канал. Слово состояния имеет структуру:
бит 0 определяет тип константы пересчета;
биты 1-3 определяют режим работы микросхемы таймера;
биты 4-5 определяют тип операции;
биты 6-7 определяют номер программируемого канала.
Работа с файлом
;--------------------------------- Открытие файла--------------------------------
lea dx,fil; указываем имя открываемого файла
mov ah,3dh; функция открытия файла
mov al,0; параметр открытия файла для чтения
int 21h; запуск 3dh функции 21h прерывания
mov handle,ax; сохраняем логический номер файла
;--------------------- Установка указателя на конец файла------------------
mov cx,0; установка позиции чтения из файла
mov dx,0; позиция хранится в слове CX:DX
mov bx, handle; установка логического номера файла
mov al,2; параметр для записи с конца файла
mov ah,42h; функция установки позиции записи в файл
int 21h; выполнение 42h функции 21h прерывания
;-------------------------------- Закрытие файла --------------------------------
mov ah,3eh;-- функция закрытия файла
mov bx, handle ;-- загрузка в BX логического номера файла
int 21h;-- запускаем обработчик прерывания
Описание использованных команд
Функция 3DH прерывания INT21H: открыть файл.
Для получения данных из файла программа должна предварительно вызвать функцию 3DH прерывания INT21H для открытия файла. Функция проверяет существование указанного файла и, если он существует, предоставляет его дескриптор программе.
Перед чтением из файла программа должна использовать функцию 3DH для открытия файла, а не 3CH для его создания.
Если файл с указанным именем существует, операция устанавливает длину записи в 1 (ее можно изменить), воспринимает текущие атрибуты файла, устанавливает указатель файла в 0 (на начало файла), сбрасывает флаг CF в 0 и возвращает в АХ дескриптор открытого файла. Этот дескриптор будет использоваться вплоть до закрытия файла.
Функция 3EH прерывания INT21H: закрыть в файл.
Закончив работать с файлом, программа должна закрыть его. Для этого загружаем дескриптор файла в ВХ и вызовите функцию 3ЕН прерывания INT21H:
mov ah,3eh; Запросить закрытие файла
mov bx,filhand; Загрузить дескриптор файла
int 21h ; Вызвать обработчик прерывания
jc ошибка; Перейти в случае ошибки
Корректная операция закрытия файла записывает все данные, остающиеся в буфере, в файл, обновляет записи о файле в FAT и структуре директорий о размере файла, дате и времени. После чего освобождается указанный дескриптор. Неудачная операция устанавливает флаг CF в 1 и возвращает единственный возможный код ошибки - 06 (некорректный дескриптор).
Функция 42H прерывания INT21H: переместить указатель файла.
Операция открытия файла инициализирует указатель файла значением 0. Последующие операции последовательного чтения и записи увеличивают его с каждой прочитанной записью. Для установки указателя в произвольную точку файла можно использовать функцию 42Н прерывания INT21H (перемещение указателя файла), после чего использовать другие функции для чтения и изменения данных в файле.
Для обращения к функции 42Н загружаем дескриптор требуемого файла в ВХ, а требуемое значение смещение (в байтах) - в пару СХ:DX. Для смещения вплоть до 65535 байтов устанавливаем в СХ 0, а смещение задаем в DX.Кроме того, устанавливается код метода в AL - он указывает операции, с какой точки начинать отсчет смещения:
00 - с начала файла;
01 - от текущей позиции указателя, которая может соответствовать любой точке файла, включая его начало;
02 - от конца файла; этот метод можно применить для добавления новых записей к концу файла; или для определения размера файла устанавливают СХ:DX в 0 и используют метод 02.
Успешная операция устанавливает флаг CF в 0 и помещает новый адрес указателя в пару DX:AX. Программа может использовать этот адрес для дальнейших операций произвольного доступа. Некорректная операция устанавливает CF в 1 и возвращает в АХ код ошибки 01 (неправильный код метода) или 06 (некорректный дескриптор).
Список используемых директив
Директива ORG 100Н.
Поскольку PSP имеет размер 100Н байтов, адресация начинается со смещения 100Н байт. Мы должны ввести в текст программы директиву ORG 100H сразу за предложением SEGMENT или .CODE в сегменте кода. Эта директива приказывает ассемблеру установить счетчик положения в значение 100Н. После этого ассемблер начнет генерировать объектный код, начиная с ячейки с адресом 100Н (сразу после PSP), располагая там код программы типа .COM. Из-за этого первое предложение, следующее за ORG должно быть исполняемой инструкцией.
Директива PROC.
Процедура - это участок кода, начинающийся с директивы PROC и заканчивающийся директивой ENDP. Хотя теоретически можно непосредственно переходить к процедуре инструкцией JMP при последовательном выполнении команд программы, обычно процедуры вызываются инструкциями CALL, а возврат из них выполняется инструкциями RETN или FAR.
Процедура, расположенная в том же сегменте, что и вызывающая процедура - это процедура типа NEAR, и она вызывается простым изменением смещения в регистре IP. Отсутствующий спецификатор NEAR добавляется по умолчанию. Если вызываемая процедура находится за пределами текущего сегмента, она должна быть объявлена как PUBLIC и вызывается с помощью CALL.
Для программы типа .EXE основная процедура, содержащая первую выполняемую инструкцию, должна быть типа FAR.
Директива END.
Директива END помещается в конце исходного текста. Её формат - END [начальный адрес]. Необязательный начальный адрес указывает на размещение сегмента кода (обычно, его первой инструкции), с которого должно начинаться выполнение программы. Системный загрузчик использует этот адрес для инициализации регистра CS. Если программа состоит только из одного модуля, для него необходимо определить стартовый адрес. Если в программе несколько модулей, начальный адрес нужно определить только для одного (обычного первого) модуля.
Текст программы
;Генерация звука в фоновом режиме
.286
.MODEL SMALL
.STACK 100h
.data
tonelow dw 0
time dw ?
buffbyte dw ?
filename db 'shit.txt',0
handle dw ?
.code
start:
mov ax, @data ;инициализация
mov ds, ax;сегмента данных
mov ah,3dh;функция открытия файла
mov al,0;чтение из файла
lea dx,filename;указываем адрес файла
int 21h
jc exit ;если ошибка, то завершаем программу
mov handle,ax;номер дескриптора запоминаем в переменную
@ok:
mov di,5;в индекс приемника устанавливаем 5
@read:
mov bx, handle;номер дескриптора заносим в регистр bx
mov cx, 1;прочитать 1 байт
@readbyte:
mov ah, 3fh;функция чтения с файла
lea dx, buffbyte;указываем адрес переменной в dx, куда
; будут заноситься прочтенные символы из файла
int 21h
jc exit ;если ошибка, то завершаем программу
cmp buffbyte,'0';отбираем
jl @readbyte;числовые
cmp buffbyte,'9';символы, если не числовые читаем следующий
jg @readbyte;символ
mov ax,word ptr buffbyte ;в регистр заносим значение прочтенного символа
sub ax,30h;получаем число
cmp di,5;если индекс приемника 5, то символ умножаем
;на 1000
jl @di4;если индекс приемника меньше 5, то переходим на следующий символ
mov bx,1000
jmp @mulbx
@di4:
cmp di,4
jl @di3
mov bx,100;если второй символ, то умножаем на 100
jmp @mulbx
@di3:
cmp di,3
jl @di2
mov bx,10
jmp @mulbx
@di2:
cmp di,2
jl @di1
mov bx,1
jmp @mulbx
@di1:
mov time, ax;если 5 символ, то это время в мкс
jmp go;идем на воспроизведение полученных данных
@mulbx:
mul bx;умножаем полученное число на значение в bx
add tonelow,ax;складываем полученное значение
dec di;выделяем по 5 символов из файла
jnz @read;если не последний из 5 символ, то читаем
;следующий символ
go:
cmp tonelow, 270fh;если конец строки, то заканчиваем программу
je exit
call Sound;процедура воспроизведения
jmp @ok
exit:
mov bx,handle;номер дескриптора заносим в bx
mov ah,3eh;функция закрытия файла
int 21h
mov ah,4ch;функция отдачи управления микропроцессору
int 21h
Sound proc
pusha
xor ax, ax;очищаем ax
mov al,0b6h;заносим слово состояния 10110110b(0b6h) в командный регистр
;(порт 43h)
out 43h,al
in al, 61h;получим значение порта 61h в al
or al,3;инициализируем динамик и подаем ток в порт 61h
out 61h,al
mus:
mov ax, tonelow;в ax значение нижней границы частоты
out 42h,al;в порт 42h младшее слово ax: al
xchg al,ah;обмен между ax и al
out 42h,al;в порт 42h старшее слово ax: ah
push cx
mov cx, time
ext:
push cx
mov cx, 5000
iter:
loop iter
pop cx
loop ext
pop cx
loop mus
in al,61h;получим значение порта 61h в al
and al,0fch;выключить динамик
out 61h,al;в порт 61h
popa
ret
ENDP Sound
end start
программа звук файл директива
Литература
Питер Абель. Ассемблер. Язык и программирование для IBM PC: пер. с англ. - К.: Век+, М.: ЭНТРОП, К.: НТИ, 2003 - 736 с.
Ризаев И.С. Лекционный курс по дисциплине: «Системное программное обеспечение». Казань: КАИ, 2004.
Старостин Д.А. Лабораторные работы по дисциплине: «Системное программное обеспечение». Казань: КАИ, 2004.
Юров В., Хорошенко С. Ассемблер: учебный курс - СПб: Издательство “Питер”, 1999. - 672 с.
С. В. Зубков, «Ассемблер для DOS, WINDOWS, UNIX», Москва, 1998.
П. Нортон, «Персональный компьютер фирмы IBM и операционная система MS-DOS», Москва, 1992.
Р. Джордейн, «Справочник программиста персональных компьютеров типа IBM PC, XT и AT», Москва, 1992.
П. В. Беспалов, «Программирование на языке Ассемблер», Москва, 1993.
1. Размещено на www.allbest.ru
Подобные документы
Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.
курсовая работа [1,5 M], добавлен 08.02.2011Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.
курсовая работа [823,0 K], добавлен 18.12.2011Файлы IO.SYS и MSDOS.SYS; командный процессор DOS. Базовая система ввода-вывода, загрузчик, диалог пользователя с DOS, команды. Недостатки языка програмирования с++. Создание и описание программы, позволяющей работать с файлами в среде DOS, ее алгоритм.
курсовая работа [24,4 K], добавлен 02.12.2009Разработка программы "Калькулятор" для работы с вещественными числами. Алгоритм работы программы. Набор тестов и варианты исполнения программы. Порядок ввода текста, стандартные ошибки в работе программы. Программная документация, текст программы.
курсовая работа [225,9 K], добавлен 13.10.2013Преобразование матрицы по заданным правилам. Методика работы с массивами, основанная на классических алгоритмах. Разработка и описание блок-схемы алгоритма. Листинг программы, экраны работы и отладки программы. Инструкция для пользователей программы.
контрольная работа [338,4 K], добавлен 29.01.2013Введение в объектно-ориентированное программирование. Постановка задачи. Описание алгоритма решения в псевдокоде (команды в виде текста на русском языке). Исходный текст программы на С. Тестирование программы. Модификация программы. Полиморфизм.
курсовая работа [294,0 K], добавлен 08.09.2008Разработка программы вычисления выражения y = (x+10)5. Ход работы, структурная схема алгоритма. Окна основных обозревателей системы, текстовый редактор. Интерфейс модели ЭВМ, методы ввода и отладки программы, действия основных классов команд, адресация.
лабораторная работа [523,4 K], добавлен 28.12.2014Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.
курсовая работа [1,4 M], добавлен 16.03.2012Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.
курсовая работа [1,4 M], добавлен 04.06.2013Общие сведения о языке ассемблера. Назначение команды прерывания INT число. Описание логической структуры программы: алгоритм работы, используемые методы, входные и выходные данные. Структура и тестирование программы. Руководство оператора программы.
курсовая работа [90,0 K], добавлен 01.12.2009