seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 100h
header proc far
start:
mov ah,0Fh
int 10h ; Video display ah=functn 0Fh
; get state, al=mode, bh=page
; ah=columns on screen
push ax
xor ah,ah ; Zero register
mov al,5
int 10h ; Video display ah=functn 00h
; set display mode in al
mov cx,51h
mov ax,17Fh
sub ax,1000h
mov si,ax
loc_1:
push cx
push si
pop ds
push ds
xor si,si ; Zero register
mov ax,0B800h
mov es,ax
xor di,di ; Zero register
mov cx,4000h
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
pop ax
add ax,40h
mov si,ax
pop cx
sub cx,1
cmp cx,0
jne loc_1 ; Jump if not equal
call sub_1
xor ah,ah ; Zero register
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
pop ax
mov ah,0
int 10h ; Video display ah=functn 00h
; set display mode in al
xor ah,ah ; Zero register
int 21h ; DOS Services ah=function 00h
; terminate, cs=progm seg prefx
header endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_1 proc near
mov cx,15h
xor ax,ax ; Zero register
loc_2:
push cx
push ax
mov ds,ax
xor si,si ; Zero register
mov ax,0B800h
mov es,ax
xor di,di ; Zero register
mov cx,4000h
repne movsb ; Rep zf=0+cx >0 Mov [si] to es:[di]
push cs
pop ds
mov ax,17Fh
mov si,ax
mov ax,0B800h
mov es,ax
xor di,di ; Zero register
mov cx,4000h
repne movsb ; Rep zf=0+cx >0 Mov [si] to es:[di]
pop ax
pop cx
add ax,120h
sub cx,1
cmp cx,0
jne loc_2 ; Jump if not equal
retn
sub_1 endp
seg_a ends
end start