Advertisement
rnort

AVMIS-5

Nov 19th, 2012
423
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model tiny
  2. .386p
  3. .code
  4. start:
  5. jmp load
  6. IDT:    dq  13 dup (0)
  7.     dw  GP_handler, 08h, 8E00h, 0  
  8.         dq  18 dup (0)
  9.         dw  int8h_handler, 08h, 8E00h, 0  
  10.         dw  int9h_handler, 08h, 8E00h, 0  
  11. IDT_size equ $-IDT
  12. IDTR    dw  IDT_size-1
  13. IDTR_base dd IDT
  14. GDT:  
  15. dq  0  
  16. main_rec dw     0FFFFh, 0, 9A00h, 0
  17. gdtr    dw  $ - GDT - 1
  18. gdtr_base dd    0
  19. sel_cs  equ 8  
  20. sec     db      'A'
  21. tic     db      18
  22. mask_old1 db    0  
  23. mask_old2 db    0  
  24. gdtr_old db     0, 0, 0, 0, 0, 0
  25. idtr_old db     0, 0, 0, 0, 0, 0
  26. prompt  db  'Enter time to wait in seconds:$'
  27.  
  28. GP_handler:
  29.     pop eax ;
  30.         iretd  
  31. int8h_handler:
  32.     push    ax
  33.         dec     tic
  34.         cmp     tic, 0
  35.         jne     endd
  36.         mov     tic, 18
  37.         dec     sec
  38.         mov     al, sec
  39.         add     al, '0'
  40.         mov     es:220, al
  41. endd:
  42.         mov     al, 20h
  43.         out     020h, al  
  44.         out     0a0h, al  
  45.         pop     ax 
  46.     iretd
  47. int9h_handler:
  48.     push    ax
  49.     in      al,60h
  50.         cmp     al, 1; esc
  51.         je      go_out
  52.         mov     al, 20h
  53.         out     020h, al  
  54.     pop     ax
  55.         iretd
  56. go_out:
  57.         mov al, 20h
  58.         out     20h, al
  59.         jmp back
  60. load:
  61.     mov ax, cs
  62.     mov ds, ax
  63.     mov ax, 3
  64.     int     10h
  65.     mov ah, 9
  66.     lea dx, prompt
  67.     int 21h
  68.     mov ah, 1
  69.     int     21h
  70.     sub al, '0'
  71.     mov sec, al4
  72.    
  73.     cli ; запрет прер
  74.     in  al, 70h
  75.     or  al, 80h
  76.     out     70h, al
  77.     push    cs
  78.     pop     ds
  79.     push    0B800h
  80.     pop     es
  81.     xor si,si
  82.     mov     ax, cs
  83.     mov     cs:cs_old, ax
  84.     sidt    fword ptr idtr_old
  85.     sgdt    fword ptr gdtr_old
  86.     mov     eax, 0
  87.         mov     ax, cs
  88.     shl     eax, 4
  89.     mov     main_rec+2, ax
  90.     shr     eax, 16
  91.     mov     byte ptr main_rec+4, al
  92.     mov     eax, 0
  93.         mov     ax, cs
  94.         shl     eax, 4
  95.     add     eax, offset GDT
  96.         mov     gdtr_base, eax
  97.     lgdt    fword ptr gdtr
  98.     mov     eax, 0
  99.     mov     ax, cs
  100.     shl     eax, 4  
  101.         add     eax, offset IDT
  102.         mov     IDTR_base, eax  
  103.         lidt    fword ptr idtr   
  104.     mov     eax, cr0
  105.     or      al, 1
  106.     mov     cr0, eax  
  107.     db      0EAh  
  108.     dw      $ + 4
  109.     dw      8 ;-------------
  110.     in      al, 021h
  111.     mov     mask_old1, al
  112.     in      al, 0A1h
  113.     mov     mask_old2, al
  114.     mov     al, 11h
  115.     out     020h, al
  116.         out     0A0h, al
  117.     mov     al, 20h        
  118.         out     021h, al
  119.         mov     al, 28h                
  120.         out     0A1h, al
  121.         mov     al, 4      
  122.         out     021h, al
  123.         mov     al, 2                      
  124.         out     0A1h, al
  125.         mov     al, 1      
  126.     out     021h, al
  127.         out     0A1h, al
  128.     mov     al, 0fch  
  129.     out     021h, al
  130.     mov     al, 0ffh  
  131.     out     0A1h, al
  132.     in      al, 70h  
  133.         and     al, 7Fh  
  134.         out     70h, al
  135.     sti
  136.  
  137. poll:
  138.     cmp sec
  139.     jne poll
  140. back:      
  141.     cli
  142.     in  al, 70h
  143.     or  al, 80h
  144.     out     70h, al
  145.     mov     al, 11h
  146.         out     020h, al
  147.         out     0A0h, al
  148.     mov     al, 08h                
  149.     out     021h, al
  150.         mov     al, 70h                
  151.         out     0A1h, al
  152.         mov     al, 4      
  153.     out     021h, al
  154.         mov     al, 2                      
  155.         out     0A1h, al
  156.         mov     al, 1      
  157.     out     021h, al
  158.         out     0A1h, al
  159.     mov     al, mask_old1  
  160.     out     021h, al
  161.     mov     al, mask_old2
  162.     out     0A1h, al   
  163.     mov     eax, cr0
  164.     and     al, 0FEh
  165.     mov     cr0, eax       
  166.     db      0EAh
  167.     dw      $+4  
  168.     cs_old  dw      0
  169.  
  170.     lidt    fword ptr idtr_old
  171.     lgdt    fword ptr gdtr_old
  172.    
  173.     mov     ax, cs
  174.         mov     ds, ax
  175.         mov     ss, ax
  176.         mov     es, ax
  177.     in      al, 70h  
  178.         and     al, 7Fh  
  179.         out     70h, al
  180.     sti
  181.     mov ax, 4C00h
  182.     int 21h
  183. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement