Hello.

Recently asked to write a program that generates a certain frequency of sound, depending on keystrokes on the keyboard. The keyboard must contain at least two octaves of sounds in the i8086 assembler. Nothing comes to mind, even how to start a program.

Help me please. Thank you in advance

    1 answer 1

    .286 .model small .stack 20h .data msg1 db 13,10,'Введите T:',13,10,'$' msg2 db 13,10,'Введите To:',13,10,'$' msg label byte ;структура для ввода символов клавиатуры maxnum db 5 ;масимальное количество символов reallen db ? numfld db 5 dup (30H) ;буфер для ASCII кодов сивмволов T dw ? To dw ? sum dw ? z dw 0 ;результат преобразования символов в часло mult10 dw 0;вспомогательная переменая для преобразования символов в часло .code sound proc pusha ;mov di,6000 ;частота звука ;mov bx,2000 ;длительность 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 out 61H,al l1: mov cx,2801H l2: loop l2 dec bx jnz l1 mov al,ah out 61H,al popa ;mov ah,4cH ;int 21H ret sound endp asbin proc ;процедура преобразования символов в часло mov mult10,0001 ;инициализация фактора преобразования mov z,0 ;обнуление результата mov cx,10 ;основание системы счисления lea si,numfld-1 ;установка указателя на начало буфера mov bl,reallen ;загрука фактического колиества символов часла sub bh,bh ;обнуление регистра bh B20: ;цикл преобразования символов часло mov al,[si+bx] ;загрузка символа из конца буфера and ax,000fH ;выделение младешей тетрады mul mult10 ;выделение еденицы и умножение цифры на 10 в степени n add z,ax ;прибавление промежуточного результата mov ax,mult10 ;загрузка переменной нового значеня mult10 в ax mul cx ;умножение переменной mult10 на 10 mov mult10,ax ;сохранение нового значение переменной dec bx ;перемещение указателя на следующий разряд числа jnz B20 ;продолжение цикла преобразования ret asbin endp start: mov ax,@data mov di,500 ; загрузка частоты звучания динамика mov bx,T; загрузка длительности звучания в тактах м/п call sound mov di,1000 ; загрузка частоты звучания динамика mov bx,T; загрузка длительности звучания в тактах м/п call sound mov di,1500 ; загрузка частоты звучания динамика mov bx,T; загрузка длительности звучания в тактах м/п call sound kc:mov ah,4cH int 21H end start 
    • Thank you very much for the code. Just one more question I launched it but does not lose anything. And it does not display any messages, it just loads and disappears immediately. I wonder why?
    • 3
      Probably because it is a DOS program and you need direct access to the equipment? - gecube
    • Everything can be just other programs written in assembler that normally started and did everything that was set .. - Tim
    • So you decide on which platform you need - cy6erGn0m
    • one
      Assemblers are a lot of different =) And the code for the PC will be very different from the code for some ARM Cortex-M3. - Alexey Sonkin