SHARE
TWEET

Untitled

a guest Sep 19th, 2019 89 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;----Prg_7_l.asn----
  2. ;Программа,имитирующа язвук сирены.
  3. ;Изменение высоты звука от 450 до 2100 Гц.
  4. ;Используется макрос delay (задержка).
  5. ;При необходимости
  6. ;можно по менять значение задержки (по умолчанию - для процессора Pentium).
  7. ;-------------------
  8. format mz
  9. push cs
  10. pop ds
  11. ;include 'E:\fasm17003\INCLUDE\MACRO\masm.inc'
  12. ;include 'E:\fasm17003\INCLUDE\win32a.inc'
  13. ;masm
  14. ;model small
  15.         stack 100h
  16.         ;макрос задержки, его текст ограничивается директивами macro и endm.
  17.         ;На входе — значение задержки (в мкс)
  18.        ; delay macro time
  19.                ; local   ext,inter
  20.                ; push    cx
  21.               ;  mov     cx,time
  22.        ; ext:
  23.         ;        push    cx
  24.          ;       mov     cx,5000
  25.         ;iter:
  26.          ;       loop    iter
  27.           ;      pop     cx
  28.            ;     loop    ext
  29.             ;    pop cx
  30.         ;endm
  31.         ;.data           ;сегмент данных
  32.  
  33.         ;.code           ;сегмент кода
  34.        main:            ;точка входа в программу
  35.         ; mov ax ,@data  ;связываем регистр ds с сегментом
  36.         ; mov ds ,ax     ;данных через регистр ax
  37.        ;  mov ax ,0      ;очищаем ax
  38.         go:
  39. ;заносим слово состояния 10110110b(0B6h) в командный регистр (порт 43h)
  40.        ; raoval,0B6h
  41.         out 43h,al
  42.         in al,61h               ;получим значени порта 61h в al
  43.         or al,3         ;инициализируем динамик и подаем ток в порт 61h
  44.         out 61h,al
  45.         mov cx,2083     ;количество шагов ступенчатого изменения тона
  46. musicup:
  47.                         ;в ax значение нижней границы частоты
  48.         mov ax,[tonelow]
  49.         out 42h,al      ;в порт 42h младшее слово ax:al
  50.         xchg al,ah      ;обмен между al и ah
  51.         out 42h,al      ;в порт 42h старшее слово ax:ah
  52.         add [tonelow],1   ;повышаем тон
  53.         ;delay 1                 ;задержка на 1 мкс
  54.         mov dx,[tonelow]  ;в dx текущее значение высоты
  55.         mov [temp],dx     ;temp - верхнее значение высоты
  56.         loop musicup    ;повторить цикл повышения
  57.         mov cx,2083     ;востановить счетчик цикла
  58. musicdown:
  59.         mov ax,[temp]     ;в ax верхнее значение высоты
  60.         out 42h,al      ;в порт 42h младшее слово ax:al
  61.         mov al,ah               ;обмен между al и ah
  62.         out 42h,al      ;в порт 42h старшее слово ax:ah
  63.         sub [temp],25      ;понижаем высоту
  64.        ; delay 1         ;задержка на 1мкс
  65.         loop musicdown  ;повторить цикл понижения
  66. nosound:
  67.         in al,61h               ;получим значение порта 61h в AL
  68.         and al,0FCh     ;выключить динамик
  69.         out 61h,al      ;в порт 61h
  70.         mov dx,2651     ;для последующих циклов
  71.         mov [tonelow],dx
  72.         inc [cnt]         ;увеличиваем счетчик проходов, то есть
  73.                         ;количество звучаний сирены
  74.         cmp [cnt],6               ;5 раз ?
  75.         jne go          ;если нет,идти на метку go
  76. exit:
  77.         mov ax,4c00h   ;стандартный выход
  78.         int 21h
  79. ;end main
  80.  
  81. ;конец программы
  82.  
  83.  tonelow dw  2657        ;нижняя граница звучания 450 Гц
  84.         cnt     db  0   ;счетчик для выхода из прогаммы
  85.         temp    dw  70   ;верхняя граница звучания
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top