求各路高手  给这个小程序  加一下注释   以便小弟看懂
data segment
  num dw 64h
  max dw 3e8h
  sec db 3 dup(?) 
data ends
code segment
main proc far
  assume cs:code,ds:data
start:
  mov ax,data
  mov ds,ax
again:
  mov ax,num
  push ax
  mov ax,0
  push ax
  call checkit
  pop ax
  cmp ax,0
  je not_match
  call printit
not_match:
  pop ax
  inc ax
  mov num,ax
  cmp ax,max
  je exit
  jmp again 
exit:
  mov ax,4c00h
  int 21h
main endp
checkit proc
  push bp
  mov bp,sp
  mov ax,[bp+6]
  mov bl,100
  div bl
  mov sec,al
  xchg al,ah
  xor ah,ah
  mov bl,10
  div bl
  mov sec+1,al
  mov sec+2,ah
  xor cx,cx
  mov al,sec
  mov ah,0
  mov bx,ax
  mul bx
  mul bx
  mov cx,ax
  mov al,sec+1
  mov ah,0
  mov bx,ax
  mul bx
  mul bx
  add ax,cx
  mov cx,ax
  mov al,sec+2
  mov ah,0
  mov bx,ax
  mul bx
  mul bx
  add ax,cx
  mov bx,ax
  mov ax,[bp+6]
  cmp ax,bx
  jne no
  mov ax,0ffffh
  mov [bp+4],ax
no:
  pop bp
  ret
checkit endp
printit proc
  mov al,sec
  or al,30h
  mov dl,al
  mov ah,2
  int 21h
  mov al,sec+1
  or al,30h
  mov dl,al
  mov ah,2
  int 21h
  mov al,sec+2
  or al,30h
  mov dl,al
  mov ah,2
  int 21h
  mov dl,0dh
  mov ah,2
  int 21h
  mov dl,0ah
  mov ah,2
  int 21h
  ret 
printit endp
code ends
  end start
[em18][em18][em18]