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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.10.2010, 18:03   #1
my_sappho_story
Пользователь
 
Аватар для my_sappho_story
 
Регистрация: 20.10.2010
Сообщений: 29
Вопрос пищалка, точнее ее прога

Как составить программу, которая будет формировать звуковой сигнал от динамика в компьютере, с частотой 1200 Гц и длительностью 4 сек?

Там что-то связано с машинным циклом, тактом, нужно программно сформировать временный интервал, но как все это придумать полность и как записать программно?
my_sappho_story вне форума
Старый 22.10.2010, 20:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Для Win32 программа?
I'm learning to live...
Stilet вне форума
Старый 22.10.2010, 20:25   #3
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

Что темы плодите http://programmersforum.ru/showthread.php?t=118159

Код:

#include <conio.h>
#include <dos.h>
#include <stdio.h>

#define do 261
#define re 293
#define mi 329
#define fa 349
#define sol 392
#define lya 440
#define si 493

void main()
{
clrscr();





int song[100] = {mi,sol,sol,mi,lya,sol,lya,sol,lya,sol,lya,sol,lya,si};
int dlit[100]=   {3, 4,   3, 4,  2, 2,  2 , 2  ,2   ,2 , 2 ,2,  2,  4};

for (int i=0;i<14;i++)
{
outp(0x43,0xb6); //101 101 10

unsigned int del=1193180/song[i];

outp(0x42,(del & 0x00FF)); //low

outp(0x42,(del >> 8)); //hi

unsigned int read=inp(0x61);
outp(0x61,(read | 3));

																for(int a=1;a<dlit[i];a++){
							 _asm {

				 MOV CX, 0002h
				 MOV DX, 80DEh
				 MOV AH, 86h
				 INT 15h
								 };

}

outp(0x61,(read & 252));
															 for(a=1;a<dlit[i];a++){
								 _asm {

				 MOV CX,0000h
				 MOV DX,5B8Dh
				 MOV AH, 86h
			   INT 15h
                          };

}

}


	
getch();
}
bondik вне форума
Старый 21.11.2010, 16:23   #4
my_sappho_story
Пользователь
 
Аватар для my_sappho_story
 
Регистрация: 20.10.2010
Сообщений: 29
По умолчанию

Почему для вот этого кода:
Код:
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA 
.CODE
						;Установим режим таймера 
	mov AL,0B6h 		;(1) Какал 2, режим 3, вид операции 3 
	out 43h,AL 			;(2) B регистр команд 
						;Установим частоту канала 2 таймера 
	mov АХ, 995 		;(3) 193000 Гц/995=1200 Гц 
	out 42h,AL 			;(4) Младший байт константы в порт 
	mov AL,AH 			;(5) АL=старший байт константы 
	out 42h,AL 			;(6) Старший байт константы в порт 
						;Bключим динамик и разрешим таймер 
	in AL,61h 			;(7) Bведем содержимое порта 61h 
	or AL,3 			;(8) Установим биты 0 и 1 
	out 61h,AL 			;(9) Выведем в порт 
						;После задержки выключим динамик и запретим таймер 
	mov ECX,200000000	;(10) Задержка ~ 4 с 
	delay: db 67h 		;(11) Префикс изменения размера адреса 
	loop delay 			;(12) Цикл 
	and AL,11111100b	;(13) Сбросим в AL биты 0 и 1 
	out 61h,AL 			;(14) Выведем в порт 
	
MOV AH,4Ch
INT 21h
END
возникают ошибки
Цитата:
mov АХ, 995 ;(3) 193000 Гц/995=1200 Гц
**Error** stgz.asm(10) Too few operands to instruction
mov АХ, 995 ;(3) 193000 Гц/995=1200 Гц
*Warning* stgz.asm(10) Argument needs type override
mov ECX,200000000 ;(10) Задержка ~ 4 с
**Error** stgz.asm(19) Undefined symbol: ECX
Как исправить? Кто-то может подсказать?
my_sappho_story вне форума
Старый 21.11.2010, 16:23   #5
my_sappho_story
Пользователь
 
Аватар для my_sappho_story
 
Регистрация: 20.10.2010
Сообщений: 29
По умолчанию

Почему для вот этого кода:
Код:
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA 
.CODE
						;Установим режим таймера 
	mov AL,0B6h 		;(1) Какал 2, режим 3, вид операции 3 
	out 43h,AL 			;(2) B регистр команд 
						;Установим частоту канала 2 таймера 
	mov АХ, 995 		;(3) 193000 Гц/995=1200 Гц 
	out 42h,AL 			;(4) Младший байт константы в порт 
	mov AL,AH 			;(5) АL=старший байт константы 
	out 42h,AL 			;(6) Старший байт константы в порт 
						;Bключим динамик и разрешим таймер 
	in AL,61h 			;(7) Bведем содержимое порта 61h 
	or AL,3 			;(8) Установим биты 0 и 1 
	out 61h,AL 			;(9) Выведем в порт 
						;После задержки выключим динамик и запретим таймер 
	mov ECX,200000000	;(10) Задержка ~ 4 с 
	delay: db 67h 		;(11) Префикс изменения размера адреса 
	loop delay 			;(12) Цикл 
	and AL,11111100b	;(13) Сбросим в AL биты 0 и 1 
	out 61h,AL 			;(14) Выведем в порт 
	
