Here are my questions:
1) How do we know when to use SS:[SP] or SS:[BP]? Or we can use both anywhere or their functions are specified separately?
2) How do we know when to use DS:[BX] or DS:[DI] or DS:[SI]? Or we can use them anywhere we want? And What is meant by the sentence "an 8- or 16-bit number"?
3) What is the meaning of this line "ES DI for string instructions String destination address"? Is this only for string? Can we not use ES:[DI] for any other purpose?
4) Final. DI is the offset for both ES and DS in the 4th and 3rd lines respectively of the table 2-3. If we use DS:[DI] then we can't use ES:[DI], am I right or wrong?
1)
SP is the stack pointer
when you PUSH or POP, you can watch it change
sometimes, we add or subtract on the SP register, to reserve space for several and/or larger data items
BP is typically used as a stack frame base pointer
like the SP register, it also references the SS segment
however, the BP register does not change when you PUSH or POP
you will see more use of the EBP register in 32-bit code where function arguments are passed on the stack
in 16-bit code, arguments were often passed in registers
compiled code may have passed arguments on the stack
but, unless you are disassembling compiled code, you rarely saw it used that way
however, BP is still used for local data
there are many forum posts to search on this subject
2a)
for BX, SI, or DI, the default reference segment is DS
however, when using string instructions, ES is the default reference segment for DI
this allows moves and compares across segment boundries
2b)
not really sure why they mentioned 8-bit values - it's a little confusing for learning readers
but, an address offset does not need to be greater than 255

3)
see answer 2a
also, you are looking at the default reference segments
you may override them by specifying a different segment
SS:[DI], ES:[DI], even CS:[DI] are allowed
for BP, the default is SS, but may also be overridden to DS:[BP] (or any other segment)
4)
sometimes, DS and ES may have the same value
the question depends on context - that's why i suggested more reading