Consider on Windows XP that you can still run the
following code:
        mov     cl,9
        mov     dx,offset HWMes
        call    5
        mov     cl,0
        call    5 
 Huh?  Do you mean this?
 MOV  AH, 9
 MOV  DX, HWMes
 INT  21h
 MOV  AH, 0
 INT  21h 
    No, he meant what he wrote.  It's the CP/M compatibility layer
built into
 MS-DOS.  Address 5 of the PSP (Program Segment Prefix) contains a long jump
 to MS-DOS, and uses CL for the function code instead of AH. 
 
. . . and, you need to move the ADDRESS of the message into DS:DX, NOT the
first two bytes of the message into DX.
MOV DX, OFFSET HWMes
you can also end the program with a jump (or call) to location 0,
or even a RET without CALL (there's a 0 on the stack),
since the PSP starts with CD 20 (INT 20h)