请大家帮忙看看小弟我对这个顺序程序的第二种解法的理解有什么有关问题

请大家帮忙看看我对这个顺序程序的第二种解法的理解有什么问题?
例1:设X和 Y均为16位无符号数,写一个求表达式`16X+Y值的程序。
  由于表达式中的X和Y是16位数,表达式的结果可能要超出16位,所以定义两个自变量用于保存X和Y,另外用一个32位的双字变量来保存结果。数据段可定义如下:
  ;程序名:T3-2.ASM
  ;功能:计算16X+Y
  DSEG   SEGMENT
  XXX    DW   1234H       ;设X为1234H
  YYY    DW   5678H       ;设Y为5678H
  ZZZ    DD   ?            ;用于保存结果
  DSEG   ENDS
程序的代码段如下:
   CSEG  SEGMENT
         ASSUME  CS:CSEG,   DS:DSEG
   START: MOV   AX,DSEG         ;(1)设置数据段寄存器值
         MOV   DS,AX
         MOV   AX,XXX         ;(2)把X送AX并扩展到32位
         XOR    DX, DX
         ADD    AX, AX          ;(3)计算X*16
         ADC    DX, DX
         ADD    AX, AX          ;X*4
         ADC    DX, DX
         ADD    AX, AX           ;X*8
         ADC    DX, DX
         ADD    AX, AX           ;X*16
         ADC    DX, DX
         ADD    AX, YYY          ;(4)在X*16的结果上再加Y
         ADC    DX,0
         MOV   WORD  PTR  ZZZ, AX  ;(5)保存结果
         MOV   WORD  PTR  ZZZ+2, DX
         MOV   AH,4CH              ;(6)返回DOS
         INT    21H
CSEG ENDS 
     END   START
 第(3)步是计算X*16,采用了四次自身相加的方法达到乘16的目的。也可采用移位的方法达到乘16的目的,这样就不能简单地把16位扩展到32位,第(2)步和第(3)步可合并如下:
  MOV  AX,XXX         ;X送AX
  MOV  DX,AX          ;X送DX
  MOV  CL, 4         
  SHL   AX,CL           ;AX左移4位等价于乘16
  MOV  CL,12
  SHR   DX,CL           ;等价于得AX的高4位
问题:第二种用移位的方法来达到乘16的目的的方法中,我有三点弄不明白。
(一)前两句:  MOV  AX,XXX
                       MOV  DX,  AX
这两句没把16位扩展到32位吗?
(二)下面两句  MOV  CL, 4         
                       SHL   AX,CL        ;AX左移4位等价于乘16
因为AX的内容为0,所以DX和AX中的内容为23400000H,前面的1被移走了,是这样吗?
(三)          MOV  CL,12
                SHR   DX,CL              ;等价于得AX的高4位
刚相乘完又向右移12位,这是什么意思,移完的最后结果应该是什么? 具体这第二种方法的变化详细步骤,请前辈们

------解决方案--------------------
引用
(一)前两句:  MOV  AX,XXX
                       MOV  DX,  AX
这两句没把16位扩展到32位吗?
(二)下面两句  MOV  CL, 4         
                       SHL   AX,CL        ;AX左移4位等价于乘16
因为AX的内容为0,所以DX和AX中的内容为23400000H,前面的1被移走了,是这样吗?
(三)          MOV  CL,12
                SHR   DX,CL              ;等价于得AX的高4位