i found this code it works well but i didn't understand it can you tell me how this code work because i haven't experience and i work on tasm
;=========================================================================
;MASM 5.1
.model small, c
.386
.stack
;=========================================================================
.data
bitPatterns label byte
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 000[COLOR="Red"]11[/COLOR]000b
db 000[COLOR="Red"]11[/COLOR]000b
db 0[COLOR="Red"]11[/COLOR]00[COLOR="Red"]11[/COLOR]0b
db 0[COLOR="Red"]11[/COLOR]00[COLOR="Red"]11[/COLOR]0b
db 000[COLOR="Red"]11[/COLOR]000b
db 000[COLOR="Red"]11[/COLOR]000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 000[COLOR="Red"]11[/COLOR]000b
db 00[COLOR="Red"]1[/COLOR]00[COLOR="Red"]1[/COLOR]00b
db 000[COLOR="Red"]11[/COLOR]000b
db 000[COLOR="Red"]11[/COLOR]000b
db 00[COLOR="Red"]1[/COLOR]00[COLOR="Red"]1[/COLOR]00b
db 00[COLOR="Red"]1[/COLOR]00[COLOR="Red"]1[/COLOR]00b
db 0[COLOR="Red"]1[/COLOR]0000[COLOR="Red"]1[/COLOR]0b
db 0[COLOR="Red"]1[/COLOR]0000[COLOR="Red"]1[/COLOR]0b
db [COLOR="Red"]1[/COLOR]000000[COLOR="Red"]1[/COLOR]b
db [COLOR="Red"]11[/COLOR]0000[COLOR="Red"]11[/COLOR]b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db [COLOR="Red"]11111111[/COLOR]b
db [COLOR="Red"]11111111[/COLOR]b
db 00[COLOR="Red"]1111[/COLOR]00b
db 00[COLOR="Red"]1111[/COLOR]00b
db 00[COLOR="Red"]1111[/COLOR]00b
db 00[COLOR="Red"]1111[/COLOR]00b
db 00[COLOR="Red"]1111[/COLOR]00b
db 00[COLOR="Red"]1111[/COLOR]00b
db 00[COLOR="Red"]1111[/COLOR]00b
db 00[COLOR="Red"]1111[/COLOR]00b
db 00[COLOR="Red"]1111[/COLOR]00b
db 00[COLOR="Red"]1111[/COLOR]00b
db [COLOR="Red"]11111111[/COLOR]b
db [COLOR="Red"]11111111[/COLOR]b
db 00000000b
db 11111111b
db 10000001b
db 10000001b
db 10000001b
db 10000001b
db 10000001b
db 10000001b
db 10000001b
db 10000001b
db 10000001b
db 10000001b
db 10000001b
db 10000001b
db 10000001b
db 10000001b
db 11111111b
db 00011000b
db 00111100b
db 01111110b
db 11111111b
db 01111110b
db 00111100b
db 00011000b
db 00111100b
db 01111110b
db 11111111b
db 01111110b
db 00111100b
db 00011000b
db 00111100b
db 01111110b
db 11111111b
.code
;=========================================================================
start:
;-------------------------------------------------------
; When the OS loads the program it leaves DS and ES set
; to the segment address of the Program Segment Prefix.
; To access the program's data we must set DS to the
; segment address of the program's data segment.
;
; ML 6.0 and later provides a .STARTUP directive that
; can be used to do this.
;-------------------------------------------------------
mov ax, DGROUP
mov ds, ax
;----------------------------
; Make the cursor invisible.
;----------------------------
mov ah, 1
mov ch, 00100000b
int 10h
;-----------------------------------------------
; Set the cursor position to row 10, column 32.
;-----------------------------------------------
mov ah, 2
mov bh, 0
mov dh, 10
mov dl, 32
int 10h
;---------------------------------------------------------
; Under Windows the loaded characters will not be used if
; the app is running in a window. Delay for ~5 seconds to
; give the user time to switch to full-screen mode.
;---------------------------------------------------------
push 40h
pop es
mov bx, 6ch
mov ecx, es:[bx]
add ecx, 18*5
L1:
mov eax, es:[bx]
cmp eax, ecx
jb L1
;-----------------------------------------------------
; Load the bit patterns for 5 characters, starting at
; character offset 224 in block 0 of the area of the
; display memory that is used to store loaded fonts.
;-----------------------------------------------------
mov cx, 5
mov dx, 224
mov bl, 0
mov bh, 16
push ds
pop es
mov bp, OFFSET bitPatterns
mov ax, 1100h
int 10h
;------------------------------------------------------------
; Display the new characters. The REPT directive repeats the
; statements between it and the ENDM directive the specified
; number of times. For each repeat the current value of N is
; substutited in the mov dl, N statement. So the first block
; will be assembled as:
; mov ah, 2
; mov dl, 224
; int 21h
; mov ah, 2
; mov dl, 32
; int 21h
; mov ah, 2
; mov dl, 32
; int 21h
; The next as:
; mov ah, 2
; mov dl, 225
; int 21h
; . . .
; And so on.
;------------------------------------------------------------
N=224
REPT 5
mov ah, 2
mov dl, N
int 21h
mov ah, 2
mov dl, 32
int 21h
mov ah, 2
mov dl, 32
int 21h
N=N+1
ENDM
;--------------------------------------
; Wait for a key press before exiting.
;--------------------------------------
xor ah, ah
int 16h
;----------------------------------------------------------------
; Terminate the program by calling the DOS End Program function.
;
; ML 6.0 and later provides a .EXIT directive that can be used
; to do this.
;----------------------------------------------------------------
mov ax, 4c00h
int 21h
;=========================================================================
end start