SI is a 16-bit-register, so using mov EAX,SI tells the compiler to take 16-bit-SI and copy it to 32-bit-EAX, which he moarns about.
i've copied your source, renamed SI and it worked... altough the string was crap with a beep, actually :)

what do you need this for?

edit: "crap with a beep" = random ascii + the ascii-code for making a beep when outputting it via writeln *g*