ostapdontstop

7_20

Jan 12th, 2021
1,336
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;====== Программа 20 Файл z7_pr20.asm ====================
  2.  
  3.  
  4. text    segment
  5. assume  CS:text, DS:data;, SS:_stack
  6. ;Подпрограмма задержки - DELAY
  7.  
  8. ;На входе CX = значение задержки в секундах
  9. delay proc near
  10.  
  11.     push DX ;Сохраним регистры, неявно
  12.     push AX ;используемые подпрограммой
  13.     xchg AX,CX ;АХ = значение задержки
  14.     mov CX,1000 ;Коэффициент перевода в секунды
  15.     ;(подбирается экспериментально)
  16.     mul CX ;Умножим CX на AX
  17.     mov CX,AX ;Перешлем результат в CX
  18.     pop AX ;Восстановим значения АХ
  19.     pop DX ;и DX из вызывающей программы
  20.  
  21. outer:
  22.     push cx
  23.     mov cx,2000
  24. inner:
  25.     loop inner
  26.     pop cx
  27.     loop outer
  28.  
  29.  
  30.     ret ;Возврат в вызывающую программу
  31.  
  32. delay endp
  33.  
  34. ;Подпрограмма outstring вывода строки на экран
  35.  
  36. ;На входе CX = число выводимых байт, DX = адрес строки
  37.  
  38. outstring proc near
  39.  
  40.     push bx
  41.     mov bx,dx
  42. .l:
  43.     mov dl,[bx]
  44.     mov ah,02h
  45.     int 21h
  46.     inc bx
  47.     loop .l
  48.  
  49.     pop bx
  50.  
  51. ret
  52.  
  53. outstring endp
  54.  
  55. ;Начало главной процедуры
  56.  
  57. myproc proc
  58.        
  59.     mov     ax,data        
  60.     mov     ds,ax  
  61. ; ...
  62.  
  63.     mov cx,meslen ;Настроим cx
  64.     mov dx,offset mes ;Настроим dx
  65.     call outstring ;Вызовем процедуру вывода
  66.  
  67.     mov cx,3 ; Настроим cx
  68.     call delay ;Вызовем процедуру задержки
  69.     mov cx,meslen-6 ;Еще раз выведем строку
  70.     mov dx,offset mes+3 ;(немного другую)
  71.     call outstring
  72.  
  73.     mov     ax,4C00h       
  74.     int     21h
  75.  
  76. myproc endp    
  77. text        ends
  78.  
  79. data        segment    
  80. mes db '***Сообщение***',10,13
  81. meslen equ $-mes           
  82. data        ends           
  83.  
  84.  
  85.     end myproc
RAW Paste Data