int inp_int()
{
string str;
int number; //init
cout << "Введите целое число: ";
try
{
cin >> str;
number = stoi(str);
if (!number)
throw NULL;
}
catch (...)
{
cout << "Ошибка";
return inp_int();
}
cin.clear(); // очистка состояния потока
cin.ignore(INT_MAX, '\n');
return number;
}
int inp_int()
{
int number;
cout << "Введите целое число: ";
try
{
cin >> number;
if (cin.fail())
throw NULL;
}
catch (...)
{
cin.clear(); // очистка состояния потока
cin.ignore(INT_MAX, '\n');
cout << "Ошибка";
return inp_int();
}
cin.clear(); // очистка состояния потока
cin.ignore(INT_MAX, '\n');
return number;
}
<b>a dw 30 ; test</b>
...
some code
...
;ввод в переменную кода клавиши
mov ah,0 ;ожидание нажатия клавиши
int 16h
cmp al,27d ;проверка кода клавиши ESC
je endprg_;
<b> mov byte ptr [a],al ;debug but must work</b>
;вычисление формулы периода
mov ax, a
add ax, 50
mov bl, 2
div bl
mov time, ax
mov di, 200
mov bx, time
call sound
.286
.model small
.stack 256h
.data
msg label byte ;стуктура для ввода символов с клавиатуры
maxnum db 6 ; переменная для перевода символов в число
reallen db (?)
numfld db 6 dup (?)
x dw ?
mult10 dw 1
txt db 'введите тон звучания ',10,13,'$'
txt1 db 'введите длительность звуания'
a dw 30 ; test
ton dw 200 ; test
time dw 100
.code
asbin proc
mov MULT10,0001
mov x,0
mov cx,10
lea si,numfld-1
mov bl,reallen
sub bh,bh
b20:
mov al,[si+bx]
and ax,000fh
mul MULT10
add X,ax
mov ax,MULT10
mul cx
mov MULT10,ax
dec bx
jnz b20
ret
asbin endp
sound proc
mov al,0B6h ;загрузка управлющего слова в таймер
out 43h,al ;
mov dx,0014h ; задание мах периода звука
mov ax,4F38h
div di ; вычисление фактиеского преиода звука
out 42h,al ;загрузка младшего байта периода звука в таймер
mov al,ah
out 42h,al ; загрузка старшего
in al,61h ;чтение порта состояния динамика
mov ah,al ;сохраниение значение порта состояния в
or al,3 ;включение звука установкой 2х младших бит в единицу
out 61h,al ;динамик начинает звучать
l1: mov cx,2801h ;задержка в 1 млсек
l2: loop l2 ;цикл задержки
dec bx ;уменьшение длительности звучания на 1 дискрету !!!делаем звук бесконечным, нужно добавить выход по нажатию клавиши
jnz l1 ;цикл отработки длительности звучания динамика
mov al,ah ;выключение звука от динамика
out 61h,al
ret
sound endp
main proc far
pusha
;mov ax,@data
;mov ds,ax
;mov ah,9
;lea dx,txt1
;int 21h
;mov ah,0ah ; ввод символов с клавиатуры в буфер msg
;lea dx,msg ; .
;int 21h ; .
;call asbin ; преобразование символов в число
;mov ax, x ;ввод переменной а
;mov a,ax
fill:
;ввод в переменную кода клавиши
mov ah,0 ;ожидание нажатия клавиши
int 16h
cmp al,27d ;проверка кода клавиши ESC
je endprg_;
mov byte ptr [a],al ;debug but must work
;вычисление формулы периода
;mov byte ptr ax, [a]
mov ax, a
add ax, 50
mov bl, 2
div bl
mov time, ax
mov di, 200
mov bx, time
call sound
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;...
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
loop fill
endprg_:
popa ;восстановление из стека регистров
mov ah,4ch ; возврат в ОС
int 21h
main endp
end main