Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2011, 20:53   #1
emersy
 
Регистрация: 29.11.2010
Сообщений: 3
По умолчанию Ассемблер - (таймер), чтение из файла в масив

Привет всем.
прошу помощи знатокам ассемблера. (дос)
через таймер можно генерировать звуки, делать паузы при помощи функ. доса, в результате чего можно проиграть мелодию.
следующая программа играет мелодию, частоты и задержки указанные в массивах.
нужно сделать так, чтобы это все программа считывала из файла ...
т.е. зчитала ноты и задержки и начала играть.
или читает ноту задержку, проигрует, и читает следующую.
буду благодарен за помощь.
извиняюсь за комментарии на укр
Код:
title     music
sseg	segment stack
	db	100h dup(0)
sseg	ends
dseg	segment 'data'
BEAT        DB   4,4,4,8,4,8,4,8,8,8,4,4,4, 8,4,8,8,4,8,4,8,4,4,4,8,4,4,4,4,8,8,8,4    ;тривалісь ноти
FREQUENC DW   0474h,0474h,0A37h,059Ch,05F1h,059Ch,0432h,0474h,0A37h,0000h,0A37h    ;таблиця частот
            DW   0A37h,059Ch, 05F1h,059Ch,05F1h,0474h,0A37h,059Ch,0A37h,05F1h,0474h   ;
            dw   0474h,0A37h,0474h,0432h,0474h,0474h,0474h,0000h,0432h,0389h,0000h
MELODY      DB   1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,32,0FFH  ;номер частоти ноти
dseg	ends

code    segment 'code'
        assume  ss:sseg,ds:dseg,cs:code
	jmp	main

main	proc    far
	push	ax
	mov	ax,dseg
	mov	ds,ax
;ініціалізація
PORT_B      EQU  61H
COMMAND_REG EQU  43H
LATCH2      EQU  42H
            IN   AL,PORT_B      ;отримуєм поточний статус
            OR   AL,00000011B   
            OUT  PORT_B,AL      ;вмикаєм динамік
            MOV  SI,0           ;ініціалізуєм вказівник
            MOV  AL,0B6H        
            OUT  COMMAND_REG,AL 
;зчитуєм ноту, отримуєм її частоту і надсилаєм в 2 канал
NEXT_NOTE:  LEA  BX,MELODY      ;отримуєм зміщення для мелодії
            MOV  AL,[BX][SI]    ;отримуєм код n-ї ноти
            CMP  AL,0FFH        ;перевірка на кінець рядка
            JE   NO_MORE        ;якщо кінець - вихід
            CBW                 ;переводим в слово
;отримання частоти
            MOV  BX,OFFSET FREQUENCY	;зміщення таблиці частоти
            DEC  AX             ;починаєм відлік з 0
            SHL  AX,1           ;помножимо на 2 бо слово
            MOV  DI,AX          ;переадрисовуєм в DI
            MOV  DX,[BX][DI]    ;отримуєм частоту із таблиці
;програвання ноти
            MOV  AL,DL          ;готуєм молодший байт частоти
            OUT  LATCH2,AL      ;надсилаєм його
            MOV  AL,DH          ;готуєм старший байт частоти
            OUT  LATCH2,AL      ;надсилаєм його
;створення циклу затримки
            MOV  AH,0           ;номер функції читання лічильника
            INT  1AH            ;отримуєм значення лічильника
            MOV  BX,OFFSET BEAT ;зміщення таблиці довжини
            MOV  CL,[BX][SI]    ;отримуєм довжину наступної ноти
            MOV  CH,0           ;
            MOV  BX,DX          ;отримуєм молодше слово лічильника
            ADD  BX,CX          ;підраховуємо момент закінчення 
STILL_SOUND: INT 1AH            ;отримуєм значення лічильника
            CMP  DX,BX          ;порівняння з закінченням
            JNE  STILL_SOUND    ;не рівні продовжуєм звук
            INC  SI             ;перехід до наступної ноти
            JMP  NEXT_NOTE      ;
NO_MORE:    IN   AL,PORT_B      ;отримуєм статус порту В
            AND  AL,0FCH        ;виключаєм динамік
            OUT  61H,AL         ;
	    mov  ax,4c00h
	    int	 21h
main	endp
code    ends
        end
emersy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чтение из файла Niksan Общие вопросы C/C++ 3 02.05.2011 18:14
Чтение из файла atenon C++ Builder 5 17.03.2011 19:46
С++ Чтение из файла sir.andrey Помощь студентам 9 15.10.2010 16:00
Ассемблер. чтение/установка времени blackbanny Помощь студентам 2 27.10.2009 17:57
чтение из файла. aschak Общие вопросы C/C++ 9 30.12.2008 15:24