What is the difference between the following commands: LEA, LDS, LES? I searched for the answer but I'm not very clear on it. From what I understood block1 should be equivalent to block2.
.data
  str1 db 'My first string. $'
  str2 db 'My second string. $'
  ptr_str1 dd str1 
  ptr_str2 dd str2
.code
  _block1:
  mov AX, @data
  mov DS, AX
  mov ES, AX
  lea SI, str1
  lea DI, str2
  _block2:
  lds SI, ptr_str1
  les DI, ptr_str2
... but when I print str1 and str1 using the following macro, the second block doesn't return the expected results. 
print MACRO param
    lea DX, param
    mov AH, 9
    int 21h
ENDM
 
    