MOV AH,4Ch
INT 21h
END
возникают ошибки
Цитата:
mov АХ, 995 ;(3) 193000 Гц/995=1200 Гц
**Error** stgz.asm(10) Too few operands to instruction
mov АХ, 995 ;(3) 193000 Гц/995=1200 Гц
*Warning* stgz.asm(10) Argument needs type override
mov ECX,200000000 ;(10) Задержка ~ 4 с
**Error** stgz.asm(19) Undefined symbol: ECX
Как исправить? Кто-то может подсказать?
my_sappho_story вне форума
Старый 21.11.2010, 21:21   #6
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

Код:
mov ECX,200000000 ;(10) Задержка ~ 4 с
добавить директиву здесь
Код:
.CODE
.386
в др случае AX набрано не на английском ASCII
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума
Старый 29.11.2010, 20:00   #7
my_sappho_story
Пользователь
 
Аватар для my_sappho_story
 
Регистрация: 20.10.2010
Сообщений: 29
По умолчанию

Код:
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA 
.CODE
.386 

;Установим режим таймера 
mov AL,0B6h 		           ;(1) Какал 2, режим 3, вид операции 3 
out 43h,AL 			;(2) B регистр команд 
;Установим частоту канала 2 таймера 
mov AX, 995 		           ;(3) 193000 Гц/995=1200 Гц 
out 42h,AL 			;(4) Младший байт константы в порт 
mov AL,AH 			;(5) АL=старший байт константы 
out 42h,AL 			;(6) Старший байт константы в порт 
;Bключим динамик и разрешим таймер 
in AL,61h 			;(7) Bведем содержимое порта 61h 
or AL,3 			           ;(8) Установим биты 0 и 1 
out 61h,AL 			;(9) Выведем в порт 
;После задержки выключим динамик и запретим таймер 
mov ECX,200000000	           ;(10) Задержка ~ 4 с 
delay: db 67h 		           ;(11) Префикс изменения размера адреса 
loop delay 			;(12) Цикл 
and AL,11111100b	           ;(13) Сбросим в AL биты 0 и 1 
out 61h,AL 			;(14) Выведем в порт 

MOV AH,4Ch
INT 21h
END
Почему-то не кричит!! Ошибок уже не находит, но через несколько мгновений появляется окно с надписью
Цитата:
Terminated, exit code 48
Я уже и не знаю, что с этим делать. Получаю EXE-файл с помощью командной строки. Потом его на TD перетаскиваю. А он не издает ни звука :"(
Что не так делаю?
my_sappho_story вне форума
Старый 30.11.2010, 04:34   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

my_sappho_story
На вопрос Stilet "Для Win32 программа?" ты не соизволил ответить, а зря... Далее, программа написана для DOS с использованием портов 42h, 43h, 61h, но запускается эта программа наверняка или под WinXP или под Vista а здесь даже в режиме эмуляции DOS порты работать не будут
решение проблемы:
1) или писать драйвер режима ядра
2) или запускать машину загрузив на нее DOS с дискетки или флешки и уже под чистым DOS твоя программа заработает
Mikl___ вне форума
Старый 30.11.2010, 11:45   #9
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Mikl___
в режиме эмуляции DOS порты работать не будут
Странно. У меня в командной строке почему-то пищит.
Ant1971on вне форума
Старый 30.11.2010, 11:52   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Ant1971on
Под Win95/98 будет работать, а вот my_sappho_story написал:
Цитата:
Получаю EXE-файл с помощью командной строки. Потом его на TD перетаскиваю. А он не издает ни звука :"( Что не так делаю?
Что еще можно посоветовать для дистанционной проверки программы? Откуда я могу знать, что на самом деле происходит у my_sappho_story?
Mikl___ вне форума
Закрытая тема


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой метод точнее? Vredina90 Помощь студентам 2 21.10.2010 17:40
lnk, а точнее как узнать путь к exe. Zeraim Общие вопросы Delphi 4 25.07.2009 13:59
Хочу создать вирус, точнее создал и меня мучают вопросы DamneD Паскаль, Turbo Pascal, PascalABC.NET 5 09.05.2009 12:05
Команды MS-DOS (точнее командной строки windows) kiraM Windows 4 03.09.2008 22:11
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24