assume cs:code
stack segment
    db 128 dup(0)
stack ends
code segment
    start:
        mov ax,stack
        mov ss,ax
        mov sp,128
        push cs
        pop ds
        mov si,offset int9start
        mov ax,0
        mov es,ax
        mov di,204h
        mov cx,offset int9end - offset int9start
        cld
        rep movsb
        push es:[9*4]
        pop es:[200h]
        push es:[9*4+2]
        pop es:[202h]
       cli
        mov word ptr es:[9*4],204h
        mov word ptr es:[9*4+2],0h
        sti
        mov ax,4c00h
        int 21h
    int9start:
            push ax
            push cx
            push es
            push di
            pushf
            call dword ptr cs:[200h]
            in al,60h
            cmp al,1eh+80h
            jne ok
            mov cx,2000
            mov ax,0b800h
            mov es,ax
            mov di,0
        s:
            mov byte ptr es:[di],'A'
            mov byte ptr es:[di+1],2
            add di,2
            loop s
        ok:
            pop di
            pop es
            pop cx
            pop ax
            iret
    int9end:
        nop
code ends
end start
 
 
