title: What's the purpose of PUSH CS / POP DS before a REP MOVSW?
body: <p>Why in below code we push code segment (PUSH CS) and then popping it into the data segment (POP DS)?</p>
  
  <p>I am giving these lines explicitly as line1 and line2. Please let me know how MOVSW is working here. </p>
  
  <pre><code>IF  HIGHMEMORY
  PUSH DS
  MOV BX, DS
  ADD BX, 10H
  MOV ES, BX
  PUSH CS.           ;line1
  POP DS.            ;line2
  XOR SI, SI
  MOV DI, SI
  MOV CX, OFFSET SYSSIZE  +  1
  SHR CX, 1
  REP MOVSW.    ;line3
  POP DS
  PUSH ES
  MOV AX, OFFSET SECONDRELOCATION
  PUSH AX
  AAA PROC FAR
  RET
  AAA ENDP 
  SECONDRELOCATION:
  more code here.............. 
  </code></pre>