Ladizzz

Untitled

Jun 1st, 2021
951
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .286
  2. .model small
  3. .stack 100h
  4. .data
  5. ;переменные
  6. txt1 db 13,10, 'введите переменную X = $'
  7. txt2 db 13,10, 'введите переменную Y = $'
  8. msg label byte    ; стуктура для ввода символов с клавиатуры
  9. maxnum db 6
  10. reallen db ?
  11. numfld db 5 dup (30H)
  12. mult10 dw 0       ; переменная для преобразования
  13. a db 0
  14. x db 0
  15. y db 0
  16. xfix db 14
  17. yfix db 4
  18. sec dw 2500       ; количество милисекунд
  19. Time dw 50        ; время звучания ступени в милисекундах
  20. ton dw 1000
  21. .code
  22.  
  23. sound proc
  24.     mov al,0B6h   ; загрузка управлющего слова в таймер
  25.     out 43h,al    ;
  26.     mov dx,0014h  ; задание мах периода звука
  27.     mov ax,4F38h
  28.     div di        ; вычисление фактиеского преиода звука
  29.     out 42h,al    ; загрузка младшего байта периода звука в таймер
  30.     mov al,ah
  31.     out 42h,al    ; загрузка старшего
  32.     in al,61h     ; чтение порта состояния динамика
  33.     mov ah,al     ; сохраниение значение порта состояния в ah
  34.     or al,3       ; включение звука установкой 2х младших бит в единицу
  35.     out 61h,al    ; динамик начинает звучать
  36.  
  37. l1:
  38.  
  39.     mov cx,2000h  ; задержка в 1 млсек
  40. l2:
  41.  
  42.     loop l2       ; цикл задержки
  43.     dec bx        ; уменьшение длительности звучания на 1 дискрету
  44.     jnz l1        ; цикл отработки длительности звучания динамика
  45.     mov al,ah     ; выключение звука от динамика
  46.     out 61h,al
  47.     ret
  48. sound endp
  49.  
  50. asbin proc
  51.     mov mult10,0001
  52.     mov a,0
  53.     mov cx,10
  54.     lea si,numfld-1
  55.     mov bl,reallen
  56.     sub bh,bh
  57. b20:
  58.  
  59.     mov al,[si+bx]
  60.     and ax,000fh  ; выделение младшей тетрады
  61.     mul mult10    ; умножение цифры на 10 в степени n
  62.     add a,al      ; прибавление промежуточного результата
  63.     mov ax,mult10
  64.     mul cx
  65.     mov mult10,ax ; новое значение переменной
  66.     dec bx
  67.     jnz b20
  68.     ret
  69. asbin endp
  70.  
  71. zaderzhka proc
  72.     mov bx,1000   ; пауза 1 cек
  73. ll3:
  74.     mov cx,sec    ; задаем секунды
  75. ll4:
  76.     loop ll4
  77.     dec bx
  78.     jnz ll3
  79.     ret
  80. zaderzhka endp
  81.  
  82.  
  83. START:
  84.     mov ax,@data  ; начало программы
  85.     mov ds,ax     ; настройка сегментного регистра данных ds
  86.  
  87. ;Ввод х коорднаты
  88.     mov ah,9      ; вывод приглашения
  89.     lea dx,txt1   ; приглашение на ввод X
  90.     int 21h
  91.     mov ah,0Ah    ; читаем ввод до клавиши ENTER
  92.     lea dx,msg
  93.     int 21h
  94.     call asbin    ; Вызов процедуры преобразования символа в число
  95.     mov bl,a
  96.     mov x,bl
  97.  
  98. ;Ввод y координаты
  99.     mov ah,9
  100.     lea dx,txt2
  101.     int 21h
  102.     mov ah,0Ah
  103.     lea dx,msg
  104.     int 21h
  105.     call asbin    ; Вызов процедуры преобразования символа в число
  106.     mov bl,a
  107.     mov y,bl
  108.  
  109. ;Очистка экрана
  110.     mov ah,0      ; видеорежим, очистить экран
  111.     mov al,3      ; текстовый формат 80х25
  112.     int 10h       ; прерывание DOS 10H
  113.  
  114. labst:
  115. ;Звук 1
  116.     mov di,ton    ; загрузка тона
  117.     mov bx,Time
  118.  
  119.     call sound    ; 1-й звук
  120.  
  121. ;Установка позиции курсора
  122.     mov dl,xfix   ; колонка (от 0)
  123.     mov dh,yfix   ; строка (от 0)
  124.     mov ah,02h    ; установка позиции курсора
  125.     int 10h       ; прерывание DOS 10H
  126.  
  127.     call zaderzhka
  128.  
  129. ;Звук
  130.     mov di,ton    ; загрузка тона
  131.     mov bx,Time
  132.  
  133.     call sound    ; 2-й звук
  134.  
  135. ;Установка позиции курсора
  136.     mov dl,x      ; колонка (от 0)
  137.     mov dh,y      ; строка  (от 0)
  138.     mov ah,02h    ; установка позиции курсора
  139.     int 10h       ; прерывание DOS 10H
  140.  
  141.     call zaderzhka
  142.  
  143.     mov dl,0ffh   ; ввод без ожидания
  144.     mov ah,06h    ; ввод символа
  145.     int 21h       ; прерывание DOS 21H
  146.  
  147.     cmp al,27d    ; выходить по Esc
  148.     je EXIT       ; если операторы равны
  149.     jmp labst     ; безусловный переход по метке
  150.  
  151. EXIT:
  152.     mov ax,4c00h  ; завершение программы
  153.     int 21h       ; прерывание DOS 21H
  154.  
  155. end START
  156.  
RAW Paste Data