1. Заголовок или название темы должно быть информативным 2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE] 3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора. 5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM! 6. Проверяйте программы перед тем, как выложить их на форум!!
Составить программу для генерации звуковых сигналов, период которых вычисляется по формуле T=(A+1000)/5. Переменную А ввести с клавиатуры. Размерность А - 16-ти разрядное слово (WORD) (0...65535). Прерывание программы при нажатии клавиши ESC.
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
;запись коэффициента деления в 3-й канал таймера mov dx,ax mov al,0B6h out 43h,al mov al,dl out 42h,al mov al,dh out 42h,al
;включить динамик in al,61h or al,3 out 61h,al
jmp input_params
;завершение работы программы exit:
;выключить динамик in al,61h and al,0FCh out 61h,al
;выход mov ax,4C00h int 21h
;--- Ввод целого числа --- read_int proc n = word ptr [bp-2] push bp mov bp,sp sub sp,2 mov n,0 mov ah,9 ;вывод промпта int 21h @@read_char: mov ah,8 ;ввыод символа int 21h cmp al,27 ;ESC -> выход с CF = 1 je @@cancel cmp al,13 ;CR -> завершение ввода je @@done cmp al,'0' ;является ли введённый символ цифрой? jb @@read_char cmp al,'9' ja @@read_char push ax ;эхопечать mov dx,ax mov ah,2 int 21h pop bx sub bl,'0' ;добавление цифры в результат xor bh,bh mov ax,10 mul n add ax,bx mov n,ax jmp @@read_char ;выход с CF = 1 @@cancel: stc jmp @@exit @@done: ;переход на новую строку mov dl,13 mov ah,2 int 21h mov dl,10 mov ah,2 int 21h ;выход с результатом в AX и CF = 0 mov ax,n clc @@exit: mov sp,bp pop bp ret read_int endp