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>
- string db 'Hello, world!', 0
- count db 5
- SymNum dw 0
- mydata ends
- mycode segment
- ; Polzovatelskii obrabotchik preryvaniya
- myhandler:
- sti
- ; <Kod obrabotchika preryvaniya v sootvetstvii s zadaniem>
- push ax
- mov ax, mydata
- mov ds, ax
- pop ax
- mov di, offset count; переменная count
- dec byte ptr ds:[di]
- jnz exitHandler
- ; обработка на 17 такте
- mov byte ptr ds:[di], 5
- push ds
- push di
- push bx
- push ax
- mov ax, mydata
- mov ds, ax
- mov di, offset SymNum
- mov bp, ds:[di]
- ;mov di, offset SymNum
- inc word ptr ds:[di]
- mov di, offset string
- mov bl, ds:[di+bp]
- shl bp, 1
- mov ax, 0B800h
- mov ds, ax
- mov byte ptr ds:[bp], bl
- mov byte ptr ds:[bp+1], 01110001b
- pop ax
- pop bx
- pop di
- pop ds
- exitHandler:
- 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>
- mov si, 70h
- push es:[si+2]; сохраняем вектор прерываний
- push es:[si];
- mov word ptr es:[si+2], seg myhandler; записываем в вектор прерываний адрес обработчика
- mov word ptr es:[si], offset myhandler;
- in al, 21h; считываем рег IMR
- and al, 0FEh; скидываем бит irq0 в 0
- out 21h, al; записываем число в 21h
- sti; разрешаем прерывания
- mov cx, 0FFFFh
- ddelay:
- mov bx, 0FFFFh
- delay:
- nop
- dec bx
- jnz delay
- nop
- dec cx
- jnz ddelay
- ; возврат в исх сост
- pop es:[si]
- pop es:[si+2]
- ; 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