Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
146
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. counter1 dw 1
  9. counter2 dw 5
  10. counter3 dw 0
  11. counter4 dw 0
  12. ;position dw 1040
  13. ;direction dw 0    ; 0 - движение налево, 4 - направо
  14. ;rightside dw 0
  15. myarray db '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
  16. mydata ends
  17.  
  18. mycode segment
  19.         ; Polzovatelskii obrabotchik preryvaniya
  20. myhandler:
  21.     sti
  22.         ; <Kod obrabotchika preryvaniya v sootvetstvii s zadaniem>
  23.     mov ax, 0B800h
  24.     mov es, ax
  25.     mov ax, mydata
  26.     mov ds, ax
  27.     ;mov di, 0
  28.  
  29.     mov si, offset myarray
  30.     add si, counter1
  31.  
  32.     mov cl, ds:[si]
  33.         mov es:[0], cl
  34.         mov byte ptr es:[1], 0Eh
  35.    
  36.     mov si, offset myarray
  37.     add si, counter2
  38.  
  39.     mov cl, ds:[si]
  40.         mov byte ptr es:[2], cl
  41.         mov byte ptr es:[3], 0Eh
  42.  
  43.     mov si, offset myarray
  44.     add si, counter3
  45.  
  46.     mov cl, ds:[si]
  47.         mov byte ptr es:[4], cl
  48.         mov byte ptr es:[5], 0Eh
  49.  
  50.     mov si, offset myarray
  51.     add si, counter4
  52.  
  53.     mov cl, ds:[si]
  54.         mov es:[6], cl
  55.         mov byte ptr es:[7], 0Eh
  56. ;jmp exit
  57.     jmp cycle
  58.  
  59. zero:
  60.     mov counter1, 0
  61.     mov si, offset myarray
  62.     add si, counter1
  63.     mov CL, ds:[si]
  64.     ;mov CL, ds:[myarray+counter1]
  65.     mov byte ptr es:[0], CL
  66.         ;mov byte ptr es:[di+ 1], 0Eh
  67.     jmp cycle
  68.  
  69. inc_1:
  70.     mov counter2, 0
  71.     mov si, offset myarray
  72.     add si, counter2
  73.     mov CL, ds:[si]
  74.     ;mov CL, ds:[myarray+counter2]
  75.     mov byte ptr es:[2], CL
  76.         ;mov byte ptr es:[di+ 3], 0Eh
  77.     cmp counter1, 15
  78.     jz zero
  79.     inc counter1
  80.     mov si, offset myarray
  81.     add si, counter1
  82.     mov CL, ds:[si]
  83.     ;mov CL, ds:[myarray+counter1]
  84.     mov byte ptr es:[0], CL
  85.         ;mov byte ptr es:[di+1], 0Eh
  86.     jmp cycle
  87.  
  88. inc_2:
  89.     mov counter3, 0
  90.     mov si, offset myarray
  91.     add si, counter3
  92.     mov CL, ds:[si]
  93.     ;mov CL, ds:[myarray+counter3]
  94.     mov byte ptr es:[4], CL
  95.         ;mov byte ptr es:[di+ 5], 0Eh
  96.     cmp counter2, 15
  97.     jz inc_1
  98.     inc counter2
  99.     mov si, offset myarray
  100.     add si, counter2
  101.     mov CL, ds:[si]
  102.     ;mov CL, ds:[myarray+counter2]
  103.     mov byte ptr es:[2], CL
  104.         ;mov byte ptr es:[3], 0Eh
  105.     jmp cycle
  106.  
  107. inc_3:
  108.     mov counter4, 0
  109.     mov si, offset myarray
  110.     add si, counter4
  111.     mov CL, ds:[si]
  112.     ;mov CL, ds:[myarray+counter4]
  113.     mov byte ptr es:[6], CL
  114.         ;mov byte ptr es:[7], 0Eh
  115.     cmp counter3, 15
  116.     jz inc_2
  117.     inc counter3
  118.     mov si, offset myarray
  119.     add si, counter3
  120.     mov CL, ds:[si]
  121.     ;mov CL, ds:[myarray+counter3]
  122.     mov byte ptr es:[4], CL
  123.         ;mov byte ptr es:[di+ 5], 0Eh
  124.     jmp cycle
  125.  
  126. cycle:
  127.       ;задержка
  128.     mov ax, 10Fh
  129. time1:
  130.     mov dx, 1111h
  131. time2:
  132.     nop
  133.     dec dx
  134.     jnz time2
  135.     dec ax
  136.     jnz time1
  137.  
  138.     cmp counter4, 15
  139.     jz inc_3
  140.     inc counter4
  141.     mov si, offset myarray
  142.     add si, counter4
  143.     mov CL, ds:[si]
  144.         ;mov CL, ds:[myarray+counter4]
  145.     mov byte ptr es:[6], CL
  146.         ;mov byte ptr es:[7], 0Eh
  147.     jmp cycle
  148.  
  149. ;exit:
  150.  
  151.     mov al, 20h
  152.     out 20h, al
  153.     iret
  154.  
  155.  
  156. ; Tochka vhoda v programmu
  157. mystart:        
  158.     mov ax, mydata
  159.     mov ds, ax        
  160.     mov ax, 0
  161.     mov es, ax
  162.     mov ax, mystack
  163.     mov ss, ax
  164.     mov sp, 0
  165.  
  166.     ; <Kod osnovnoi programmi v sootvetstvii s zadaniem>
  167.  
  168.         ;перенастраивание вектора прер
  169.             ; сохраняем исходное значение вектора 1Ch
  170.     mov ax, 0
  171.     mov ds, ax
  172.     mov bx, ds:[1Ch*4]
  173.     mov bp, ds:[1Ch*4+2]
  174.             ;записываем новое значение вектора 1Ch
  175.     mov ax, offset myhandler
  176.     mov dx, seg myhandler
  177.  
  178.     cli
  179.     mov word ptr ds:[1Ch*4], ax
  180.     mov word ptr ds:[1Ch*4+2], dx
  181.     sti
  182.  
  183.       ;задержка
  184.     mov ax, 1FFFh
  185. time3:
  186.     mov dx, 0FFFh
  187. time4:
  188.     nop
  189.     dec dx
  190.     jnz time4
  191.     dec ax
  192.     jnz time3
  193.  
  194.         ;восстановление вектора
  195.     mov ax, 0
  196.     mov ds, ax
  197.     cli
  198.     mov word ptr ds:[1Ch*4], bx
  199.     mov word ptr ds:[1Ch*4+2], bp
  200.     sti
  201.  
  202.             ; Vyhod v DOS
  203.     mov ax, 4C00h
  204.     int 21h
  205. mycode ends
  206.  
  207. .stack
  208. mystack segment
  209.     db 1000 dup(?)  ; razmer steka 1000 bait
  210. mystack ends
  211.  
  212. end mystart
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement