Advertisement
Guest User

Untitled

a guest
May 25th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model tiny
  2. assume cs:mycode
  3. assume ds:mydata
  4. assume ss:mystack
  5.  
  6. mydata segment
  7. ; <Ob'yavleniya peremennyh i strok>
  8.     string db 'Hello, world!', 0
  9.     count db 5
  10.     SymNum dw 0
  11. mydata ends
  12.  
  13. mycode segment
  14. ; Polzovatelskii obrabotchik preryvaniya
  15. myhandler:
  16.     sti
  17.         ; <Kod obrabotchika preryvaniya v sootvetstvii s zadaniem>
  18.     push ax
  19.     mov ax, mydata
  20.     mov ds, ax
  21.     pop ax
  22.     mov di, offset count; переменная count
  23.    
  24.     dec byte ptr ds:[di]
  25.     jnz exitHandler
  26.     ; обработка на 17 такте
  27.  
  28.     mov byte ptr ds:[di], 5
  29.  
  30.     push ds
  31.     push di
  32.     push bx
  33.     push ax
  34.  
  35.     mov ax, mydata
  36.     mov ds, ax
  37.     mov di, offset SymNum
  38.     mov bp, ds:[di]
  39.     ;mov di, offset SymNum
  40.     inc word ptr ds:[di]
  41.     mov di, offset string
  42.     mov bl, ds:[di+bp]
  43.        
  44.  
  45.     shl bp, 1
  46.     mov ax, 0B800h
  47.     mov ds, ax
  48.     mov byte ptr ds:[bp], bl
  49.     mov byte ptr ds:[bp+1], 01110001b
  50.    
  51.     pop ax
  52.     pop bx
  53.     pop di
  54.     pop ds
  55.    
  56. exitHandler:
  57.     mov al, 20h
  58.         out 20h, al
  59.         iret
  60.  
  61. ; Tochka vhoda v programmu
  62. mystart:        
  63.         mov ax, mydata
  64.         mov ds, ax        
  65.         mov ax, 0
  66.         mov es, ax
  67.         mov ax, mystack
  68.         mov ss, ax
  69.     mov sp, 0
  70.  
  71.         ; <Kod osnovnoi programmi v sootvetstvii s zadaniem>
  72.    
  73.     mov si, 70h
  74.     push es:[si+2]; сохраняем вектор прерываний
  75.     push es:[si];
  76.     mov word ptr es:[si+2], seg myhandler; записываем в вектор прерываний адрес обработчика
  77.     mov word ptr es:[si], offset myhandler;
  78.  
  79.     in al, 21h; считываем рег IMR
  80.     and al, 0FEh; скидываем бит irq0 в 0
  81.     out 21h, al; записываем число в 21h
  82.  
  83.     sti; разрешаем прерывания
  84.  
  85.     mov cx, 0FFFFh
  86. ddelay:
  87.     mov bx, 0FFFFh
  88.    
  89. delay:
  90.     nop
  91.     dec bx
  92.     jnz delay
  93.     nop
  94.     dec cx
  95.     jnz ddelay
  96.    
  97.     ; возврат в исх сост
  98.  
  99.     pop es:[si]
  100.     pop es:[si+2]  
  101.  
  102.         ; Vyhod v DOS
  103.         mov ax, 4C00h
  104.         int 21h
  105. mycode ends
  106.  
  107. .stack
  108. mystack segment
  109.         db 1000 dup(?)  ; razmer steka 1000 bait
  110. mystack ends
  111.  
  112. end mystart
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement