Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model tiny
- assume cs:mycode
- assume ds:mydata
- assume ss:mystack
- mydata segment
- ; <Ob'yavleniya peremennyh i strok>
- counter1 dw 1
- counter2 dw 5
- counter3 dw 0
- counter4 dw 0
- ;position dw 1040
- ;direction dw 0 ; 0 - движение налево, 4 - направо
- ;rightside dw 0
- myarray db '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
- mydata ends
- mycode segment
- ; Polzovatelskii obrabotchik preryvaniya
- myhandler:
- sti
- ; <Kod obrabotchika preryvaniya v sootvetstvii s zadaniem>
- mov ax, 0B800h
- mov es, ax
- mov ax, mydata
- mov ds, ax
- ;mov di, 0
- mov si, offset myarray
- add si, counter1
- mov cl, ds:[si]
- mov es:[0], cl
- mov byte ptr es:[1], 0Eh
- mov si, offset myarray
- add si, counter2
- mov cl, ds:[si]
- mov byte ptr es:[2], cl
- mov byte ptr es:[3], 0Eh
- mov si, offset myarray
- add si, counter3
- mov cl, ds:[si]
- mov byte ptr es:[4], cl
- mov byte ptr es:[5], 0Eh
- mov si, offset myarray
- add si, counter4
- mov cl, ds:[si]
- mov es:[6], cl
- mov byte ptr es:[7], 0Eh
- ;jmp exit
- jmp cycle
- zero:
- mov counter1, 0
- mov si, offset myarray
- add si, counter1
- mov CL, ds:[si]
- ;mov CL, ds:[myarray+counter1]
- mov byte ptr es:[0], CL
- ;mov byte ptr es:[di+ 1], 0Eh
- jmp cycle
- inc_1:
- mov counter2, 0
- mov si, offset myarray
- add si, counter2
- mov CL, ds:[si]
- ;mov CL, ds:[myarray+counter2]
- mov byte ptr es:[2], CL
- ;mov byte ptr es:[di+ 3], 0Eh
- cmp counter1, 15
- jz zero
- inc counter1
- mov si, offset myarray
- add si, counter1
- mov CL, ds:[si]
- ;mov CL, ds:[myarray+counter1]
- mov byte ptr es:[0], CL
- ;mov byte ptr es:[di+1], 0Eh
- jmp cycle
- inc_2:
- mov counter3, 0
- mov si, offset myarray
- add si, counter3
- mov CL, ds:[si]
- ;mov CL, ds:[myarray+counter3]
- mov byte ptr es:[4], CL
- ;mov byte ptr es:[di+ 5], 0Eh
- cmp counter2, 15
- jz inc_1
- inc counter2
- mov si, offset myarray
- add si, counter2
- mov CL, ds:[si]
- ;mov CL, ds:[myarray+counter2]
- mov byte ptr es:[2], CL
- ;mov byte ptr es:[3], 0Eh
- jmp cycle
- inc_3:
- mov counter4, 0
- mov si, offset myarray
- add si, counter4
- mov CL, ds:[si]
- ;mov CL, ds:[myarray+counter4]
- mov byte ptr es:[6], CL
- ;mov byte ptr es:[7], 0Eh
- cmp counter3, 15
- jz inc_2
- inc counter3
- mov si, offset myarray
- add si, counter3
- mov CL, ds:[si]
- ;mov CL, ds:[myarray+counter3]
- mov byte ptr es:[4], CL
- ;mov byte ptr es:[di+ 5], 0Eh
- jmp cycle
- cycle:
- ;задержка
- mov ax, 10Fh
- time1:
- mov dx, 1111h
- time2:
- nop
- dec dx
- jnz time2
- dec ax
- jnz time1
- cmp counter4, 15
- jz inc_3
- inc counter4
- mov si, offset myarray
- add si, counter4
- mov CL, ds:[si]
- ;mov CL, ds:[myarray+counter4]
- mov byte ptr es:[6], CL
- ;mov byte ptr es:[7], 0Eh
- jmp cycle
- ;exit:
- mov al, 20h
- out 20h, al
- iret
- ; Tochka vhoda v programmu
- mystart:
- mov ax, mydata
- mov ds, ax
- mov ax, 0
- mov es, ax
- mov ax, mystack
- mov ss, ax
- mov sp, 0
- ; <Kod osnovnoi programmi v sootvetstvii s zadaniem>
- ;перенастраивание вектора прер
- ; сохраняем исходное значение вектора 1Ch
- mov ax, 0
- mov ds, ax
- mov bx, ds:[1Ch*4]
- mov bp, ds:[1Ch*4+2]
- ;записываем новое значение вектора 1Ch
- mov ax, offset myhandler
- mov dx, seg myhandler
- cli
- mov word ptr ds:[1Ch*4], ax
- mov word ptr ds:[1Ch*4+2], dx
- sti
- ;задержка
- mov ax, 1FFFh
- time3:
- mov dx, 0FFFh
- time4:
- nop
- dec dx
- jnz time4
- dec ax
- jnz time3
- ;восстановление вектора
- mov ax, 0
- mov ds, ax
- cli
- mov word ptr ds:[1Ch*4], bx
- mov word ptr ds:[1Ch*4+2], bp
- sti
- ; Vyhod v DOS
- mov ax, 4C00h
- int 21h
- mycode ends
- .stack
- mystack segment
- db 1000 dup(?) ; razmer steka 1000 bait
- mystack ends
- end mystart
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement